基于单片机数字电压表设计.docx
《基于单片机数字电压表设计.docx》由会员分享,可在线阅读,更多相关《基于单片机数字电压表设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于单片机数字电压表设计
摘要
本文介绍了基于89c51单片机的一种8路输入电压测量电路,该电路采用ADC0809作为A/D转换元件,测量范围0至5伏,小数点后显示一位。
要求能够依次显示每路通道电压,而且能够通过拨码开关选择输入通道。
使用3位LED模块显示,前面一位显示通道号,后面两位显示测量电压值。
本系统主要包括四大模块:
数据采集模块、控制模块、显示模块、A/D转换模块。
绘制电路原理图与工作流程图,并进行调试,最终设计完成了该系统的硬件电路。
在软件编程上,采用了汇编语言进行编程,开发环境使用WAVE集成开发环境。
开发了显示模块程序、通道切换程序、A/D转换程序。
关键词:
ADC0809;A/D转换;LED显示
目录
1方法论证5
1.1系统的设计任务5
1.2设计方案5
1.3软硬件开发环境6
2数字电压表硬件设计7
2.1单片机主电路设计7
2.1.1复位电路7
2.1.2晶振电路7
2.2测量、转换电路设计8
2.3按键电路设计9
2.4显示电路设计10
2.4.1LED数码管构成10
2.4.2显示方式11
3软件设计14
3.1主程序设计14
3.1.1工作流程14
3.1.2存储空间定义安排15
3.2模块程序设计15
3.2.1A/D转换测量程序15
3.2.2显示程序16
4系统调试与分析18
4.1调试内容及问题解决18
4.2系统进一步改进方案18
附录1:
硬件原理图20
附录2:
程序清单21
参考文献24
1方法论证
1.1系统的设计任务
设计单片机主电路、数据采集接口电路、LED显示电路、拨码控制电路,能够实现对8路电压值进行测量,能够显示当前测量通道号及电压值,电压精度小数点后1位,可以通过键盘选择循环显示8路的检测电压值和指定通道的检测电压值。
1.2设计方案
将数据采集接口电路输入电压传入ADC0809数模转换元件,经转换后通过D0至D7与单片机P0口连接,把转换完的模拟信号以数字信号的信号的形式传给单片机,信号经过单片机处理从LED数码显示管显示。
拨码开关连P3口,实现通道选择。
P2口接数码管位选,P1接数码管,实现数据的动态显示,如下图所示。
图1.1系统总体方案结构图
1.3软硬件开发环境
硬件选择:
选择89c51作为单片机芯片,选用8段共阴极LED数码管实现电压显示,选用独立式按键作为程序的跳转与选择,利用ADC0809作为数模转换芯片,利用P0至P4的各个串口来进行不同设备间的连接,计算机进行汇编,H51/L仿真器,单片机多功能实验箱。
软件开发环境:
用Protel99SE软件画电路图、WAVE软件进行程序编写。
2数字电压表硬件设计
2.1单片机主电路设计
在本次课题设计中我们选择了8951芯片,其具有功能强、体积小、成本低、功耗小等特点,它可单独地完成现代工业控制所要求的智能化控制功能,能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
2.1.1复位电路
复位电路如图2.1所示,单片机系统常常有上电复位和操作复位两种。
上电复位是指单片机上点瞬间,要在RST引脚上出现宽度大于10ms的正脉冲,才能使单片机进入复位状态。
操作复位是指用户按下“复位”按钮使单片机进入复位状态。
图2.1复位电路
2.1.2晶振电路
晶振电路用于产生单片机工作所需的时钟信号,使用晶体震荡器时,c2,c3取值20~40PF,使用陶瓷震荡器时c2,c3取值30~50PF。
在设计电路板时,晶振和电容应尽量靠近芯片,以减小分布电容,保证震荡器的稳定性。
18引脚接XTAL1,19引脚接XTAL2,20引脚接地。
图2.2晶振电路
2.2测量、转换电路设计
使用ADC0809作为数模转换元件,其引脚图如2.3所示
图2.3ADC0809引脚图
ADC0809是带有8:
1多路模拟开关的8位A/D转换芯片,所以它可有8个模拟量的输入端,由芯片的A,B,C三个引脚来选择模拟通道中的一个。
A,B,C三端分别与89C51的P0.0~P0.2相接。
地址锁存信号(ALE)和启动转换信号(START),由P2.6和/WR或非得到。
输出允许,由P2.6和/RD或非得到。
时钟信号,可有89C51的ALE输出得到,不过当采用12M晶振时,应该先进行二分频,以满足ADC0809的时钟信号必须小于640K的要求。
与单片机的连接如图2.4所示
图2.4数据转换系统电路图
2.3按键电路设计
按键选择上有两种方法可供选择,独立式按键与矩阵式按键,再此使用了独立式按键。
按键模块如图2.5所示,其与P3口连接,实现通道选择。
对按键的工作过程可分为两步:
第一步是CPU首先检测键盘上是否有键按下;第二步是在识别是哪一个键按下。
检测键盘上有无键按下可采取查询各自方式、定时扫描构造方式和中断耕作方式。
在此选择了查询工作方式。
按键模块如图2.5所示,其与P3口连接,实现通道选择。
图2.5按键模块
2.4显示电路设计
2.4.1LED数码管构成
LED数码管显示器是由发光二极管显示字段的显示器件,也称为数码管。
其外形结构如图所示。
它由8个发光二极管构成,通过不同的组合可用来显示0-9、A-F及小数点“.”等字符。
数码管有共阴极和共阳极两种结构规格,如图2.5所示。
图中电阻为外接。
共阴极数码管的发光二极管阴极共地,当某发光二极管的阳极为高电平时,二极管点亮;共阳极数码管的发光二极管是阳极,并接高电平,对于需点亮的发光二极管将其阴极接低电平即可。
对照图2.5中的字段:
7段发光二极管,在加上1个小数点位,共计8段,因此提供给LED显示器的字形码正好一字节。
图2.6(a)共阴极图2.6(b)共阳极
图2.6(C)字段显示
2.4.2显示方式
(1)静态显示方式
直接利用并行口输出。
LED显示工作于静态显示方式时,各位的共阴极连接在一起接地;每位的段选线分别于一个8位的锁存输出相连。
一般称之为静态显示,是由于显示器中的各位相互独立。
而且各位的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止。
利用通信号串行输出。
在实际应用中,多位LED显示时,为了简化电路,在系统不需要通信功能时,经常采用串行通信口工作方式0,外接移位寄存器74LS164、CD4094来实现静态显示。
(2)动态显示方式
对多位LED显示器的动态显示,通常都时采用动态扫描的方法进行显示,即逐个循环点亮各位显示器。
这样虽然在任一时刻只有一位显示器被点亮,但是由于间隔时间较短,且人眼具有视觉残留效应,看起来与全部显示器持续点亮一样。
为了实现LED显示器的动态扫描,除了要给显示器提供的输入之外,还要对显示器加位选择控制,这就是通常所说的段控和位控。
因此多位LED显示器接口电路需要有两个输出口,其中一个用于输出8位控信号;另一个用于输出段控信号,其连接图如下。
2.7LED显示电路
表2.1七段LED段选码表
显示字符
共阴极段
显示字符
共阴极段
0
3FH
C
39H
1
06H
D
5EH
2
5BH
E
79H
3
4FH
F
71H
4
66H
P
73H
5
6DH
U
3EH
6
7DH
Γ
31H
7
07H
y
6EH
8
7FH
8.
FFH
9
6FH
“灭”
00H
A
77H
/
/
B
7CH
/
/
3软件设计
3.1主程序设计
3.1.1工作流程
首先拨动拨码开关k1,如果是低电平,程序转向选择通道程序,拨动k2的次数即是选择的通道号,拨动k3表示确认。
转向数据读取程序,再到显示程序,显示出通道号和电压值。
如果k1是高电平,则转向循环显示程序,即先显示第0路最后显示第7路电压值和相应通道号。
工作流程图如下:
N
Y
图3.1主程序流程
3.1.2存储空间定义安排
60H用于存放A/D转换结果,30H、31H、32H分别存储显示用的三位数据如下表:
表3.1存储空间定义表
60H
用于存放A/D转换结果
30H
电压值整数部分
31H
电压值小数部分
32H
循环显示的通道号
34H
选择的通道号
3.2模块程序设计
3.2.1A/D转换测量程序
A/D转换的常用方法有:
①计数式A/D转换,②逐次逼近型A/D转换,③双积分式A/D转换,④V/F变换型A/D转换。
在这些转换方式中,记数式A/D转换线路比较简单,但转换速度较慢,所以现在很少应用。
双积分式A/D转换精度高,多用于数据采集及精度要求比较高的场合,如5G14433(31/2位),AD7555(41/2位或51/2位)等,但速度更慢。
逐次逼近型A/D转换既照顾了转换速度,有具有一定的精度,这里选用的是逐次逼近型的A/D转换芯片ADC0809。
采用中断控制的方式实现,不浪费时间,效率较高。
其流程图如下:
图3.2A/D转换测量程序
3.2.2显示程序
对多位LED显示器的动态显示,通常都是采用动态扫描的方法进行显示,即逐个循环点亮各位显示器。
这样虽然在任一时刻只有一位显示器被点亮,但是由于间隔时间较短,且人眼具有视觉残留效应,看起来与全部显示器持续点亮一样。
为了实现LED显示器的动态扫描,除了要给显示器提供的输入之外,还要对显示器加位选择控制,这就是通常所说的段控和位控。
因此多位LED显示器接口电路需要有两个输出口,其中一个用于输出8位为控信号;另一个用于输出段控信号。
图3.3显示子程序
4系统调试与分析
4.1调试内容及问题解决
程序可分为数据采集系统、数据转换系统、显示系统和按键控制系统,这四部分先独立测试,然后整体调试。
显示系统的调试:
要显示的数据存放在30H、31H、32H单元中,先在30H、31H、32H分单元中存放0~10的数,运行显示程序,察看显示的结果是否与存放值一样。
在测试的过程中发现小数点没有显示,通过指令ORL30H,#80H,把小数点显示出来。
按键控制系统调试:
拨动k2在34H单元内容看是否和拨动次数相同。
整体测试:
把个部分用线连接,P3接拨码开关,P2接数码管,P3接位选。
仿真器、仿真头连好,进入WAVE软件,设置仿真器。
编译程序,看是否存在错误。
4.2系统进一步改进方案
进一步提高测量精度,把精确到小数点后一位改为精确到小数点后两位。
具体程序如下:
MOVXA,@DPTR;读取转换后的数据.
MOVB,#51;255÷51=5.00V运算
DIVAB
MOV33H,A;;个位数放入33H
MOVA,B;;余数大于19H,F0为1,乘法溢出,结果加5
CLRF0
SUBBA,#1AH
MOVF0,C
MOVA,#10
MULAB
MOVB,#51
DIVAB
JBF0,LOOP2
ADDA,#5
LOOP2:
MOV34H,A;;小数后第一位放入34H
MOVA,B
CLRF0
SUBBA,#1AH
MOVF0,C
MOVA,#10
MULAB
MOVB,#51
DIVAB
JBF0,LOOP3
ADDA,#5H
LOOP3:
MOV35H,A;;小数后第二位放入35H
附录1:
硬件原理图
附录2:
程序清单
ORGOOOOH
LJMPMAIN
ORG0013H
LJMPOVER
MAIN:
JNBP3.0XZ;高电循环显示,低电平选择通道
MOVRO,#60H
MOVR1,#08H;8个通道
CLR34H
XZ1:
MOVR2,#34H;选择通道IN0
SETBEA
SETBIT1
SETBEX1
MOVDPTR,@#08FFFH;第0路地址
MOVA,R2
MOVX@DPTR,A;启动A/D转换
SJMP$
XZ:
JBP3.4,XZ
W1:
JNBP3.4W1;拨码开关一个来回计数一次
CLRA
INCA
JNBP3.5
MOV34H,A;计数次数存入34H
LJMPXZ1;跳到通道选择程序
OVER:
CLREX1
MOVDPTR,#08FFFH
SUBDPTR,34H
MOVXA,@DPTR
MOV@R0,A
INCR2
MOV33H,#100;延时两秒
LJMPXIANSHI
JX:
MOVA,R2
DJNZR1,WAIT
WAIT:
SETBEX1
MOVX@DPTR,A
ED:
RETI
;;;;;;;;把00000000到11111111的数转换成十进制数;;;;;;
XIANSHI:
MOV33H,#0
MOVA,6OH
MOVB,#51
DIVAB
MOV30H,A;把整数放入30H
MOVA,B
MOVB,#51
MULA,#10
MOVB,#51
DIVAB
MOV31H,A;把小数放入31H
MOVR6,#30H
;;;;;;;;;;;;动态显示程序;;;;;;;;;
MOVDPTR#TAB
MOVR7,#01H
CLRA
MOVP3,A
L:
MOVA,@R6
ANLA,#0FH
MOVCA,@A+DPTR
MOVP1,A
MOVA,R7
MOVP3,A
LCALLD20MS
INCR6
CJNER6,#32H,L0
MOVR6,#30H
L0:
RLA
MOVR7,A;两秒后进行下一路
SJMPL
DEC33H
JNB33H,JX
TAB:
DB3FH,06H,5BH,4FH,66H;0,1,2,3,4
DB6DH,7DH,07H,7FH,6FH;5,6,7,8,9
D20MS:
MOVR4,#100;20毫秒延时程序
L1:
MOVR5,#10
L2:
DJNZR5,L2
DJNZR4,L1
RET
参考文献
[1]徐爱钧.智能化测量控制仪表原理与设计(第二版).北京:
北京航空航天大学出版社,2004
[2]吴金戌.8051单片机实践与应用.北京:
清华大学出版社,2002
[3]张国勋.缩短ICL7135A/D采样程序时间的一种方法,1993
[4]高峰.单片微型计算机与接口技术.北京:
科学出版社,2003