1、简易数字电压表课程设计电子信息工程单片机课程设计研究报告简易数字电压表的设计信息技术学院课 程 设 计 任 务 书 信息技术学 院 电子信息工程 专业 2014 级,学号姓名 一、课程设计课题: 简易数字电压表的设计 二、课程设计工作日自 2016 年 12 月 12 日至 2016 年 12 月 25 日三、课程设计进行地点: 图书馆 四、 程设计任务要求: (详细内容见课程设计文档)1.课题来源:老师下发 2.目的意义:单片机及电子技术发展迅速,实践性很强,所以多动手实践,增强 个人能力,为以后更好的发展打下基础。 3.基本要求: 1、采用单片机80C52实现电压检测与显示。2、要求电压显
2、示范围05V之间。3、在LED中显示电压值。 4、根据精度自选A/D转换芯片。 5、直流稳压电源自行设计。 6、辅助电路及元器件自选。 课程设计评审表指导教师评语:成绩: 签字: 日期: 目录 1 设计任务要求.42 方案比较.53 单元电路设计.5 4 元件选择.9 5 整体电路.106 电路工作流程.117 总结与体会.118 致谢.129 参考文献.1210 程序附录.12 1 设计任务与要求(1)题目:简易数字电压表的设计(2)要求: 1) 采用单片机80C52实现电压检测与显示。2) 要求电压显示范围05V之间。3) 在LED中显示电压值。 4) 根据精度自选A/D转换芯片。5) 直
3、流稳压电源自行设计。 6)辅助电路及元器件自选。 (3)规定: 1)设计硬件线路,用Altium Desiger9以上版本画图。2)按单元电路详细说明硬件线路设计思路,元件参数,选取根据。 3)有完整的程序流程图,包括总流程图和各模块流程图。对程序设计思想做详细说明;4)有完整的程序清单,并加注释;5)设计总结和设计体会。 (4)参考资料: 1)新编MCS-5单片机应用设计.张毅刚编著哈尔滨:哈尔滨工业大学出版社,2008.32)PROTEL DXP电路设计与实例精解,黎文模,段晓峰编著北京人民邮电出版社20063)何立民.单片机应用技术大全.北京:北京航空航天大学出版社, 19944)电子技
4、术基础 模拟部分康华光主编北京高等教育出版社2006.15)电子技术基础 数字部分 康华光主编 北京 高等教育出版社 2006.1(5)完成时间:2周。2 方案比较方案一:通过一个A/D(TLC2453模拟数字转换)芯片采集后将外测电压信号转换为数字信号,再由单片机(STC89C52)处理信号,输出信号,由数码管显示采集到的电压值。方案二:通过一个A/D(ADC0832模拟数字转换)芯片采集后将外测电压信号转换为数字信号,再由单片机(STC89C52)处理信号,输出信号,由数码管显示采集到的电压值。TLC2453是12位精度的AD转换芯片,精度比ADC0832高,但是引脚较多,且本为5V电压表
5、设计,8位精度已能满足需要,又考虑到电路的复杂程度,所以选择方案二。3单元电路设计3.1 单片机模块单片机采用了STC89C52芯片。STC89C52 是一种带 8K 字节闪烁可编程可檫除只读存储器 (FPEROM-Flash Programable And Erasable Read Only Memory)的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL 度非易失存储器制造技术制造,与工业标准的MCS-51 指令集和输出管脚相兼容。图1 单片机最小系统3.2 电压检测及AD转换模块电压检测及AD转换采用了ADC0832芯片。ADC0832 是美国国家半导体公司生产的
6、一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。 5V电源供电时输入电压在05V之间;工作频率为250KHZ,转换时间为32S; 一般功耗仅为15mW; 8P、14P-DIP、PICC多种封装。图2 ADC0832引脚图 正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可
7、任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示起始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。图3 ADC0832接线 当此2 位数据为1、0时,只对CH0 进行单通道转换。当2位数据为1、1时,只对CH1进行单通道转换。当2 位数据为0、0时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为0、1时,将CH0作为负输入端IN-
8、,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。 作为单通道模拟信号输入时ADC0832的输入电压是05V
9、且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。3.3 显示模块采集到的电压采用四位数码管来显示。数码管采用的四位共阳极数码管,因为STC89C52芯片引脚的电流驱动能力有限,所以采用在单片机引脚与数码管共阳端连接8550三极管的方式驱动。图4 数码管显示电路 4元件选择元件数量STC89C521ADC08321四位数码管18550三极管412M晶振130pF瓷片电容210uF电解电容1按键110
10、K欧电阻11K欧电阻45整体电路图5 整体电路 6电路工作流程7 总结与体会 说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目。其次,对题目要求要一丝不苟的去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。硬件的设计要我们自己动手去做,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。 在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得体会就是作为一
11、名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。8 致谢 感谢老师的辅导以及
12、同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。 9 参考文献:1 康光华,电子技术基础数字部分(第5版),高等教育出版社,北京,2010年2 康光华,电子技术基础模拟部分(第5版),高等教育出版社,北京,2008年3 张毅刚,新编MCS-5单片机应用设计,哈尔滨工业大学出版社,哈尔滨,2008年4 黎文模,段晓峰,PROTEL DXP电路设计与实例精解,人民邮电出版社,北京,2002年5 侯伯亨,现代数字系统设计,西安电子科技大学出版社,西安,2004年6 何立民,单片机应用技术大全,
13、北京航空航天大学出版社,北京,1994年7 黄正瑾,在系统编程技术及应用,东南大学出版社,南京,1998年8 李世雄,丁康源,数字集成电子技术教程,高等教育出版社,北京,1993年10 程序附录#include#include#define duan P1#define wei P0#define uint unsigned int #define uchar unsigned char sbit ADCS =P20; sbit ADDI =P21; sbit ADDO =P21; sbit ADCLK =P22; unsigned char code b16=0xC0,0xF9,0xA4,0
14、xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff; /共阳unsigned char channel; unsigned char dat=0x00; /AD值unsigned char count=0x00;unsigned char dispbuf3;uint temp; void delay(unsigned char a) int i; while(a-) for(i=0;i1)&0x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK 端,形成下降沿3 ADDI=1;/控制命令结束 _nop_(); _nop_(); dat=0; for
15、(i=0;i8;i+) dat|=ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); dat=1; if(i=7)dat|=ADDO; for(i=0;i8;i+) j=0; j=j|ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i=1; ADCS=1;/拉低CS端 ADCLK=0;/拉低CLK端 ADDO=1;/拉高数据端,回到初始状态 dat=8; dat
16、|=ndat; return(dat); /return ad kvoid display(void) wei=0xfd; duan=bdispbuf2; delay(5); wei=0xfb; duan=bdispbuf1; delay(5); wei=0x07; duan=bdispbuf0; delay(5);void main() duan=0xff; channel=0x00; /channel=0 TMOD=0x01; TH0=0x00; TL0=0x00; IE=0x82; TR0=01; while(1) dat=Adc0832(channel); temp=dat*1.0/255*500; /电压值转换,5V 做为参考电压,分成256 dispbuf0=temp%10;/个位 dispbuf1=temp/10%10; /十位 dispbuf2=temp/100%10; /百位 display(); void timer0(void) interrupt 1 TMOD=0x01; TH0=0x00; TL0=0x00; IE=0x82; TR0=01; count+; if(count=0x0A) count=0x00; dat= Adc0832(channel);