《多路模拟量采集仪表的毕业设计.doc》由会员分享,可在线阅读,更多相关《多路模拟量采集仪表的毕业设计.doc(24页珍藏版)》请在三一办公上搜索。
1、多路模拟量采集仪表的毕业设计摘要近年来,数据采集及其应用受到了人们越来越广泛的关注,数据采集系统也有了迅速的发展,它可以广泛的应用于各种领域。数据采集系统起始于20世纪50年代,1956年美国首先研究了用在军事上的测试系统,目标是测试中不依靠相关的测试文件,由非成熟人员进行操作,并且测试任务是由测试设备高速自动控制完成的。由于该种数据采集测试系统具有高速性和一定的灵活性,可以满足众多传统方法不能完成的数据采集和测试任务,因而得到了初步的认可。大概在60年代后期,国内外就有成套的数据采集设备和系统多属于专用的系统。本文介绍了一种基于单片机的多路模拟量采集仪表的设计。该设计主要由三个模块组成:A/
2、D转换模块,数据处理模块及显示模块。A/D转换主要由芯片ADC0808来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由芯片AT89C51来完成,其负责把ADC0808传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0808芯片工作。本次设计的显示模块是1602液晶显示器所采集信号显示结果的。 关键词: 单片机;A/D转换;AT89C51;ADC0808,1602液晶目录第一章 设计总体方案11.1设计要求11.2设计思路11.3设计方案1第二章 硬件电路设计22.1 A/D转换模块22.1.1 逐次逼近型A/D转换
3、器原理22.1.2 ADC0808 主要特性32.1.3 ADC0808的外部引脚特征32.2 单片机系统52.2.1 AT89C51性能52.2.2 AT89C51各引脚功能62.3 复位电路和时钟电路82.3.1 复位电路设计82.3.2 时钟电路设计82.4 1602液晶显示电路92.4.1 1602LCD的基本参数及引脚功能92.4.2 LCD1602 主要技术参数:92.4.3引脚功能说明102.4.4 1602 液晶模块内部的控制指令102.4.5 LCD1602操作时序122.4.6 1602LCD的 RAM 地址映射122.5多路模拟量采集仪表硬件电路原理图13第三章 程序设计
4、153.1程序设计总方案15参考文献21致谢22第一章 设计总体方案1.1设计要求(1)CS-51系列单片机为核心器件,组成一个多路数据采集仪表。(2)采用8路模拟量输入,能够测量0-5V之间的直流电压值。(3)电压显示用1602液晶显示,能够显示一位小数。 1.2设计思路(1)根据设计要求,选择AT89C51单片机为核心控制器件。(2)A/D转换采用ADC0808实现,与单片机的接口为P1口和P3的高四位引脚。(3)电压显示采用1602液晶显示器(4)由一个按键控制液晶显示,两个电压值为一组,按一次键,就切换一次。 1.3设计方案硬件电路设计主要由6个部分组成; A/D转换电路,AT89C5
5、1单片机系统,1602显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示。第二章 硬件电路设计2.1 A/D转换模块现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0809、ADC0808等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到
6、单片机进行分析和显示。一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用。2.1.1 逐次逼近型A/D转换器原理逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位一次开始逐位试探比较。转换过程如下:开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟
7、量对应的二进制数字量。其原理框图如图2所示:2.1.2 ADC0808 主要特性ADC0808是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0808设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域。ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128s;转换精度:0.2%;单个+5V电源供电;模拟
8、输入电压范围0- +5V,无需外部零点和满度调整;低功耗,约15mW。2.1.3 ADC0808的外部引脚特征 ADC0808芯片有28条引脚,采用双列直插式封装,其引脚图如图3所示。图3 ADC0808引脚图下面说明各个引脚功能:IN0-IN7(8条):8路模拟量输入线,用于输入和控制被转换的模拟电压。地址输入控制(4条):ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。ADDA,ADDB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表1所示:表1 ADC0808通道选择表地址码
9、 对应的输入通道 C B A 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。EOC: EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。D1-D8:数字量输出端,D1为高位。OE:OE为输出允许端,高电平能使D1-D8引脚上输出转换后的数字量。REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。Vcc、G
10、ND: Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起.CLK:时钟输入端2.1.4 ADC0808的内部结构及工作流程ADC0808由8路模拟通道选择开关,地址锁存与译码器,比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路和三态输出锁存器等组成,其内部结构如图4所示。图4 ADC0808的内部结构其中:(1)8路模拟通道选择开关实现从8路输入模拟量中选择一路送给后面的比较器进行比较。(2)地址锁存与译码器用于当ALE信号有效时,锁存从ADDA、ADDB、ADDC 3根地址线上送来的3位地址,译码后产生通道选择信号,从8路模拟
11、通道中选择当前模拟通道。(3)比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路组成8位A/D转换器,当START信号有效时,就开始对当前通道的模拟信号进行转换,转换完成后,把转换得到的数字量送到8位三态锁存器,同时通过引脚送出转换结束信号。(4)三态输出锁存器保存当前模拟通道转换得到的数字量,当OE信号有效时,把转换的结果送出。ADC0808的工作流程为:(1)输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器从8路模拟通道中选通1路模拟量送给比较器。(2)送START一高脉冲,START的上升沿使逐次寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
12、(3)当转换结束时,转换的结果送入到输出三态锁存器中,并使EOC信号回到高电平,通知CPU已转换结束。(4)当CPU执行一读数据指令时,使OE为高电平,则从输出端D0-D7读出数据。2.2 单片机系统2.2.1 AT89C51性能AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一
13、种灵活性高且价廉的方案。 AT89C51功能性能:与MCS-51成品指令系统完全兼容;4KB可编程闪速存储器;寿命:1000次写/擦循环;数据保留时间:10年;全静态工作:0-24MHz;三级程序存储器锁定;128*8B内部RAM;32个可编程I/O口线;2个16位定时/计数器;5个中断源;可编程串行UART通道;片内震荡器和掉电模式。 2.2.2 AT89C51各引脚功能AT89C51提供以下标准功能:4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz
14、静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。AT89C51采用PDIP封装形式,引脚配置如图5所示。图5 AT89C51的引脚图AT89C51芯片的各引脚功能为:P0口:这组引脚共有8条,P0.0为最低位。这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可
15、以得到缓冲,增加了数据输入的可靠性;第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。P1口:这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同
16、选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。P3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表2所示:表2 P3口各位的第二功能P3口各位第二功能P3.0 RXT(串行口输入)P3.1 TXD(串行口输出)P3.2/INT0(外部中断0输入)P3.3/INT1(外部中断1输入)P3.4T0(定时器/计数器0的外部输入)P3.5T1(定时器/计数器1的外部输入)P3.6/WR(片外数据存储器写允许) P3.7/RD(片外数据存储器读允许)Vcc为+5V电源线,Vss接地。ALE:地址锁存允许线,配合P0口的第二功能使用,在
17、访问外部存储器时,89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。/EA:片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM,若/EA=1,则允许使用片内ROM, 若/EA=0,则只使用片外ROM。/PSEN:片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上
18、电复位和人工按键复位两种。XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。2.3 复位电路和时钟电路2.3.1 复位电路设计单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电
19、自动复位和手动复位两种,图6是51系列单片机统常用的上电复位和手动复位组合电路,只要Vcc上升时间不超过1ms,它们都能很好的工作。图6 复位电路2.3.2 时钟电路设计单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路。 本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个
20、晶振和 2个电容即可,如图7所示。图7 时钟电路电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是3010pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz 2.4 1602液晶显示电路 2.4.1 1602LCD的基本参数及引脚功能 1602LCD 分为带背光和不带背光两种,基控制器大部分为 HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图 2.4.
21、2 LCD1602 主要技术参数: 显示容量:162个字符 芯片工作电压:4.55.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.954.35(WH)mm 2.4.3引脚功能说明1602LCD 采用标准的 14 脚(无背光)或 16 脚(带背光)接口,各引脚接口说明如表 表1 引脚接口说明表 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择
22、指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 2.4.4 1602 液晶模块内部的控制指令如下图所示:1602 液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。(说明 1 为高电平,0 为低电平) 指令 1:清显示,指令码 01H,光标复位到地址
23、 00H 位置 指令 2:光标复位,光标返回到地址 00H 指令 3:光标和显示位置设置 I/D,光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。 指令 4:显示开关控制。 D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令 5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标 指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时为双行显示
24、,F:低电平时显示 5X7 的点阵字符,高电平时显示 5X10 的显示字符。 指令 7:字符发生器 RAM地址设置。 指令 8:DDRAM 地址设置。 指令 9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。 与 HD44780相兼容的芯片时序表如下:2.4.5 LCD1602操作时序下列为基本时序图:2.4.6 1602LCD的 RAM 地址映射液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图是 1602 的内部
25、显示地址。例如第二行第一个字符的地址是 40H,那么是否直接写入 40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。2.5多路模拟量采集仪表硬件电路原理图此电路的工作原理是:各路模拟电压信号通过电阻分压后进入电压跟随器由程序数字滤波,再由ADC08008的IN0-IN7通道进入(由于使用的各路通道由ADDA,ADDB,ADDC电平高低所控制,而ADDA,ADDB,ADDC又由按键所控制,所以显示哪两路的电压值,就通过
26、按键),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给AT89C51芯片的P1口,AT89C51负责把接收到的数字量经过数据处理,处理后再送给1602液晶显示器。此外,AT89C51还控制ADC0808的工作。其中,ADC0808的CLOCK是由外加的一个方波所控制,P2.1发正脉冲启动A/D转换,P2.2检测A/D转换是否完成,转换完成后,P2.3置高从P1口读取转换结果。多路模拟量采集仪表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要
27、有相应的软件配合,才能达到设计要求。第三章 程序设计3.1程序设计总方案根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图所示。3.2程序代码#include #define uchar unsigned char#define uint unsigned intuint ADdata;uint IN0,IN1,IN2,IN3;uint IN0_OUT,IN1_OUT,IN2_OUT,IN3_OUT;uint IN4,IN5,IN6,IN7;uint IN4_OUT,IN5_OUT,IN6_OUT,IN7_OUT;uint
28、Vref_fangda=1;uchar flag=0,Num=1;uchar code tab=0,1,2,3,4,5,6,7,8,9;uchar table=My Design; uchar table1=2012-5-20;#define N 60 /N值可根据实际情况调整sbit RS=P25;sbit RW=P26; sbit EN=P27;sbit ST=P21;sbit EOC=P22;sbit OE=P23;sbit K=P24;void delay(uint t) /延时函数 uchar i; while(t-) for(i=0;i124;i+);/函数名 void write
29、_com(uchar LCDzhiling) /函数功能:液晶屏写指令/编写人:豆伟晴/void write_com(uchar LCDzhiling) delay(5);RS=0;RW=0;P0=LCDzhiling;EN=1;delay(1);EN=0;/函数名 void write_dat(uchar LCDshuju) /函数功能:液晶屏写数据/编写人:豆伟晴/void write_dat(uchar LCDshuju) delay(3);RS=1;RW=0;P0=LCDshuju;EN=1;delay(1);EN=0;/函数名 void ini_LCD() /函数功能:液晶屏初始化/
30、编写人:豆伟晴/void ini_LCD() write_com(0x38); write_com(0x01); write_com(0x0f); write_com(0x06); write_com(0x0c);/函数名 uchar ADC0808()/函数功能:AD转换程序/编写人:豆伟晴/uchar ADC0808() ST=0;ST=1;ST=0; while(EOC=0); OE=1; ADdata=P1; OE=0; return ADdata;/函数名 uchar filter()/函数功能:数字滤波程序/编写人:豆伟晴/uchar filter() char value_buf
31、N;char count,i,j,temp;for (count=0;countN;count+)value_bufcount=ADC0808(); /获取采样值delay(5);for (j=0;jN-1;j+) /采样值由小到大排列,排序采用冒泡法for (i=0;ivalue_bufi+1) temp=value_bufi;value_bufi=value_bufi+1;value_bufi+1=temp; return value_bufN/2;/函数名 void main()/函数功能:/编写人:豆伟晴/void main() uint i=0; ini_LCD(); EA=1; /
32、全局中断开 EX1=1; /外部中断1开 IT1=1; /边沿触发 while(1) if(flag=1) if(K=0) /按键1操作 delay(10); if(K=0) Num=Num+1; / Vref_fangda=Vref_fangda*2;/if(Vref_fangda4) / Vref_fangda=1; if(Num%2)=0) /按键1操作 P3=4; IN4=filter(); IN4_OUT=(2.500*Vref_fangda*100*IN4)/255;/100倍 write_com(0x81); /第一行显示 write_dat(5); write_dat(:);
33、write_dat(tabIN4_OUT/100); write_dat(.); write_dat(tabIN4_OUT%100/10); write_dat(tabIN4_OUT%100%10); write_dat(V); P3=5; IN5=filter(); IN5_OUT=(2.500*Vref_fangda*100*IN5)/255;/100倍 write_com(0xc1); /第二行显示 write_dat(6); write_dat(:); write_dat(tabIN5_OUT/100); write_dat(.); write_dat(tabIN5_OUT%100/1
34、0); write_dat(tabIN5_OUT%100%10); write_dat(V); P3=6; IN6=filter(); IN6_OUT=(2.500*Vref_fangda*100*IN6)/255;/100倍 write_com(0x88); /第三行显示 write_dat(7); write_dat(:); write_dat(tabIN6_OUT/100); write_dat(.); write_dat(tabIN6_OUT%100/10); write_dat(tabIN6_OUT%100%10); write_dat(V); P3=7; IN7=filter();
35、 IN7_OUT=(2.500*Vref_fangda*100*IN7)/255;/100倍 write_com(0xc8); /第四行显示 write_dat(8); write_dat(:); write_dat(tabIN7_OUT/100); write_dat(.); write_dat(tabIN7_OUT%100/10); write_dat(tabIN7_OUT%100%10); write_dat(V); else P3=0; IN0=filter(); IN0_OUT=(2.500*Vref_fangda*100*IN0)/255;/100倍 write_com(0x81)
36、; /第一行显示 write_dat(1); write_dat(:); write_dat(tabIN0_OUT/100); write_dat(.); write_dat(tabIN0_OUT%100/10); write_dat(tabIN0_OUT%100%10); write_dat(V); P3=1; IN1=filter(); IN1_OUT=(2.50*Vref_fangda*100*IN1)/255;/100倍 write_com(0xc1); /第二行显示 write_dat(2); write_dat(:); write_dat(tabIN1_OUT/100); writ
37、e_dat(.); write_dat(tabIN1_OUT%100/10); write_dat(tabIN1_OUT%100%10); write_dat(V); P3=2; IN2=filter(); IN2_OUT=(2.500*Vref_fangda*100*IN2)/255;/100倍 write_com(0x88); /第三行显示 write_dat(3); write_dat(:); write_dat(tabIN2_OUT/100); write_dat(.); write_dat(tabIN2_OUT%100/10); write_dat(tabIN2_OUT%100%10
38、); write_dat(V); P3=3; IN3=filter(); IN3_OUT=(2.500*Vref_fangda*100*IN3)/255;/100倍 write_com(0xc8); /第四行显示 write_dat(4); write_dat(:); write_dat(tabIN3_OUT/100); write_dat(.); write_dat(tabIN3_OUT%100/10); write_dat(tabIN3_OUT%100%10); write_dat(V); else write_com(0x83); for(i=0;i11;i+) write_dat(ta
39、blei); delay(20); write_com(0xC3); for(i=0;i11;i+) write_dat(table1i); delay(20); /*- 外部中断程序-*/void ISR_Key(void) interrupt 2 using 1 flag=1; 参考文献1 胡健.单片机原理及接口技术.北京:机械工业出版社,2004年10月2 王毓银.数字电路逻辑设计.高等教育出版社,2005年12月3 于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月4 谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006年3月5 李广弟.