基于单片机数字电压表课程设计文档格式.docx
《基于单片机数字电压表课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机数字电压表课程设计文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
![基于单片机数字电压表课程设计文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/26/b7958d97-c715-4ea8-8acf-e2a285fb6c21/b7958d97-c715-4ea8-8acf-e2a285fb6c211.gif)
这里主要是利用ADC0809的基准电压脚外接电压为5V,则最大可以测得的电压为5V,ADC0809的模拟输入脚通过电位器接5V电压,进行模拟采样,通过调整电位器的值改变模拟量。
输入的模拟量经过它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近,转换成8为二进制数,其最小的分辨率为0.0196(VREF=0.0196V),D为转化的数字量,再通过
可以求得模拟电压,最后通过数码管就可将所测得电压显示出来。
其硬件流程图如图1.1所示:
数码显示管
图1.1硬件流程图
2硬件电路设计
2.1振荡电路
振荡电路通过这两个引脚外并接石英晶体振荡器和两只电容(电容和一般取33pF),这样就构成一个稳定的自激振荡器。
为单片机提供时钟信号。
2.2复位电路设计
按键复位具有上电复位功能,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。
上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。
上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。
RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。
2.3键盘接口电路
独立式键盘:
独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。
I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。
I/O口内部有上拉电阻时,外部可不接上拉电阻。
2.4显示电路
它的连接方式分别为数码管的段控端接单片机的P0.0到P0.7口位控端接单片机P2.0到P2.3口。
2.5ADC0809简介
利用ADC0809作为AD数据采样器件,ADC0809是CMOS单片型逐次逼近式A/D转换器它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近。
ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
ADC0809各个管教功能:
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动信号,输入,高电平有效。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
引脚图如2.5所示
图2.5ADC0809引脚图
3软件设计
3.1单片机软件模块设计
3.1.1判键子函数
对于独立式键盘判键,首先看有键按下不,如果有键按下则延时一会儿,在判断是否真的有键按下,如果确实有键按下,在判键释放,最后执行键功能程序。
判键子函数的流程框图如图3.1所示:
图3.1判键子程序流程图
3.1.2显示子程序
先对数码管进行初始化,令RESET脚为低电平,延时1200
,再将RESET复位脚拉为高电平,空操作1次,令PSB=1设置液晶数据口为并口方式。
在对数码管进行写命令,先写0x34表示写扩展指令,接着写基本指令、清除显示、开反白显示、地址加1。
最后对数码管进行清屏;
在调用显示函数,先进行写地址,在进行写数据就可以显示了所写的数据了。
显示子函数的流程框图如图3.2所示:
3.2显示子程序流程图
3.1.3总程序流程框图
整体程序的流程框图如图3.4所示:
图3.4整体程序的流程框图
3.2程序清单
OEBITP3.0;
ADC0808的OE端
EOCBITP3.1;
ADC0808的EOC端
CLOCKBITP2.6
STBITP3.2;
ADC0808的START和ALE端
LED_0DATA30H;
显示缓冲区
LED_1DATA31H
LED_2DATA32H
LED_3DATA33H
ADCDATA34H;
存放转换后的数据
;
//////主程序开始////////////////////////////////////////
ORG0000H
AJMPSTART
ORG000BH
LJMPTT0
ORG0030H
------初始化-----------------------------------
START:
MOVSP,#60H;
设置堆栈
MOVLED_0,#00H;
清空显示缓冲区
MOVLED_1,#00H
MOVLED_2,#00H
MOVLED_3,#00H
MOVDPTR,#TABLE;
送字型码表首地
MOVTMOD,#02H
MOVTH0,#01H
MOVTL0,#01H
MOVIE,#82H
SETBTR0
------ADC0808转换------------------------------
WAIT:
CLRST
SETBST
CLRST;
启动转换
JNBEOC,$;
等待转换结束
SETBOE;
允许输出
MOVADC,P1;
暂存转换结果
------数据处理,已备显示------------------------
MOVA,ADC;
将AD转换结果转换成BCD码
MOVB,#0C5H;
乘以19.5MV
MULAB
MOVR7,A
MOVR6,B
HB2:
CLRA;
BCD码初始化
CLRC
MOVR3,A
MOVR4,A
MOVR5,A
MOVR2,#10H;
转换双字节十六进制整数
HB3:
MOVA,R7;
从高端移出待转换数的一位到CY中
RLCA
MOVA,R6
MOVR6,A
MOVA,R5;
BCD码带进位自身相加,相当于乘2
ADDCA,R5
DAA;
十进制调整
MOVA,R4
ADDCA,R4
DAA
MOVA,R3
ADDCA,R3
MOVR3,A;
双字节十六进制数的万位数不超过6,不用调整
DJNZR2,HB3
MOVA,R5
SWAPA
ANLA,#0FH
MOVLED_0,A
MOVLED_1,A
MOVLED_2,A
MOVLED_3,A
LCALLDISP;
调用显示子程序
AJMPWAIT
//////数码管显示子程序///////////////////////////////////////////////
DISP:
MOVA,LED_0;
数码显示子程序
MOVCA,@A+DPTR
CLRP2.3
MOVP0,A
LCALLDELAY
SETBP2.3
MOVA,LED_1
CLRP2.2
SETBP2.2
MOVA,LED_2
CLRP2.1
SETBP2.1
MOVA,LED_3
CLRP2.0
SETBP0.7
SETBP2.0
RET
//////延时子程序////////////////////////////////////
DELAY:
MOVR6,#0AH;
延时5毫秒
D1:
MOVR7,#0FAH
DJNZR7,$
DJNZR6,D1
//////数码管字形码表/////////////////////////////////
TABLE:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
ORG0100H
TT0:
CPLCLOCK;
产生ADC0808/0809时钟脉冲信号
RETI
END