简易数字电压表的设计.docx
- 文档编号:28828132
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:14
- 大小:391.76KB
简易数字电压表的设计.docx
《简易数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《简易数字电压表的设计.docx(14页珍藏版)》请在冰豆网上搜索。
简易数字电压表的设计
单片机原理及应用
课程设计报告书
题目:
简易数字电压表的设计
姓名:
学号:
专业:
电气工程及其自动化
指导老师:
邓方雄
设计时间:
2011年5月
电子与信息工程学院
简易数字电压表的设计
1.引言
1.1.设计意义
本课题的设计是基于AT89C52单片机为控制系统,ADC0809为转换的简易数字电压表。
其意义主要有两个方面:
其一,主要是检验我们对单片机原理及应用这门课的掌握程度包括硬件的组装与软件调试;其二,了解单片机的应用。
1.2.系统功能要求
简易数字电压表可以测量0-5V的8路输入电压值,并在4位LED数码管上轮流显示或单路选择显示。
测量误差约为0.02V。
2.方案设计
按系统功能实现要求,决定控制系统采用AT89C52单片机,A/D转换采用ADC0809.系统除能实现要求的功能外,还能方便的进行8路其他A/D转换量的测量,远程测量结果传送等拓展功能。
数字电压表系统设计方案框图如图2.1所示:
图2.1数字电压表系统设计方案框图
3.硬件设计
简易数字电压测量由A/D转换、数据处理及显示控制等组成,电路原理图如图3.1所示,A/D转换有集成电路ADC0809完成。
ADC0809据有8路模拟输入端口,地址线(第23-25脚)可决定对哪一路模拟输入作A/D转换。
第22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存,第6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D转换。
第7脚为A/D转换结束标志,当A/D转换结束时,第7脚输出高电平,第9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从端口输出。
单片机的P1、P3.0~P3.3端口作为四位LED数码管显示控制。
其中P1端口控制段码,P3.0~P3.3端口控制位选。
P3.5端口用作单路显示/循环转换按钮,P3.6端口用作单路显示时选择显示的通道。
P0端口作A/D转换数据读入,P2端口用作ADC0809的A/D转换控制。
图3.1数字电压表电路原理图
AT89C52芯片引脚图如图3.2所示
图3.2AT89C52芯片引脚图
4.软件设计
系统上电后,先进行程序初始化。
在刚上电时,系统默认为循环显示8个通道的电压值状态,当进行一次测量后,将显示每一通道的A/D转换值,每个通道的数据显示时间为1s左右。
主程序在调用显示子程序与测量子程序之间循环。
主程序流程图如4.1所示。
显示子程序采用动态扫描法实现4位数码管的数值显示。
测量所得的A/D转换数据放在数组中,测量数据在显示时须经过转换成为十进制BCD码放在对应的数组中。
A/D转换测量子程序用来控制对ADC0809的8路模拟输入电压的A/D转换,并将对应的数值放在数组中。
A/D转换测量子程序流程图如图4.2所示。
图4.1主程序流程图
图4.2A/D转换测量子程序流程图
5.系统调试
线路连接完成后,首先检查是否有线松动的情况,然后要将连接实验板的正负极的铜线切断,以免造成短路。
调试中分块检查错误,首先要检查数码管是否完好。
判断选通位以及段码是否线接好。
若数码管检查完毕,无故障。
则看数码管与单片机是否接通,通电,数码管是否显示。
若不显示,则检查线路有无虚焊。
直至无误。
最后判断ADC0809是否起作用,依据就是数码管是否循环显示。
若不显示,仍然是检查线路有无虚焊。
硬件部分完毕,则进行软件调试。
采用KielC51编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作,烧录好程序后进行软硬件联调,最后进行端口电压的对比测试。
测试对比表如下表5-1所示。
表5-1简易数字电压表与“标准”数字电压表对比测试表
标准电压值/V
0.00
0.25
0.68
1.00
1.50
1.80
2.30
3.40
4.60
简易电压表测得值/V
0.00
0.26
0.69
1.02
1.51
1.81
2.32
3.41
4.61
绝对误差/V
0.00
+0.01
+0.01
+0.02
+0.01
+0.01
+0.02
+0.01
+0.01
6.设计总结
通过本次课程设计,对单片机的接口技术连接有了一定的掌握,以前是用的单片机学习开发板,是现成的模块。
这次得亲自设计板块的布局及其布线。
布局过程中,各芯片的排列顺序尤其重要,应尽量的减少连线,充分利用底板的优势。
布线方面,本次做的较差,是焊一根线,再布一根线,在这点上得引起重视。
对以后的设计中,先规划好布线,然后再开始焊线。
实验中用到模/数转换芯片ADC0809,开始对其只有了一个初步的认识。
通过本次的应用,掌握了其原理及其应用。
这是我第一次在底板反面焊线,反面焊线与正面焊线的一个弊端之处,在于,焊线很容易脱焊。
尤其是当焊完后过一段时间,再调试时,就很有可能会不成功,得重新检查焊线的情况。
然后还有一点值得注意的是,焊线最后首先通过原理图画其反面的实物连接图,然后再开始焊接,不然很容易出错。
在这点上我就出了错误,数码管和ADC部分就焊接了两遍。
通过本次课程设计的教训,相信会对以后的设计起一定的作用。
7.附录A;源程序
#include
#include
#definead_conP2//AD控制口
#defineaddataP0//AD数据计入读入口
#defineDisdataP1//显示数据段码输出口
#defineucharunsignedchar//无符号字符(8位)
#defineuintunsignedint//无符号整数(16位)
sbitALE=P2^3;//锁存地址控制位
sbitSTART=P2^4;//启动一次转换位
sbitOE=P2^5;//0809输出数据控制位
sbitEOC=P3^7;//转换结束标志位
sbitDISX=Disdata^7;//LED小数点
sbitCLK=P3^4;
sbitda_xun=P3^5;
sbittongdao=P3^6;
ucharz,q;
ucharcodedis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/*共阳七段LED段码表"0""1""2""3""4""5""6""7""8""9""不亮"*/
ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//四位列扫描控制字
uchardataad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//定义8个数据内存单元
uintdatadis[5]={0x00,0x00,0x00,0x00,0x00};//定义4个显示数据单元、1个数据暂存单元
/********1毫秒延时子函数**********/
voiddelay1ms(uintt)
{
uinti,j;
for(i=0;i for(j=0;j<120;j++); } voidt0(void)interrupt1using3 { CLK=~CLK; } test() { ucharm; uchars=0x00; TR0=1; ad_con=s; for(m=0;m<8;m++) {ALE=0; _nop_(); _nop_(); ALE=1;//转换通道地址锁存 START=1; _nop_();_nop_();_nop_();_nop_(); START=0;//开始转换命令 _nop_(); _nop_(); _nop_(); _nop_();//延时4微秒 while(EOC==0);//等待转换结束 OE=1; ad_data[m]=addata; OE=0;s++; ad_con=s;//取AD值,地址加1 } ad_con=0x00; TR0=0; } scan(uchari) {uchark,n,m; inth; m=i; dis[3]=0x00;//通道初值为0 If(m==0) { for(n=0;n<8;n++)//每次显示8个数据 {dis[2]=ad_data[n]/51;//测得值转换为三位BCD码,最大为5.00V dis[4]=ad_data[n]%51;//余数暂存 dis[4]=dis[4]*10;//计算小数第一位 dis[1]=dis[4]/51;// dis[4]=dis[4]%51;// dis[4]=dis[4]*10;//计算小数第二位 dis[0]=dis[4]/51;// for(h=0;h<500;h++)//每个通道值显示时间控制(约1秒) {for(k=0;k<4;k++)//四位LED扫描控制 {Disdata=dis_7[dis[k]]; if(k==2) {DISX=0;} P3=scan_con[k]; delay1ms (1); P3=0xff; } } dis[3]++;//通道值加1 }; if(n==8) { n=0;k=0; } } if(m==1) { dis[3]=dis[3]+q; dis[2]=ad_data[q]/51;//测得值转换为三位BCD码,最大为5.00V dis[4]=ad_data[q]%51;//余数暂存 dis[4]=dis[4]*10;//计算小数第一位 dis[1]=dis[4]/51;// dis[4]=dis[4]%51;// dis[4]=dis[4]*10;//计算小数第二位 dis[0]=dis[4]/51;// for(h=0;h<500;h++)//每个通道值显示时间控制(约1秒) {for(k=0;k<4;k++)//四位LED扫描控制 { Disdata=dis_7[dis[k]]; if(k==2) {DISX=0;} P3=scan_con[k]; delay1ms(3); P3=0xff; } } } } Voidkey() { if(da_xun==0) {delay1ms (1); if(da_xun==0) {z=z++; if(z==2) {z=0; } } while(! da_xun); } if(tongdao==0) {delay1ms (1); if(tongdao==0) {q++; if(q>7) {q=0; } } while(! tongdao); } } /**************主函数****************/ voidmain() { P0=0xff;//初始化端口 P2=0x00; P1=0xff; P3=0xff; _nop_(); _nop_(); _nop_(); START=0; OE=0; TMOD=0x02;//定时器0为8位 TH0=245; TL0=245;//40us ET0=1; EA=1; z=1; q=0; While (1) {delay1ms(800); key(); test();//控制复位 scan(z); } } //*********************结束**************************// 8.附录B;作品实物图片 9.参考文献 [1]张毅刚主编.单片机原理及应用.北京: 高等教育出版社,2003. [2]楼然苗,李光飞编著.单片机课程设计指导.北京: 北京航空航天大学出版社,2007.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字 电压表 设计