单片机课程设计基于单片机的简易数字电压表设计.docx
- 文档编号:26614494
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:20
- 大小:160.66KB
单片机课程设计基于单片机的简易数字电压表设计.docx
《单片机课程设计基于单片机的简易数字电压表设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计基于单片机的简易数字电压表设计.docx(20页珍藏版)》请在冰豆网上搜索。
单片机课程设计基于单片机的简易数字电压表设计
单片机原理及应用
课程设计报告书
题目:
基于单片机的简易数字电压表设计
姓名:
学号:
指导老师:
设计时间:
2012.4
目录
1.引言1
1.1.设计意义1
1.2.系统功能要求1
2.方案设计1
3.硬件设计2
3.1.硬件电路2
3.1.1.硬件电路图部分模块设计2
3.1.2.硬件电路图整体设计4
3.2.硬件电路仿真5
4.软件设计5
4.1.初始化程序5
4.2.主程序5
4.3.显示子程序6
4.4.A/D转换测量子程序6
5.系统调试7
6.设计总结8
7.附录8
7.1.源程序代码8
7.2.作品实物图片14
8.参考文献14
基于单片机的简易数字电压表设计
1.引言
1.1.设计意义
传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳。
而数字电压表读数直观抗干扰信号等优点。
通过本次基于AT89C52单片机为控制系统,ADC0809为转换的简易数字电压表的课程设计可以从中了解片机控制的数字电压表的基本原理,将课堂上的理论知识紧密的联系起来,掌握包括硬件的组装及相关软件的使用和系统调试。
1.2.系统功能要求
简易数字电压表可以测量0-5V的8路输入电压值,并在4位LED数码管上轮流显示或单路选择显示。
测量误差约为0.02V。
2.方案设计
按系统功能实现要求,决定控制系统采用AT89C52单片机,A/D转换采用ADC0809.系统除能实现要求的功能外,还能方便的进行8路其他A/D转换量的测量,远程测量结果传送等拓展功能。
数字电压表系统设计方案框图如图1所示:
图1数字电压表系统设计方案框图
3.硬件设计
3.1.硬件电路
3.1.1.硬件电路图部分模块设计
AT89C52芯片引脚图如图2所示
图2
晶振电路
晶振电路用于产生单片机工作所需的时钟信号,使用晶体震荡器时,c2,c3取值20~40PF,使用陶瓷震荡器时c2,c3取值30~50PF。
在设计电路板时,晶振和电容应尽量靠近芯片,以减小分布电容,保证震荡器的稳定性。
18引脚接XTAL1,19引脚接XTAL2,20引脚接地。
显示电路设计
LED数码管显示器是由发光二极管显示字段的显示器件,也称为数码管。
其外形结构如图所示。
它由8个发光二极管构成,通过不同的组合可用来显示0-9、A-F及小数点“.”等字符。
数码管有共阴极和共阳极两种结构规格,如图2.5所示。
图中电阻为外接。
共阴极数码管的发光二极管阴极共地,当某发光二极管的阳极为高电平时,二极管点亮;共阳极数码管的发光二极管是阳极,并接高电平,对于需点亮的发光二极管将其阴极接低电平即可。
数码管原理电路图:
共阳极图
字段显示
3.1.2.硬件电路图整体设计
简易数字电压测量由A/D转换、数据处理及显示控制等组成,电路原理图如图3所示,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数字电压表电路原理图
(字体小4号,宋体)
3.2.硬件电路仿真
根据设计的硬件电路图,在pretous中就行仿真。
论证硬件电路设计的可行性,根据仿真的结果与系统功能要求就行分析,最后达到设计要求。
可以提高工作效率及设计成本。
仿真硬件点图搭建如图3试。
其中二分频用D触发器代替模数转换器用的是与实际电路图中功能相当的ADC0808代替的。
通过仿真论证了硬件电路图基本能满足系统功能设计的需要。
4.软件设计
4.1.初始化程序
系统刚上电时,初始化程序主要用来执行70H—77H内存单元清空0和P2口置0等准备工作。
4.2.主程序
在刚上电时,系统默认为循环显示8个通道的电压值状态,当进行一次测量后,将显示每一通道的A/D转换值,每个通道的数据显示时间为1s左右。
主程序在调用显示子程序与测量子程序之间循环。
主程序流程图如所示。
4.3.显示子程序
显示子程序采用动态扫描法实现4位数码管的数值显示。
测量所得的A/D转换数据放在数组中,测量数据在显示时须经过转换成为十进制BCD码放在对应的数组中。
主程序流程图
4.4.A/D转换测量子程序
A/D转换测量子程序用来控制对ADC0809的8路模拟输入电压的A/D转换,并将对应的数值放在数组中。
A/D转换测量子程序流程图如图所示。
转换测量子程序流程图
5.系统调试
硬件组装基本完成后,上电后发现数码管根本就不亮。
用数字电压表检测个芯片发现有些芯片的电源和接地线没连接。
通过一一检测,找出了其中漏掉的线。
线路连接完整后数码管亮了,但跟其他同学数码管显示的规律不一样即有错误,自己检测大半个上午未果。
请同学帮我检查最后发现是有跟连线接错了。
最后硬件连线完全正确后发现所编程序并不能安要求是数码管显示。
通过思考调试最后找出其中的错误,在KEIL软件中编译调试后没问题。
最后生成HEX文件烧入单片机中,最后数码管完全按要求显示,整个课程设计成功。
(字体小4号,宋体)
6.设计总结
经过一段时间的努力,基于单片机的简易数字电压表基本完成。
通过这次设计学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。
本次设计采用了AT89S52单片机芯片,与以往的单片机相比增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。
设计中还用到了模/数转换芯片ADC0809,以前在学单片机课程时只是对其理论知识有了初步的理解。
通过这次设计,对它的工作原理有了更深的理解。
在调试过程中遇到很多问题,硬件上的理论知识学得不够扎实,对电路的仿真方面也不够熟练。
在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
7.附录
7.1.源程序代码
;************************;
;;
;八路电压测量显示电路;
;;
;************************;
;测量电压最大为5V,显示最大值为5.00V
;70H—77H存放采样值,78H—7BH存放显示数据,依次为个位、十位、百位、通道标志
;P3.5作单路显示-循环显示转换用,P3.6作单路显示时选择通道用。
?
;
;*************************************
;**
;*主程序和中断程序入口*
;**
;*************************************
ORG0000H
LJMPSTART
ORG0003H
RETI
ORG000BH
RETI
ORG0013H
RETI
ORG001BH
RETI
ORG0023H
RETI
ORG002BH
RETI
;
;*************************************
;**
;*初始化程序中的各变量*
;**
;*************************************
CLEARMEMIO:
CLRA
MOVP2,A
MOVR0,#70H
MOVR2,#0DH
LOOPMEM:
MOV@R0,A
INCR0
DJNZR2,LOOPMEM
MOV20H,#00H
MOVA,#0FFH
MOVP0,A
MOVP1,A
MOVP3,A
RET
;
;*************************************
;**
;*主程序*
;**
;*************************************
START:
LCALLCLEARMEMIO;初始化
MAIN:
LCALLTEST;测量一次
LCALLDISPLAY;显示数据一次
AJMPMAIN
NOP;PC值出错处理
NOP
NOP
LJMPSTART
;
;*************************************
;*显示控制程序*
;*************************************
;
DISPLAY:
JB00H,DISP11;
MOVR3,#08H;8路信号循环显示控制
MOVR0,#70H;显示数据初址70H~77H
MOV7BH,#00H;显示通道路数初值
DISLOOP1:
LCALLTUNBCD;显示数据转为三位BCD码存入7AH、79H、78H(最大5.00v)
MOVR2,#0FFH;每路显示时间控制4MS*255
DISLOOP2:
LCALLDISP;调四位显示程序
LCALLKEYWORK1;
DJNZR2,DISLOOP2;
INCR0;显示下一路
INC7BH;通道显示数加一
DJNZR3,DISLOOP1
RET
;
DISP11:
MOVA,7BH;
SUBBA,#01H;
MOV7BH,A;
ADDA,#70H;
MOVR0,A;
DISLOOP11:
LCALLTUNBCD;显示数据转为三位BCD码存入7AH、79H、78H(最大5.00v)
MOVR2,#0FFH;每路显示时间控制4MS*25
DISLOOP22:
LCALLDISP;调四位显示程序
LCALLKEYWORK2;
DJNZR2,DISLOOP22
INC7BH;通道显示数加一
RET
;
;*************************************
;*显示数据转为三位BCD码程序*
;*************************************
;显示数据转为三位BCD码存入7AH、79H、78H(最大值5.00v)
;
TUNBCD:
MOVA,@R0;255/51=5.00V运算
MOVB,#51;
DIVAB;
MOV7AH,A;个位数放入7AH
MOVA,B;余数大于19H,F0为1,乘法溢出,结果加5
CLRF0
SUBBA,#1AH
MOVF0,C
MOVA,#10;
MULAB;
MOVB,#51;
DIVAB
JBF0,LOOP2;
ADDA,#5
LOOP2:
MOV79H,A;小数后第一位放入79H
MOVA,B
CLRF0
SUBBA,#1AH
MOVF0,C
MOVA,#10;
MULAB;
MOVB,#51;
DIVAB
JBF0,LOOP3;
ADDA,#5
LOOP3:
MOV78H,A;小数后第二位放入78H
RET
;
;*************************************
;*?
显?
示程序*
;*************************************
;共阳显示子程序,显示内容在78H—7BH
;
DISP:
MOVR1,#78H;共阳显示子程序,显示内容在78H—7BH
MOVR5,#0FEH;数据在P1输出,列扫描在P3.0-P3.3
PLAY:
MOVP1,#0FFH
MOVA,R5
ANLP3,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP1,A
JBP3.2,PLAY1;小数点处理
CLRP1.7;小数点显示(显示格式为XX.XX)
PLAY1:
LCALLDL1MS
INCR1
MOVA,P3
JNBACC.3,ENDOUT
RLA
MOVR5,A
MOVP3,#0FFH
AJMPPLAY
ENDOUT:
MOVP3,#0FFH
MOVP1,#0FFH
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;
;*************************************
;*?
?
延时程序*
;*************************************
;
DL10MS:
MOVR6,#0D0H;10MS延时子程序
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;
DL1MS:
MOVR4,#0FFH;513+513=1MS
LOOP11:
DJNZR4,LOOP11
MOVR4,#0FFH
LOOP22:
DJNZR4,LOOP22
RET
;
;*************************************
;*?
电压测量(A/D)子程序*
;*************************************
;一次测量数据8个,依次放入70H-77H单元中
;
TEST:
CLRA;模数转换子程序
MOVP2,A
MOVR0,#70H;转换值存放首址
MOVR7,#08H;转换8次控制
LCALLTESTART;启动测试
WAIT:
JBP3.7,MOVD;等A/D转换结束信号
AJMPWAIT
;
TESTART:
SETBP2.3;测试启动
NOP
NOP
CLRP2.3
SETBP2.4
NOP
NOP
CLRP2.4
NOP
NOP
NOP
NOP
RET
;
MOVD:
SETBP2.5;取A/D转换数据
MOVA,P0
MOV@R0,A
CLRP2.5
INCR0
MOVA,P2;通道地址加1
INCA
MOVP2,A
CJNEA,#08H,TESTEND;等8路A/D转换结束
TESTEND:
JCTESTCON
CLRA;结束恢复端口
MOVP2,A
MOVA,#0FFH
MOVP0,A
MOVP1,A
MOVP3,A
RET
;
TESTCON:
LCALLTESTART
LJMPWAIT
;
;*************************************
;*?
按键检测子程序*
;*************************************
;
KEYWORK1:
JNBP3.5,KEY1
KEYOUT:
RET
;
KEY1:
LCALLDISP;延时消抖
JBP3.5,KEYOUT
WAIT11:
JNBP3.5,WAIT12
CPL00H
MOVR2,#01H
MOVR3,#01H
RET
;
WAIT12:
LCALLDISP;键释放等待时显示用
AJMPWAIT11
;
KEYWORK2:
JNBP3.5,KEY1
JNBP3.6,KEY2
RET
;
KEY2:
LCALLDISP;延时消抖用
JBP3.6,KEYOUT
WAIT22:
JNBP3.6,WAIT21
INC7BH
MOVA,7BH
CJNEA,#08H,KEYOUT11
KEYOUT11:
JCKEYOUT1
MOV7BH,#00H
KEYOUT1:
RET
;
WAIT21:
LCALLDISP;键释放等待时显示用
AJMPWAIT22
;
END
7.2.作品实物图片
8.参考文献
[1]郭天祥.新概念51单片机C语言教程:
入门,提高,开发,扩展全攻略.北京:
电子工业出版社,2009.1
[2]张毅刚,彭喜元,彭宇.单片机原理及应用(第二版).北京:
高等教育出版社,2010.5
[3]MarkNelson著.潇湘工作室译.串行通信开发指南[M].中国水利水电出版社,2002.
[4]韩润萍,陈小萍.点阵LED显示屏控制系统[J].微计算机信息,2003,19(10):
50-51.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 基于 简易 数字 电压表 设计