单片机系统开发与应用实习报告基于AT89S52单片机的数字电压表设计.doc
单片机系统开发与应用工程实习报告选题名称: 基于AT89S52的数字电压表的设计 系(院): 计算机工程学院专 业: 嵌入式系统设计班 级: 姓 名: 学 号: 指导教师: 学年学期: 2009 2010 学年 第 2 学期2010年 5 月 30 日摘要:在测量仪器中,电压表是必须的,而且电压表的好坏直接影响到测量精度。具有一个精度高、转换速度快、性能稳定的电压表才能符合测量的要求。而且数字电压表是采用数字化测量技术,把连续的模拟电压量转换成不连续、离散的数字化形式并加以显示的仪器。为此本项目介绍了一种基于AT89S52单片机的数字电压表的设计,目的是在使用尽量少的元器件的情况下,用单片机AT89S52和ADC0809高精度A/D转换芯片设计一个4位数码管显示的数字电压表,并能够测量05V之间的直流电压值,其测量最小分辨率为0.02V。本设计主要分为两部分:硬件电路及软件程序。而硬件电路又大体可分为A/D转换电路、LED显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用C语言编程,详细的设计算法将会在程序设计部分详细介绍。关键词:AT89S52;ADC0809;A/D转换;LED数码管显示目录1. 关于单片机AT89S52与ADC0809芯片11.1关于AT89S5211.2关于ADC080922 硬件电路32.1程序原理图32.2焊接顺序:42.3A/D转换电路42.4 LED显示电路53软件程序的设计63.1主程序流程图63.2A/D转换模块:83.3数码管显示模块104实验结果111. 关于单片机AT89S52与ADC0809芯片 1.1关于AT89S52At89s52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。图1-1 AT89S52线路引脚图(由于AT89S52的引脚较多,介绍起来比较繁琐,在此略过)1.2关于ADC0809A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。ADC0809是采样分辨率为8位的、以逐次逼近原理进行模数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。 图1-2 ADC0809引脚图引脚功能如下:ADC0809芯片有28条引脚,采用双列直插式封装,如图1323所示。下面说明各引脚功能。 IN0IN7:8路模拟量输入端。 2-12-8:8位数字量输出端。 ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路 ALE:地址锁存允许信号,输入,高电平有效。 START: AD转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 EOC: AD转换结束信号,输出,当AD转换结束时,此端输出一个高电平(转换期间一直为低电平)。 OE:数据输出允许信号,输入,高电平有效。当AD转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。 Vcc:电源,单一5V。 GND:地。2 硬件电路2.1程序原理图图2-1关于AT89S52的数字电压表原理图原理图说明:原理图主要由AT89S52芯片,ADC0809芯片,LED数码管组成。AT89S52芯片的RST与复位电路相连,XTAL1与XTAL2连接着晶振电路。P0口与ADC0809直接相连接受来自ADC0809传输而来的数据,P2口作为4位动态数码显示管的位显示控制,P1口则是动态数码显示管的段显示控制并连接着74LS07作为驱动,P3则是提供给ADC0809芯片的CLK信号并控制其开始。相对的 ADC0809芯片的IN0接了滑动电阻器以为实验产生不等的电压。ADD AC接地,并确保基准电压。2.2焊接顺序:a)把“单片机系统”区域中的P1.0P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。b)把“单片机系统”区域中的P2.0P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。c)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。d把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。e)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。f)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。g)把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。h)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。i)把“单片机系统”区域中的P0.0P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端2.3A/D转换电路A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。具体电路图如下:图2-2 实现A/D转换电路图ADC0809实现A/D转换的原理如下:其工作原理如下:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。2.4 LED显示电路设计中采用的是4段LED数码管来显示电压值。LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点,它由4个发光二极管组成,其中3个按8字型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。把4个发光二极管连在一起,公共端接高电平,叫共阳极接法,相反,公共端接低电平的叫共阴极接法,我们采用共阴极接法。当发光二极管导通时,相应的一段笔画或点就发亮,从而形成不同的发光字符。其8段分别命名为dp g f e d c b a。例如,要显示“0”,则dp g f e d c b a分别为:00111111B;若要显示多个数字,只要让若干个数码管的位码循环为高电平就可以了。图2-3 LED数码管显示电路图根据设计要求,显示电路需要至少4位LED数码管来显示电压值,我们再多加一位用来显示电压单位“V”,则有7位LED循环显示。利用单片机的I/O口驱动LED数码管的亮灭,设计中由P0口驱动LED的段码显示,即显示字符,由P2口选择LED位码,即选择点亮哪位LED来显示。3软件程序的设计3.1主程序流程图图3-1主程序流程图程序初始化:#include <AT89S52.H>unsigned char code dispbitcode=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00;unsigned char dispbuf8=10,10,10,10,0,0,0,0;unsigned char dispcount;unsigned char getdata;unsigned int temp;unsigned char i;sbit ST=P30;sbit OE=P31;sbit EOC=P32;sbit CLK=P33; void main(void) ST=0; OE=0; ET0=1;/允许定时器0 ET1=1;/允许定时器1 EA=1;/中断允许总控制位,中断总允许 TMOD=0x12; TH0=216; TL0=216; TH1=(65536-4000)/256; /定时时间计算公式: TL1=(65536-4000)%256;/一共4个8位定时器 TR1=1;/启动定时器1 TR0=1;/启动寄存器0程序的初始化工作有以下功能:生成数码管等代码表;表示部分引脚联通;设置部分变量的初值;定义定时器0,1;设置定时器方式选择寄存器 并确定寄存器0使用工作方式1,寄存器1使用工作方式2,具体设定了寄存器1,并启用0,1寄存器。3.2A/D转换模块:图3-2 A/D转换测量子程序流程图 ST=1; ST=0; /产生下跳沿 开始A/D转换 while(1) if(EOC=1)/EOC转换结束信号,EOC=1时转换结束 OE=1;/输出允许信号 OE=1时输出转化得到的数据 getdata=P0;/将转化所得数据传输到P0 OE=0;/OE=0时输出数据线呈高阻态 temp=getdata*235; temp=temp/128;/将模拟量转换为数码量 i=5; dispbuf0=10; dispbuf1=10; dispbuf2=10; dispbuf3=10; dispbuf4=10; dispbuf5=0; dispbuf6=0; dispbuf7=0;/寄存要输出的数据 while(temp/10) dispbufi=temp%10; temp=temp/10; i+; dispbufi=temp; /从寄存中提取数据ST=1; ST=0; /产生下跳沿 A/D转换程序由开始设定的ST的变化开始(产生下跳沿 使ADC0809的START开始运转)然后当转换结束(EOC=1)时,开始传输数据到P0(OE=1输出允许信号置1)至传输结束时OE置0,将获得的电压量转换成所对应的16进制数据并寄存,再通过取模的方式把各位数字逐个提取,最后结束。3.3数码管显示模块void t0(void) interrupt 1 using 0 CLK=CLK; /时钟信号取反 void t1(void) interrupt 3 using 0 /外部中断0TH1=(65536-4000)/256; TL1=(65536-4000)%256; /定时器初始化,定时4微秒循环P1=dispcodedispbufdispcount; P2=dispbitcodedispcount; /经查代码表得出数据if(dispcount=3) P1=P1 | 0x80; /在LED上显示出数字 dispcount+; if(dispcount=4) dispcount=0; LED数码管的现实首先由外部寄存器0中断使时钟信号取反,在有外部寄存器1中断使定时器初始化,通过之前ADC0809输出的16位数据经查询代码表得到相应的BCD码,最后显示即可。4实验结果经过protel的制作与实物的焊接和烧制程序后 我所得的结果还是不尽如人意:由于部分元器件的缺失,虽然电源灯和LED数码管能够使用,但很不稳定。经过万用表的测试也不能解决,导致最后实验没有达到预期效果。总结单片机是一门理论和技术发展十分迅速、应用非常广泛的前沿性学科, 它的理论性和实践性都很强。通过这次漫长的程序设计中,首先我们通过用RROTEL软件绘制电路图设计PCB板,再经过自己动手焊制电路板并实现实验结果的过程,加深了对课堂抽象概念的理解,巩固了课堂上所学的理论知识,并很好地理解与掌握单片机AT89S52和A/D转换芯片ADC0809的基本原理、使用方法。而对于这次课程设计的题目“数字电压表的设计”,在收集资料以及编程过程中,不光让我巩固所学的知识,加强理论和实际结合的能力,细致的了解了单片机的工作原理,还培养了我们的综合设计能力与实际工作能力。真可谓获益匪浅啊。虽然最后离我的实验结果还有少许偏差让我有点不甘心,但这次独立制作芯片的过程还是让我感触良多的。而且在这次课程设计的撰写过程中,我得到了许多人的帮助。本论文从立题到论文撰写整个过程都是在和悉心指导下完成的。老师们在传授我知识的同时,更注重培养我解决问题的思路和法及创新能力,为我今后学习和工作打下了坚实的基础并开阔了我的视野,渊博的知识、严谨的治学态度、忘我的工作精神以及对新知识不懈追求的精神,令我们佩服,使我们受益匪浅.我将最诚挚的谢意奉献给我的导师们。另外,我要感谢我的同班同学,他们给予我很多的关心和帮助,并在程序上给了我很多启示,而且他们中间不少人给我学习和生活上带来了很多的快乐。没有他们我的程序不可能做的如此顺利。参考文献1杨居易 杨晓琴 王益斌 单片机课程设计指导 清华大学出版社 2009-52李广弟 朱月秀 冷祖祁 单片机基础 北京航空航天大学出版社 2008-43张谨 张伟 张立宝PROTEL 99se入门与提高 人民邮电出版社2008-74李光飞,楼然苗,胡佳文,谢象佐.单片机课程设计实例指导.北京航空航天大学出版社.2004.95蔡朝洋.单片机控制实习与专题制作.北京:北京航空航天大学出版社,2006.11指导教师评语学号姓名班级选题名称基于AT89S52的数字电压表的设计序号评价内容权重(%)得分1考勤记录、学习态度、工作作风与表现。52自学情况:上网检索机时数、文献阅读情况(笔记)。103论文选题是否先进,是否具有前沿性或前瞻性。54成果验收:是否完成设计任务;能否运行、可操作性如何等。205报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。306文献引用是否合理、充分、真实。57答辩情况: 自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。25合计指导教师(签章): 年 月 日