《毕业设计基于单片机的程控放大器设计.doc》由会员分享,可在线阅读,更多相关《毕业设计基于单片机的程控放大器设计.doc(36页珍藏版)》请在三一办公上搜索。
1、可编程放大器设计摘 要本设计主要以DAC0832内部的电阻网络作为核心,利用AT89S52单片机控制所选D/A的电阻网络状态,同时利用两个独立键盘来控制正弦波的放大倍数,并利用四位数码管将其显示出来。经过实际测量,本系统可以实现通频为20Hz20KHz,Vpp为20mV20V,放大0.4100倍,且步进为0.4可调的无失真的波形放大器。关键词:AT89S52单片机 数码管 放大器 AbstractThe design mainly base on DAC0832s inside resistors regarding as the kernel,it is used on the AT89S5
2、2 MCU controlling the resistors condition.At the same time,it utilizes double Individual Keys to control sinusoidal waves amplify,additionally,four digital tube to display the concrete value.After measured,the system could make the function come true. In detail,the wave amplifiers parameter:pass ban
3、d:20Hz20KHz,Vpp:20mV20V,amplify:0.4100,step:0.4(adjusted no distortion).Key words: AT89S52 Micro Controller Unit digital tube amplifier目 录摘要 -2一核心模块的方案论证与比较-3 1.1 滤波模块 - 3 1.2 控制模块-3 1.3 显示模块- 3 1.4 自动增益模块-41.5 波形放大模块-4 二方案设计与总体论证-4 三单元电路分析与实现 -5 3.1 滤波模块 -5 3.2显示模块 - 6 3.3 波形放大模块-7 3.4 自动增益模块-8四单片机
4、软件设计-9 4.1 软件功能-9 4.2 流程图-9五测试结果及分析-9六设计总结-10七附录 -11 7.1 主要元器件清单-11 7.2 程序清单-11第一章 绪 论1.1目前研究的概况和发展趋势 输入端的信号在一定幅度内,从而保证整个仪表的测量精度。但是人工档位调节增加了仪表操作的复杂性、影响了数据测量的实时性,同时档位调节通常采用机械转扭,增加了仪器的不可靠性和接触电阻对测量精度的影响。而且传统的方法是采用可软件设置增益的放大器,如AD8321芯片,并且该类放大器价格较高(如AD8321),选择档位也较少(如TI的PGA103,206等仅3-4档)。还有一种可满足核仪器中所要求的线性
5、度与增益稳定性以及自动稳谱的增益要求的数控放大器。系统在保证放大器的增益稳定性和线性指标的同时却降低了放大器的输入阻抗,必然对前级电路输出阻抗提出更高的要求。在实际应用中可通过增大反馈电阻提高输入阻抗,另外必要时还可以增加一级电压跟随电路,电压跟随器的输入阻抗极高,这样可以忽略电路中的导通电阻对增益的影响,各级增益完全取决于所选电阻。 目前通常由于各类测量仪表设备中的传感器在不同测试中,其输出信号的幅度可能相差很多,传统的处理方法是对放大器增加手动档位调节以保证后端的A/D采集采用单片机来自动选择量程档位,采用非易失性数字电位器和仪表放大器组成的高精度、多档位、低成本的程控放大器。以单片机(或
6、个人计算机)为基础的仪器测量系统的出现,是电子电工测量的一项重大变革,具有广阔的应用前景。1.2核心模块的方案论证与比较1.2.1滤波模块 方案一:采用CF412或者LF412芯片此方案采用CF412或是LF412芯片,因为此芯片的带宽增益积可以达到8MHz, 理论上来说,其上限截至频率可以达到100KHz,但是考虑到此芯片需要18V供电,这会给电源供电模块带来难度而且价格较贵,故不采用这种方案。方案二:采用LM324N芯片此方案是采用LM324N芯片,其带宽增益积为1MHz,经过实际测量,可以实现上限截止频率为20KHz,甚至可以达到30KHz,足以实现基本要求部分,而且此芯片便宜,只需12
7、V供电,会给整个系统的设计带来很大的方便,故采用此方案。1.2.2控制模块 方案一:4*4矩阵键盘控制 此方案可以直接输入所需要的波形放大倍数,方便快捷,但是程序操作复杂,故不采用这种方案。方案二:独立按键控制此方案利用两个独立按键共同控制放大倍数,其中一个按键用来控制倍数的放大,另外一个控制倍数的衰减,以此来达到放大倍数的调节,由于本系统元件较少,而且51单片机正好有两个外部中断口可以利用,程序设计简单,故采用此方案。 1.2.3 显示模块 方案一:1602液晶显示 此方案中液晶显示器可以由ASCll码控制,控制简单,可以显示更多的信息,比如放大倍数和单位等,但是价格相对昂贵,故不为本系统所
8、采用。 方案二:数码管显示 此方案中利用共阴极数码管并对09这10数字进行编码,并利用数码管的动态扫描形式来显示不同的数字,以达到显示放大倍数的目的。由于本系统仅需对放大倍数进行显示,利用四段数码管已经足以达到要求,程序设计也相对容易,产品价格低廉,故本设计采用这种方案实现。1.2.4自动增益模块 方案一:采用MOSFET实现 此方案通过输入信号控制MOS管的Rds 来实现增益的自动调节,由于Rds不好调节,尤其是信号较小时,Rds 变化不明显,需要找到非常合适的电阻,才可以将信号幅度控制在2V3V的范围内,虽然电路简单,但准确度不高,参数的选择较为麻烦,故不采用这种方案。方案二:采用ADC0
9、809实现此方案首先通过峰值检测电路,检测出输入信号的峰值,然后将峰值电压输入ADC0809,由A/D与单片机结合,再通过单片机控制D/A来实现增益的自动调节,该方案简单,容易调节,故采用这种方案。1.2.5波形放大模块 方案一:采用模拟开关CD4051 此方案中采用具有八路模拟开关的电子芯片CD4051,这样可以实现八种不同的放大倍数,若采用两片,就可以实现十六种不同的放大倍数,以此类推。但是显然,这不可以实现步进调节,且其内部的开关导通阻值较大,也会给波形放大带来较大的误差,故不采用这种方案。方案二:采用DAC0832此方案是利用51单片机来控制D/A内部电阻网络的状态,以此来控制其内部电
10、阻的变化,从而控制放大倍数。由于DAC0832输出的是电流信号,所以需要利用LM324N运算放大器来将其转换成电压形式,以此来输出放大后的正弦波,故采用这种方案。1.3 本文的设计思路本章提出了一种基于AT89C51单片机控制的简易程控放大器系统。单片机通过DAC0832将数字量转化为模拟量经放大器放大输出最后通过液晶显示。本系统的设计基于AT89C51单片机和运算放大器,通过调节外部独立按键来实现控制电压的大小。1.4 本文的主要内容(1) DAC0832的工作原理(2) 放大器工作原理(3) LCD1602液晶的驱动1.5系统设计要求本系统设计的程控放大器可以实现如下功能: 设计一个简易的
11、程控放大器系统,它可以通过按键输入来控制输出的电压大小。 输出的值可通过LCD1602液晶显示。 能够自己改变放大器的放大倍数。第二章 系统的硬件设计 该方案是以单片机AT89S52控制为核心,两个独立按键和D/A芯片与单片机结合参与工作,实现波形放大以及放大倍数的调节。系统框图如图2-1所示。该方案的优点是实现了软件与硬件相结合的控制方式,设置参数较为方便,可以实现倍数的快速调节,误差也较小,并且通过数码管将其显示出来。再加上峰值检测电路和模数转换,可以实现增益的自动调节。图2-1 系统整体设计框图2.1 AT89S52 单片机AT89S52为 ATMEL 所生产的一种低功耗、高性能CMOS
12、8位微控制器,具有8K在系统可编程Flsah存储器。(一)、AT89S52主要功能列举如下:1、拥有灵巧的8位CPU和在系统可编程Flash2、晶片内部具时钟振荡器(传统最高工作频率可至 12MHz)3、内部程序存储器(ROM)为 8KB4、内部数据存储器(RAM)为 256字节5、32 个可编程I/O 口线6、8 个中断向量源7、三个 16 位定时器/计数器8、三级加密程序存储器9、全双工UART串行通道(二)、AT89S52各引脚功能介绍,如图2-2:图2-2 AT89S52 引脚图VCC:AT89S52电源正端输入,接+5V。VSS:电源地端。XTAL1:单芯片系统时钟的反相放大器输入端
13、。XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。RESET:AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。EA/Vpp:EA为英文External Access的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚
14、接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。ALE/PROG:ALE是英文Address Latch Enable的缩写,表示地址锁存器启用信号。AT89S52可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0A7)锁进锁存器中,因为AT89S52是以多工的方式送出地址及数据。平时在程序执行时ALE引脚
15、的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。PSEN:此为Program Store Enable的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。AT89S52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。PORT0(P0.0P0.7):端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8
16、个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0A7)及数据总线(D0D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0A7,再配合端口2所送出的A8A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。PORT2(P2.0P2.7):端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,
17、此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8A15,这个时候P2便不能当做I/O来使用了。PORT1(P1.0P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。PORT3(P3.0P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个
18、TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。其引脚分配如下:P3.0:RXD,串行通信输入。P3.1:TXD,串行通信输出。P3.2:INT0,外部中断0输入。P3.3:INT1,外部中断1输入。P3.4:T0,计时计数器0输入。P3.5:T1,计时计数器1输入。P3.6:WR:外部数据存储器的写入信号。P3.7:RD,外部数据存储器的读取信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在F
19、LASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低
20、电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.2滤波模块该部分由一片LM324N,若干合适的电容和电阻组成。系统框图如图2-3所示。其原理是:输入信号VI 通过R1, R3进行衰减,考虑到AVF1=1.586,同时尽量要使运放同相输入端和反向输入端对地的直流电阻基本相等,可选取R5=82 k,R4=(AVF
21、1-1)R5=48 k,由于没有买到48 k的电阻,故采用接近其阻值大小的47 k来代替,效果也不错。其中U1A部分是低通滤波器,根据公式,可以得到其上限截至频率为30KHz,U1B部分是高通滤波器,根据公式,可以得到其下限截至频率为19Hz,由于LM324N带宽增益积的限制,经过实际测量,其上限截至频率为20KHz,完全可以实现通带为20Hz20KHz的基本要求。仿真结果如图2-4, 图2-5所示。图2-3 带通滤波器图2-4 上限截至频率图2-5 下限截至频率2.3控制显示电路本系统采用AT89C51单片机最小控制系统,显示部分采用LCD1602液晶显示。本节重点介绍LCD1602的基本用
22、法。1、LCD1602液晶简介及系统的硬件原理图1602采用标准的16脚接口,各引脚功能图如表2-1所示。表2-1 1602液晶引脚功能图引脚号引脚名称功能说明1VSS地电源2VDD5V正电源3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度4RS寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器5RW读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据6E使能
23、端,当E端由高电平跳变成低电平时,液晶模块执行命令714D0D78位双向数据线1516空脚1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表3.3所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。表2-2 CGROM和CGRAM中字符代码与字符图形对应关系 高 位低 位000000100011010001010110011110101011110011011110111
24、10000CGRAM(1)0Pp一P0001(2)!1AQaqq0010(3)2BRbr川0011(4)#3CScs0100(5)$4DTdt0101(6)%5EUeu0110(7)&6FVfv0111(8)7GWgw1000(1)(8HXhx1001(2)9IYiy-11010(3)*:JZjzj千1011(4)+;Kkx万1100(5),Nn1111(8)/?O_o2、1602液晶模块内部的控制器共有11条控制指令,如表2-3所示。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标
25、和显示模式设置 1/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光R/L:1向右移动;0向左移动。指令6:功能设置命令 DL高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7
26、:字符发生器RAM地址设置指令8:DDRAM地址设置指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据表2-3 1602液晶模块的控制指令 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表2-4是DM-162的内部显示地址。表2-4 DM-162的内部显示地址123456789101112待添加的隐藏文字内容21314151600H01H02H03H04H05H06H07H0
27、8H09H0AH0BH0CH0DH0EH0FH40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FH比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。控制显示电路原理图如图2-6所示。 图2-6 单片机最小系统和液晶显示电路2.3波形放大模块该部分主要由一片DAC0832和一块LM324N运算放大器组成。DAC0832属于8位倒T型电
28、阻网络D/A转换器。其内部结构如图2-7所示。 通过单片机的P1口向DAC0832发送数字编码,控制D/A内部S1S7共8个模拟开关的断与合,以此来调节内部的阻值,可以有256种状态,并且可以实现步进调节。同时,模拟开关的电阻很小,这样可以减小放大倍数的误差。DAC0832是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以由运算放大器LM324N实现。系统电路连接如图2-8所示。图2-7 DAC0832内部结构图图2-8 DAC0832电路连接图2.4双极型转单极性通过单片机控制另一块DAC0832可以产生0到12V的直流偏置电压,然后通过减法运算电路可以将双极性信
29、号变成单极性。电路如下:图2-92.5D/A转换电路D/A转换电路采用DAC0832来实现,首先来介绍下DAC0832芯片。DAC0832是8位D/A转换集成芯片,该芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。DAC0832由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。DAC0832输出结果为电流量,单电源供电,其主要特性参数如下: 分辨率为8位; 电流稳定时间1s; 可单缓冲、双缓冲或直接数字输入; 只需在满量程下调整其线性度; 单一电源供电(+5V+15V); 低功耗,20mW。 DAC0832结构框图及引脚说明图2-10
30、DAC0832的结构框图和引脚(2)DAC0832工作过程 CPU执行输出指令,输出8位数据给DAC0832; 在CPU执行输出指令的同时,使ILE、/CS、/WR1三个控制信号端都有效,8位数据锁存在8位输入寄存器中; 当/WR2、/XFER两个控制信号端都有效时,8位数据再次被锁存到8位DAC寄存器,这时8位D/A转换器开始工作,8位数据转换为相对应的模拟电流,从Iout1和Iout2输出。(3)DAC0832的工作方式:双缓冲方式;单缓冲方式;直通方式(4)DAC0832接口电路图2-11第三章 单片机软件设计3.1软件功能主程序和子程序都存放在AT89S52单片机中。该程序的主要功能是
31、: 开机以后负责查键,即做键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理,利用程序控制D/A电阻网络中阻值的变化,并利用LM324N运算放大器来将其输出转换成电压形式,以此来输出放大或者衰减后的正弦波,同时在四位数码管中显示出所放大的倍数。3.2流程图 控制程序流程图如图3-1所示.图3-1 波形放大部分程序流程图3.3代码分析本系统程序代码如下。1. 函数声明及变量定义为方便程序的编写,把部分常用的变量进行伪定义,把实现一定功能的程序编写为一个函数,有利于程序的编写。#includereg51.h #includeintrins.hsbit dacs=P10;/端口定义 s
32、bit dawr=P11;/芯片sbit lcdrs=P15;/定义寄存器sbit lcdrw=P16;/定义是否读写sbit lcde=P17;/定义使能端sbit lcd_flag=P07;/定义是否忙标志void disp(void);/以下为函数声明void lcd_delay(unsigned int );void lcd_deal(unsigned char ,unsigned char ,unsigned char );void _1602(void);void lcd_init(void);void lcd_moveto(unsigned char ,unsigned char
33、 );void lcd_putchar(unsigned char ); unsigned char code shuzi=0,1,2,3,4,5,6,7,8,9;unsigned char code lcd_Assic12=/ASICII码0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x56,0x2e;unsigned char dis216=/液晶初始化数据0x20,0x20,0x20,0x20,/0x20输出是空即空格0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2
34、0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20;unsigned char val=0;/全局变量2主程序 本系统主程初始化并启动DAC0832芯片后,进入按键检测程序。当加一键按下时,val变量加一。显示屏第一行数字显示val的大小,第二行适时显示转化后的电压值。当加一键按下超过一秒钟后,val以500ms的速度增长,按键释放后停止。减一键类似。详细主程序见附录1。3显示子程序此程序为液晶显示子程序,首先将要显示的变量val的百位、十位、个位分离。然后储存到液晶显示缓存区,最后
35、经_1602()函数把缓存的数据送到显示屏上显示出来。/*显示函数程序*/void disp(void)P2=val;lcd_deal(0,0,val/100);/分离百位lcd_deal(0,1,val%100/10);/分离十位lcd_deal(0,2,val%10);/分离个位lcd_deal(1,2,(unsigned char)(float)val/256*5)%10);lcd_deal(1,3,11); /显示符号“.”lcd_deal(1,4,(unsigned char)(float)val/256*50)%10);lcd_deal(1,5,(unsigned int)(flo
36、at)val/256*500)%10);lcd_deal(1,6,10); /显示字符“V”_1602();/输出到16024延时程序此程序为液晶显示函数和主程序按键去抖延时提供毫秒级延时函数。/*延时函数程序*/void lcd_delay(unsigned int k) /延时函数unsigned int i0;unsigned char i,j;for(i0=0;i00;i-)for(j=97;j0;j-);5LCD1602液晶输出函数此函数主要完成将液晶显示输出缓冲区的数据输出到液晶显示屏上。/*液晶输出函数程序*/void _1602(void)unsigned char *p;lc
37、d_init(); /初始化lcd_delay(10);lcd_moveto(0,0);/指针定位到第一行第一列for(p=dis0;pdis0+16;p+)/依次输出到第一行lcd_putchar(*p);lcd_moveto(1,0);/指针定位到第二行第一列for(p=dis1;pdis1+16;p+)/依次输出到第二行 lcd_putchar(*p); 6数据转化函数 此函数的功能为,将要显示的数据经查表后得到的ASSICII码传送到液晶显示缓存区内,以备显示函数调用直接显示出正确的字符。/*ASSICII码转化函数程序*/void lcd_deal(unsigned char i,u
38、nsigned char j,unsigned char dat)disij=lcd_Assicdat;7检测LCD忙函数此函数主要功能为检测LCD1602液晶忙标志函数,当要向LCD1602内传输数据时,需要先进行忙标志检测。当返回函数为忙时,稍后写数据或者命令,如遇返回为不忙就可直接向LCD1602内写命令或者数据。/*检测忙标志函数程序*/bit lcd_busy() /判断是否忙碌 RSLow,RWHigh,EHigh:读状态 bit flag=0; lcdrs=0; /寄存器为Lowlcdrw=1; /是否读写为Highlcde=1; /使能端为Highif (lcd_flag=1) flag=1;else flag=0;lcde=0;return flag; /返回标志判断是否LCD忙碌