简易电压表设计Word文档格式.docx
《简易电压表设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《简易电压表设计Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
运用<
<
微机原理及应用B>
>
课程等知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识点的理解,使学生综合应用知识能力、设计能力、调试能力及报告撰写能力等显著提高。
本课题使学生掌握模数转换的基本原理和器件的选用,掌握LED的显示方法达到的目的
2.课程设计要求
✧简易电压表除完成基本的电压测量功能外,还应具备量程选择、显示等辅助功能。
✧设计绘制相应的硬件电路原理图并完成接线
✧编制相应控制程序实现电压测量与显示
✧控制程序设计规范,应有适当的注释,表达清楚
✧电压表示数显示要求采用8段LED数码管实现
✧电压表显示数值至少由三个数据位构成。
其中,整数位一位,小数位两位。
✧电压表量程分为0~5V和0~10V两种
✧简易电压表的量程选择通过拨码开关实现,分两个档位0~5V档与0~15V档。
二、总体方案
总体框图
ADC0809
电压模拟量
将二进制数转化为十进制数
8255
拨码开关
LED数码管
将输入的电压模拟量经模数转换器0809转换成二进制数,将得到的8位二进制数(100H~FFH)转换成十进制数0~500的BCD码用于显示电压数值0.00V~5.00V。
根据每位数的BCD码算出相应的LED数码管段码,并通过并行接口芯片8255的C口输出。
LED数码管的位码由并行接口芯片8255的A口输出,从而实现电压值的显示。
用拨码开关控制电压表量程的选择(当拨码开关状态为00000001时选择量程0~5V,当拨码开关状态为00000010时选择量程0~10V)并通过并行接口芯片8255的B口输入。
三、原理框图
四.系统模块详细设计与调试
1.程序如下
DATASEGMENT
OUTBUFFDB3DUP(?
)
CS0809EQU9000H
LEDTABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
COUNTDB10
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,82H;
初始化8255
MOVDX,8003H
OUTDX,AL
ABC:
MOVAL,0;
启动A/D
MOVDX,CS0809
MOVCX,40H
LOOP$
INAL,DX;
读入数据
PUSHAL;
选择量程
MOVDX,8001H
INAL,DX
MOVBL,AL
MOVBH,00H
POPAL
MULBL
MULBL,5;
转换电压值并保存
MOVBL,255
DIVBL
LEASI,OUTBUFF
MOV[SI],AL
MOVAL,AH
MOVBH,OAH
MOVAH,0
MULBH
INCSI
AGAIN:
MOVCH,06H;
初始化位选码
MOVAL,[SI];
取电压值的个位并显示
LEADI,LEDTAB
ADDDI,AX;
转化为段码
MOVAL,[DI]
ADDAL,80H
MOVDX,8002H;
位码清零
MOVAL,0
OUTDX,AL
MOVAL,BL;
输出段码
MOVDX,8000H
MOVDX,8002H;
输出位码
MOVAL,CH
CALLDELAY
RORCH,1
LEDDISP:
取电压值的小数部分并显示
ADDDI,AX
MOVAL,[DI]
MOVAL,CHMOVDX,8002H;
MOVBL,AL
MOVAL,BL
MOVDX,8000H;
OUTDX,AL
CMPCH,80H
JNZLEDDISP
DECCOUNT
JNZAGAIN
MOVCOUNT,10
JMPABC
DELAYPROCNEAR;
延时子程序
PUSHBX
PUSHCX
MOVBX,10
DEL1:
MOVCX,0
DEL2:
LOOPDEL2
DECBX
JNZDEL1
POPCX
POPBX
RET
DELAYENDP
CODEENDS
ENDSTART
2.上机调试
利用WAVE6000系统调试程序
(1)程序输入在WAVE6000系统环境下将上述程序输入计算机
(2)连接电路打开试验箱,在未通电源的情况下,按照设计的硬件电路原理图连接线路,并检查是否有误。
(3)设置仿真器设置仿真器为8086伟福系统
(4)对程序进行编译打开试验箱的电源,点击编译按钮进行程序的编译
(5)在编译正确的情况下进行调试运行程序
在调试过程中遇到的问题
a.LED数码管显示的数字有重影
在运行程序时,发现数码管显示数字时有重影,由此可以断定在显示程序的那一部分有问题,即程序段:
MOVDX,8000H;
在输出段码前未加位码清零信号
MOVDX,8002H
OUTDX,AL
经过对此段内容的检查,测试和老师的指导后发现,在此段程序中,在传递某位段码信息时,选择上一位的位码信号还存在,所以输入的段码直接在上一位显示,当此位的位送信号输入后,才会在正确的位上显示数字,导致有重影出现。
要避免重影现象,可在每次输入段码信号前将位送信号清零,之后再输入位码信号,则修改后的此段程序为:
MOVDX,8002H
MOVDX,8000H
b.数字显示有误
在输入修改后的程序后,发现没有重影现象,且显示也很清晰,说明显示部分没有错误,但是显示的十位数字不为十进数字且小数点时有时无,由此可知可能出现的问题是在数据扩展和转化为BCD码的过程或是求个位数字段码的过程对上部程序的调试发现程序
MOVAL,[SI]
ADDAL,80H;
错误,应在转换为段码后加80H
ADDDI,AX
有误。
要显示出小数点,应使输出段码最高位为1。
由设计题目要求知,段码最高位均为0,所以只要在相应段码上加80H即可,但是上述程序是先加80H,在将数转化为段,导致输出错误的信息,应先将BCD转化为段码后再加8H,因此可将程序修改为:
将修改后的程序重修编译,运行发现,数码管显示数字正确,能够随着输入的模拟信号量的变化显示相应的值,其显示范围为0.00V~5.OOV,符合程序设计要求。
五.设计总结
六.主要参考文献
《微机原理实验与课程设计指导书》,陆红伟编,中国电力出版社,2006年
《8086微型计算机组成、原理及接口》,顾滨,机械工业出版社,2001
《微型计算机原理及应用》,吕淑萍等,哈尔滨工程大学出版社,2004年
《微型计算机技术及应用》,戴梅萼,清华大学出版社,2005
七.附件材料
1.所用芯片
(1)A/D转换器0809
ADC0809的引脚图如下图所示:
ADC0809是采用CMOS工艺制成的28引脚双列直插式8位A/D转换芯片。
它具有8路模拟量输入线,可在程序控制下对任意一路进行A/D转换,得到8位二进制数字量。
芯片内包括一个8位的逐次逼近型的ADC部分,并通过一个通道的模拟多路开关和联合寻址逻辑。
用该电路可直接采样8个单端的模拟信号,分时进行A/D转换,在多点巡回检测,过程控制等领域使用非常广泛。
A/D转换方法:
IN0单极性输入电压与转换后数字的关系为
N=Ui/(Uref/256)
其中Ui为输入电压,Uref为参考电压(+5V)。
本设计中电压模拟量从ADC0809的IN0端输入。
(2)并行接口芯片8255
8255A是一个40引脚的双列直插式芯片,其引脚图如下图所示:
8255芯片内部有3个8位的输入输出端口,即A口,B口和C口。
从内部控制角度来讲,可分为两组:
A组和B组。
A组控制模块管理A口和C口的高四位,B组控制模块管理B口和C口的低四位。
8255A的三种工作方式:
方式0:
基本输入输出方式;
方式1:
选通型输入输出方式;
方式2:
双向数据传送方式。
8255的控制字:
工作方式选择控制字,D7~D0控制位的含义见下图
:
本实验中使8255端口A输出LED数码管的位选信号和端口C输出段码信号用于控制数码管对电压值的显示,端口B输入拨码开关的状态信号用于控制量程的选择。
(3)8段LED数码管
共阴极数码管字形代码如下表:
显示字形
g
f
e
d
c
b
a
段码
1
3fh
06h
2
o
5bh
3
4fh
4
66h
5
6dh
6
7dh
7
07h
8
7fh
9
6fh
本设计用3位8段LED数码管分别显示电压值的个位和两位小数部分