东北大学秦皇岛分校单片机课程设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

东北大学秦皇岛分校计算机与通信工程学院单片机综合课程设计数字电压表设计专业名称物工程班级学号学生姓名指导教师设计时间2014.1.4~2014.1.11课程设计任务书专业:物联网工程学号:2125101学生姓名(签名):设计题目:数字电压表设计一、设计实验条件816实验室二、设计任务及要求实验任务:采用51系列单片机和ADC0808设计一个数字电压表,输入为0~5V线性模拟信号,输出通过LED显示,要求显示两位小数。实验要求:1.采用中断方式,对2路0~5V的模拟电压进行循环采集;2.采集的数据送LED显示,并存入内存;3.超过界限时指示灯闪烁。三、设计报告1.前言数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。电压表的数字化测量,关键在于如何把随时连续变化的模拟量转化成数字量,完成这种转换的电路叫模数转换器(A/D)。数字电压表的核心部件就是A/D转换器,由于各种不同的A/D转换原理构成了各种不同类型的DVM。一般说来,A/D转换的方式可分为两类:积分式和逐次逼近式。本设计以8051单片机为核心,以逐次比较型A/D转换器ADC0808、数码管显示为主体,构造了一款简易的数字电压表,能够测量2路0~5V直流电压。2.基本功能描述本次设计的数字电压表可以实现以下功能:(1)0-5V直流电压的获取。(2)采用AD转换器ADC0808实现单通道直流电压检测。(3)用7段数码管显示所测电压值(4)实现2路直流电压检测,在数码管循环显示各路电压值。(5)设定电压报警值,当超过这一数值时,会出现二极管闪烁。3.设计主体3.1设计步骤(1)明确数字电压表的原理。数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。(2)模拟输入&A/D转换电路设计本设计采用ADC0808芯片进行数模转换,ADC0808是具有8通道、8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。A/D转换工作原理:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。图3-1-1A/D转换电路本设计通过可变电阻一端接电源+5v,一端接地GND,通过改变电阻的阻值,从而改变所测电压值,实现电压的模拟信号输入。通过输入电路将2路输入电压送入ADC0808。并通过单片机P3口控制实现模数转换,并将转换后的数字信号送入单片机的P1口。(3)单片机主控电路设计图3-1-2单片机主控电路本电路用P3口来控制ADC芯片的工作和输入电压通道的选取。将数模转换后的数据通过P1端口送入单片机,再由P0、P2端口控制将其数值显示在数码管上。(4)显示电路图3-1-3显示电路通过P0口控制6位7段共阴极数码管段选,通过P2口的低6位控制位选。P0接上拉电阻,否则P0会处于高阻态。3.2硬件设计本设计数字电压表的工作系统框图。图3-2-1系统框图图3-2-2整体电路图数码管显示单片机处理模数转换电压采集3.3软件设计图3-3程序流程图程序设计如下:#includereg51.h#defineuintunsignedint#defineucharunsignedcharucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};sbitST=P3^0;//AD转换启动输入端sbitOE=P3^1;//输出允许控制端sbitIN=P3^7;//通道选择端口sbitLED=P3^6;//报警灯控制位sbitLLED=P3^5;//循环指示灯控制位sbitDOT=P0^7;//小数点控制位uintcount;uintData;uintdataAD_Data[2];//设置的内存ucharflag;voidDelayMS(uintms){uchari;while(ms--){for(i=0;i120;i++);}}开始初始化启动A/D转换数据处理存储是否过限报警灯亮选择通道(电路1、电路2以及自动循环显示)LED显示YESNOvoidDisplay(uintn)//显示{if(IN==0){P2=0xfe;P0=0x73;DelayMS(5);P2=0xfd;P0=0x3f;DelayMS(5);}else{P2=0xfe;P0=0x73;DelayMS(5);P2=0xfd;P0=0x06;DelayMS(5);}n=n*1.0/254*500;P2=0xDF;P0=table[n%10];//百位DelayMS(5);P2=0xEF;P0=table[n/10%10];//十位DelayMS(5);P2=0xf7;P0=table[n/100%10];//个位DOT=1;//小数点DelayMS(5);}voidmain(){EA=1;EX0=1;IT0=1;EX1=1;IT1=1;//打开中断IN=0;ET0=1;flag=0;while(1){ST=0;ST=1;//启动AD转换ST=0;while(1);}}voidINT()interrupt2{EX1=0;OE=1;Data=P1;OE=0;Display(Data);//显示if(IN==0){//若选择通道IN0if(Data0x96){//电压超过3VLED=0;DelayMS(10);LED=1;}else{LED=1;AD_Data[0]=Data;//存储0路AD数值}}else{//若选择通道IN1if(Data0xE1){//超过4.5VLED=0;DelayMS(10);LED=1;}else{LED=1;AD_Data[1]=Data;}}ST=0;ST=1;//启动下一次AD转换ST=0;EX1=1;}voidINT_0()interrupt0{EX0=0;TR0=0;flag++;flag=flag%3;if(flag==0){LLED=1;IN=0;}if(flag==1){LLED=1;IN=1;}if(flag==2){LLED=0;IN=0;TR0=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;}EX0=1;}voidTime_0()interrupt1{if(flag==2){TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(count=100){IN=!IN;count=0;}count++;}}4.总结体会本次课设是很好的一次实践机会,通过平常的课堂教学能够发现单片机非常注重实际的操作,在课程设计的实际操作中,能够发现理想与现实的差距,比如在P0口接上拉电阻这一块,虽然书本里面多次强调,但是实际操作的时候还是有可能忘记,因此通过本次课程设计,我更深地了解了单片机的基本原理、功能以及构造,根据课本上所说的ADC0808/ADC0809的基本工作原理,付诸于实践,充分利用KeilC51和Protuse这两个软件,尤其是proteus连接电路的时候,需要注意每一个接口的含义;同时,当调试出现错误的时候,知道哪里出错,改正哪里。另外,对于程序的理解也更加透彻,单片机的编程需要考虑硬件和软件的结合,这与平时所学到的单纯的编程有很大不同,需要在文件开头定义位变量,这一点总是忘记。另外,对于中断的理解也比以前深刻了一些,这对于以后的学习也是很有帮助的。同时,在这次单片机课程设计中,团队的分工合作也非常重要,大家各自搞好自己的一部分然后对接起来,达到事半功倍的效果。5.参考资料[1]陈海宴.51单片机原理及应用[M].第2版.北京:北京航空航天大学出版社,2014.[2]基于Proteus单片机程序设计实验.东北大学秦皇岛分校:控制工程学院单片机实验室.四、设计时间与安排1、设计时间:1周2、设计时间安排:熟悉实验设备、收集资料:2天设计图纸、实验、计算、程序编写调试:3天编写课程设计报告:1天答辩:1天

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功