单片机课程设计报告电压表附程序资料.docx
《单片机课程设计报告电压表附程序资料.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告电压表附程序资料.docx(12页珍藏版)》请在冰点文库上搜索。
单片机课程设计报告电压表附程序资料
——电压表
【课题】电压表
【设计要求】
设计一个量程可变的数字电压表,用3个LED数码管显示,电压表量程为0~200mV(显示0~200mV)、200mV~2V(显示0.2V~2V)。
【设计原理】
一、实验电路图
2、工作原理
如上图所示,实验中主要用到的芯片有运算放大器、继电器、ADC0832、8951单片机及其外围设备。
电压表的量程为两档,0~200mV和200mV~2V。
其相对应的运放的放大增益是25倍和2.4倍,这样即使是最大的输入其通过运放后的输出电压都会小于5V,其通过限幅电路后电压均为其真实值。
然后模拟输入电压由AD0832输入,经过模数转换后送给单片机。
由p0口输出字形,同时由p1.4的电平控制74LS573的锁存和直通状态。
P1.5、p1.6、p1.7控制字位。
P1.2控制继电器的工作状态,当P1.2低电平时,三极管工作在截止状态,继电器线圈无电流通过,继电器处于常闭状态,那么相对应的运放的放大增益为25倍。
而当P1.2为高电平时,三极管工作在饱和状态,继电器线圈有电流通过,产生电磁力将继电器的开关吸到常开状态,其对应的放大增益即变为2.4倍。
对于一个模拟输入,现将其放大2.4倍,然后由AD输入并相应转化,如果它的输出要是小于0.5V,也就是19H,则选择此档位是不精确的,也说明此时的输入电压介于0~200mV之间。
那么我们就需要让P1.2置低电平,将相应的放大倍数改成25以提高转换精度。
若其满足相应的条件则直接将其转换成BCD码并直接送数显示即可。
实验中用到了模数转换器ADC0832,其引脚图如右图所示,ADC0832是8位逐次逼近型A/D转换器,单一正5V电源供电,
为片选,CLK提供串行输入/输出时钟信号,DO用于串行数字输出,CHO和CHl为双通道模拟输入端,它可用软件设定为单端或差分输人。
在差分方式中,通道口地址的选择由DI逐位输入,GND是数字、模拟公共地,
(
)为芯片电源、参考电压公共端。
为低电平时启动转换,使所有逻辑电路使能,此时DO端为高阻,DI端等待指令,
在整个转换过程中必须置为低。
然后使DI端输入第一个逻辑高电平表示起始位,ADC0832的输入配置在多路器寻址时序中进行,多路器地址通过DI端移入转换器,多路器地址选择模拟输入通道。
DI端的数据移入多路器地址移位寄存器是在每个时钟的上升跳变时发生的,因此每次向DI端置入一位数据时,在CLK端输出一个从0到1的跳变。
然后CLK端输入第2个、第3个脉冲进行通道选择,第3个脉冲的下降沿开始转换,DI端转为高阻状态,DO端脱离高阻状态,CLK端输入第4个脉冲的下降沿开始读取DO端的一位数据,依次类推,从第4个到第11个脉冲共读取8位数。
ADCO832在输出端以最高位(MSB)开头的数据流后,又以最低位(LSB)开头重输出一遍数据流,最低位共用。
这样便实现了AD转换,其转换后的数字量输入到8951。
ADC0832工作时序图如下所示:
3、程序流程图
4、程序
ORG0000H
MAIN:
CLRP1.2;初始化
SETBP1.4;P1.4置1,使74HC573工作
TEST:
MOVSP,#60H
ACALLDELAY;调用延时程序
ACALLCONV;调用AD转换程序
ACALLJUDGE;调用BCD转换程序
ACALLDISPLAY;调用显示程序
LJMPTEST
CONV:
SETBP3.0;初始化通道选择
CLRP3.2
NOP
NOP
CLRP3.3;拉低/CS端
NOP
NOP
SETBP3.2;拉高CLK端
NOP
NOP
CLRP3.2;拉低CLK端,形成下降沿
SETBP3.0
NOP
NOP
SETBP3.2;拉高CLK端
NOP
NOP
CLRP3.2;拉低CLK端,形成下降沿2
CLRP3.0;1-0选择1通道
NOP
NOP
SETBP3.2;拉高CLK端
NOP
NOP
CLRP3.2;拉低CLK端,形成下降沿3
SETBP3.0
NOP
NOP
MOVR7,#8;准备送下后8个时钟脉冲
RECEIVE:
MOVC,P3.1;接收数据
MOVACC.0,C
RLA;左移一次
SETBP3.2
NOP
NOP
CLRP3.2;形成一次时钟脉冲
NOP
NOP
DJNZR7,RECEIVE;循环7次
MOVC,P3.1;接收数据
MOVACC.0,C
SETBP3.3;拉高/CS端
CLRP3.2;拉低CLK端
SETBP3.1;拉高数据端,回到初始状态
MOV30H,A;转换后的数字量存入30H
RET
JUDGE:
CJNEA,#19H,LOOP;判断电压是否等于200mV
SJMPBCDCON1;等于200mV时采用小量程显示程序
LOOP:
JCBCDCON1;小于200mV时采用小量程显示
SJMPBCDCON2;大于2200mV时采用大量程显示
DONE:
RET
BCDCON2:
;大量程
SETBP1.2
MOVA,30H
MOVB,#7FH
DIVAB
ADDA,#0AH;调整地址偏移量
MOV40H,A;BCD码最高位送40H
MOVA,B;低位送A
MOVB,#0DH
DIVAB
MOV41H,A;BCD码次高位送41H
MOVA,B
CJNEA,#0AH,LOOP1;余数大于10时,将其调整为9,避免取到带小数点的字型码
MOVA,#09H
SJMPX
LOOP1:
JCX
MOVA,#09H
X:
MOV42H,A;BCD码低位送R3
RET
BCDCON1:
;小量程
CLRP1.2
MOVA,30H
MOVB,#0AH
MULAB;将其数字量扩大十倍,之后采用跟大量程时相似的算法
MOV31H,B
ORLA,31H
MOVB,#7FH
DIVAB
MOV40H,A;BCD码高位送40H
MOVA,B;低位送A
MOVB,#0CH
DIVAB
CJNEA,#0AH,LOOP2
MOVA,#09H
SJMPY
LOOP2:
JCY
MOVA,#09H
Y:
MOV41H,A;BCD码次高位送41H
MOV42H,B;BCD码低位送42H
RET
DISPLAY:
SETBP1.5
SETBP1.6
SETBP1.7
MOVDPTR,#TAB1
MOVA,40H
MOVCA,@A+DPTR;查字形表
MOVP0,A;P0口送字形
CLRP1.4
SETBP1.4
CLRP1.5
ACALLDELAY
SETBP1.5
MOVDPTR,#TAB1
MOVA,41H
MOVCA,@A+DPTR;查字形表
MOVP0,A
CLRP1.4;P0口作字形
SETBP1.4
CLRP1.6
ACALLDELAY
SETBP1.6
MOVDPTR,#TAB1
MOVA,42H
MOVCA,@A+DPTR;查字形表
MOVP0,A
CLRP1.4;P0口作字形
SETBP1.4
CLRP1.7
ACALLDELAY
SETBP1.7
RET
TAB1:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
DB0FDH,61H,0DBH,0F3H,67H,0B7H,0BFH,0E1H,0FFH,0F7H
DELAY:
MOVR3,#03H
DELAY1:
MOVR4,#0FFH
DELAY2:
DJNZR4,DELAY2
DJNZR3,DELAY1
RET
END
5、扩展
将示波器接在ADC0832的DO端从波形可看出转换之后的数字量,波形如图所示,上图为DO端输出量,下图为时钟脉冲。
由图可以看出,第四个时钟脉冲开始读取准换后的数字量,则对应的数字量为01101110