1、当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)P2口:P2口是一个具有内
2、部上拉电阻的8位双向I/O 口,P2 输出缓冲器能驱动4个TTL逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O 口,对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。P3口亦作为AT8
3、9C51特殊功能(第二功能)使用,如表1所示。表1 AT89C51引脚号第二功能P3.0 RXD(串行输入)P3.1 TXD(串行输出)P3.2 INT0(外部中断0)P3.3 P3.4 T0(定时器0外部输入)P3.5 T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)RST:复位输入,晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出69个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(AL
4、E)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。1.2 ADC0804简介1.2.1 ADC0804简介A/D 转换就是将模拟信号
5、输换成数字信号。A/D 转换器就是用来实现这一功能的器件。信号输入端常常是传感器或相应电路的模拟输出,由ADC器件转换成数字信号再提供给微处理器,以便用作显示等后期信号处理。ADC0804是属于连续渐进式(Successive Approximation Method)的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。本次使用8 位 COMS依次逼近型的 ADC0804转换器.。三态锁定输出;存取时间:135US;分辨率:8 位;转换时间:100US;总误差:正负 1LSB;工作温度:ADC0804LCN-07
6、0 度。1.2.2 引脚图及定义引脚图如图2所示。图2 ADC0804引脚图/CS:芯片选择信号。/RD:外部读取转换结果的控制输出信号。为高时,DB0DB7 处理高阻抗;/RD 为低时,数字数据才会输出。/WR:用来启动转换的控制输入,相当于ADC 的转换开始(/CS=0 时);当/WR由高变为低时,转换器被清除;当/WR 回到高时,转换正式开始。/CLKR:时钟输入或接振荡无件(R,C)频率约限制在100KHZ1460KHZ,如果使用RC电路则其振荡频率为1/(1.1RC)。/INTR:中断请求信号输出,低地平动作。VIN(+)、VIN(-) :差动模拟电压输入。输入单端正电压时, VIN
7、(-)接地;而差动输入时,直接加入VIN(+)、VIN(-)。AGND、DGND:模拟信号以及数字信号的接地。VREF:辅助参考电压。DB0DB7:8位的数字输出。 电源供应以及作为电路的参考电压.2 系统设计2.1 设计方案选用AT89C51型单片机作为主控制器件,用电位器模拟温度传感器,把转换的温度值的模拟量送入ADC0804的其中一个通道进行A/D转换,将转换的结果进行温度值变换之后送入数码管显示。2.2 总体设计框图温度计电路设计总体设计方框图如图3所示。图3 电路设计总体设计方框图3 系统硬件软件设计3.1 硬件设计3.1.1 主板电路主板电路原理图如图4所示。电路图中包括AT89C
8、51单片机、时钟电路和复位电路、液晶显示模块、ADC0804转换器、电位器和电压表。图4中的电位器可以调节输入电压的大小,并联接在电位器上的电压表可实时显示当前电压。电位器有最大值和最小值,转换为温度显示时,限定为温度的最大值和最小值。液晶显示屏与AT89C51单片机连接,单片机输出的数据会实时显示在该屏幕上,能直观的读出当前温度值。ADC0804转换器将电位器输出的模拟信号转换为单片机可以接收的数字信号,然后通过与单片机的接口将数字信号输入到单片机中。图4 主板电路原理图3.1.2 温度监测模块电位器和ADC0804转换器代替温度传感器DS18B20作为温度监测元件模块,该模块及ADC080
9、4转换器与单片机的连接方式如图5所示。图5 测温模块及连接3.2 软件设计3.2.1 程序设计流程图程序设计流程图如图6所示。图6 程序设计流程图3.2.2 程序设计根据大体程序设计思路,将程序设计具体如下:#include Unsigned char code seg7 code10= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /显示段码 sbit int0=P32; /定义管脚功能 sbit wr=P36; /写端口sbit rd=P37; /读端口void Delay(unsigned int tc) /显示延时程序 while
10、( tc != 0 ) unsigned int i; for(i=0; i100; i+); tc-; unsigned char adc0804( void ) /读AD0804子程序 unsigned char addata,i; rd=1; wr=1; int0=1; /读ADC0804 前准备 P0=0xff; /P1全部置一准备 wr=0; /启动ADC0804开始测电压 while(int0=1); /查询等待A/D转换完毕产生的INT(低电平有效)信号 rd=0; /开始读转换后数据 i=i; i=i; /无意义语句,用于延时等待ADC0804 读数完毕 addata=P0;
11、/读出的数据赋与addate /读数完毕 return(addata); /返回最后读出的数据 unsigned int datpro(void) /ADC0804 读出的数据处理 unsigned char x; unsigned int dianyax; /用于存储读出数据 unsigned int dianya=0; /存储最后处理完的结果 注意数据类型 for(x=0;x10;x+) /将 10次测得的结果存储在dianya中 dianya=adc0804()+dianya; dianya=dianya/10; /求平均值 dianya=dianya*3.922; return(dia
12、nya); /返回最后处理结果 void Led() unsigned int date; date=datpro(); /调用数据处理最后结果 P1=P1&0x7f; P2=seg7codedate/1000; /输出百位 Delay(8); P1=P1|0xf0;0xbf; P2=seg7codedate%1000/100 ; /输出十位 Delay(8);0xdf; P2=seg7codedate%100/10|0x80 ; /输出个位及小数点 0xef; P2=seg7codedate%10; /输出小数点后第一位 void main() while(1) Led( ); /只需调用显
13、示函数 4 Proteus仿真4.1 Proteus仿真操作将编写好的程序在keil软件中进行编译,然后生成“.hex”文件。打开制作完成的电路原理图,双击单片机,将“.hex”文件加载到单片机中,然后即可进行仿真。4.2 Proteus仿真对加载程序后的电路进行仿真操作,仿真后可看到电路图显示相应的温度数值,可通过改变电位器的大小值,显示不同的温度数值。具体仿真显示图如图7所示。图7 电路仿真显示图5 测量数据分析仿真后得出各电压值所对应温度的测量值,采样其中十组数据与真实值进行分析比对,计算出所设计的数字温度计的精度。数据分析表如表2所示。表2 数据分析表电压值/V0.000.501.00
14、1.502.002.503.003.504.004.505.00真实值/0.010.020.030.040.050.060.070.080.090.0100.0测量值/9.829.849.969.889.8由数据表中数据,得 最大绝对误差为:0.2 引用误差为:0.2100*100%=0.2%该数字温度计的精度为:0.2经计算可知,所设计的数字温度计符合设计要求。参考文献:1 丁向荣,谢俊,王彩申.单片机C语言编程与实践M.北京:电子工业出版社,2009.2 阎石.数字电子技术基础M.北京:高等教育出版社,2006.5.3 龚尚福,贾澎涛,靳玉萍.C/C+语言程序设计M.徐州:中国矿业大学出版社,2006.4 皮大能,南光群,刘金华.单片机课程设计指导书M.北京:北京理工大学出版社,2010.7.5 陈涛.单片机应用及C51程序设计M.北京:机械工业出版社,2010.9.6 楼然苗,李光飞.单片机课程设计指导M.北京:北京航空航天大学出版社,2012.1.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1