8路输入模拟信号数值显示电路_单片机课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计
8路输入模拟信号数值显示电路
姓名: 李花
同组人: 赵家
专业班级: 电信0204班
学号: 020910164
指导老师: 付永红
职称: 副教授
计算机与电子工程系教务办制
二00五年十二月
评审表
摘要
本系统是基于AT89S52单片机设计的,由具有8通道的模数转换芯片ADC0809采集模拟信号,并将采集到的数据送入AT89S52进行处理,其中ADC0809的1MHZ
时钟脉冲直接由单片机的ALE脚输出的六分频时钟信号经过74LS74二分频得到。

在设计中采用了精简电路及充分利用软件资源为原则,采用了软件译码,并利用三极管扩流来驱动数码管。

同时兼顾系统的性能指标,采用了四位数码管进行动态显示,分别显示模拟通道数以及采集到的模拟电压的数值。

本系统经设计调试达到了预期的设计要求,能够标准地自动轮流显示8路模拟电压数值量,精度为0.02V,误差系数为0.01。

关键词
模拟信号; AT89S52; ADC0809;数值显示
目录
一、设计任务及要求 ............................................................................ - 4 -
二、总体设计方案 .................................................................................. - 5 -
三、硬件电路设计 ................................................................................ - 5 -
1、模拟信号采集电路:.......................................................................................................... - 5 -
2、数据处理模块电路.............................................................................................................. - 7 -
3、数码显示模块电路.............................................................................................................. - 8 -
四、软件设计 .......................................................................................... - 9 -
1、主程序.................................................................................................................................. - 9 -
2、初始化程序.......................................................................................................................... - 9 -
3、显示子程序.......................................................................................................................... - 9 -
4、模数转换测量子程序.......................................................................................................... - 9 -
五、检测与调试 .................................................................................... - 10 -
六、系统改进设想 ................................................................................ - 11 -
七、总结 ................................................................................................ - 11 -参考文献................................................................................................... - 12 -附件一:总的电路原理图 ...................................................................... - 12 -附件二:程序清单 .................................................................................. - 13 -附件三:数值量模拟量转换对照表(ADC0809的参考电压为5V)- 18 -
附件四:元件清单 .................................................................................. - 20 -
一、设计任务及要求
设计一个8路输入模拟信号数值显示电路,具体要求如下:
a.8路模拟信号输入;
b.自动轮流显示8个通道模拟信号的数值;
c.最小分辨率为0.02V;
d.最大显示数值为255;
f.测量电压最大值为5V。

二、总体设计方案
8路输入模拟信号数值显示电路由A/D转换、数据处理及显示控制等组成。

根据设计要求,要求能同时输入8路模拟信号,故在本设计中采用了8路的模数转换器AD0809;由单片机AT89C52提供控制信号控制AD0809,并对采集到的数据进行处理,通过软件编程实现8路模拟信号电压数值自动轮流显示;为得到8路模拟信号的数值进行轮流显示,本设计中采用了四个数码管,通过软件直接译码,间接驱动4个共阳极数码管,并通过动态显示来轮流显示4个数码管。

系统总体框图设计如下图所示:
图一系统总体设计框图
三、硬件电路设计
1、模拟信号采集电路:
模拟信号采集需要用到模数转换器,而ADC0809具有较高的转换速度和精度,分辨率为8位,且受温度影响较小,能较长时间保证精度,重现性好,功耗较低,且具有8路模拟开关,满足本电路的设计要求,故在该电路模块中采用了ADC0809进行8路模拟信号采集,模数转换器ADC0809各引脚功能如图二所示:
IN
7~IN
:8个模拟量输入端;
START:启动信号,当START为高电平时,A/D转换开始;
EOC:转换结束信号,当A/D转换结束后,发出一个正脉冲,表示A/D转换完毕。

此信号可用做A/D转换是否结束的检测信号,或向CPU申请中断的信号;
ENABLE:输出允许信号。

当此信号有效时,允许从A/D转换器的锁存器中读取数字量。

此信号可作为ADC0809的片选信号,高电平有效;
CLOCLK:实时时钟,可通过外接RC电路改变时钟频率;
ALE:地址锁存允许,高电平有效。

当ALE为高电平时,允许C,B,A所示的通道被选中,并把该通道的模拟量接入A/D转换器;
C,B,A:通道号选择端子。

C为最高位,A为最低位;
D 7~D
0:
数字量输出端;
V
REF(+),V
REF(-)
:参考电压端子。

用以提供D/A转换器权电阻的标准电平。

对于一
般单极性模拟量输入信号,V
REF(+)=+5V,V
REF(-)
=0V;
V
CC
:电源端子,接+5V;
GND:接地端。

ADC0809是由单一电源,+5V供电,模拟电压的输入范围为0~5V,故本设计允许输入的模拟电压最大值为5V。

该电路模块的工作过程:第22脚ALE为地址锁存控制,当输入为高电平时,对地址信号进行锁存;6脚START为测试控制,当输入一个2us 宽高电平脉冲时,就开始A/D转换;7脚EOC为A/D转换结束标志,当A/D转换结束时,7脚输出高电平;9脚ENABLE为A/D转换数据输出允许控制,当ENABLE脚为高电平时,A/D转换数据从端口输出;则可读出数据。

ADC0809的转换速度取决于芯片的时钟频率,要求时钟频率范围为:10~1280KHZ,在本设计中我们采用了由单片机ALE脚的六
控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。

在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,为了得到1MHZ的时钟频率,在电路中采用了74LS74带预置和清除端的双D触发器74LS74,通过总原理图的接法,可以得到二分频器,连接至ALE端之后,可以得到满足AD0809转换的时钟脉冲。

74LS74的引脚功能表如下表一所示。

表一 74LS74功能表
单片机的P2口输出控制信号,以此来控制ADC0809的转换。

具体的数据处理过程,将在软件设计中进行详细介绍。

3、数码显示模块电路
根据设计要求,要求自动轮流显示模拟通道数,以及8路模拟电压数值,根据功能要求,结合实际的布局布线复杂程度及调试的难易程度,为简化电路起见,在设计中我们采用了动态显示,并用四个连接的共阳数码管取代了单个的数码管,以做到调试简单,实现容易。

由于根据数码管的参数要求,要求其驱动电流在10MA~20MA 之间,在电路中采用9012三极管进行扩流来驱动四个数码管;在本设计中段码显示是由P0口进行输出,为防止数码管灌入单片机的电流超出了允许的电流范围,在数码管与单片机的P1口之间接入了510欧姆的电阻。

硬件电路图如图所示。

同样为了简化电路,且充分利用单片机的资源,采用了软件译码代替硬件译码的方式,来进行数值显示。

由于人眼的视觉暂留时间为0.1S(100MS),所以每位显示的间隔不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮,在本设计中每位数值的显示时间为1MS,一个通道的数值显示包
图三数码显示模块电路
由于本设计中显示的数值不是实际的模拟电压值,而只是由AD0809采集的到模拟电压显示的二进制数,为使使用者能够通过数值得到实际的模拟电压数值,可以通过下表进行查阅,例如:如果数码管显示的数值为2136,则表示,模拟通道IN2的电压值为由数值量136代表的模拟电压2.6656V。

详细转换情况见附件三。

四、软件设计
1、主程序
当进行一次测量后,将显示出每一通道的A/D转换值。

每个通道的数据显示时间在1s左右。

主程序在调用显示程序和测试程序之间循环,其流程图如图四所示。

2、初始化程序
系统上电时,将70H~77H内存单元清零,P2口置零。

3、显示子程序
采用动态扫描法实现四位数码管的数值显示。

测量所得的A/D转换数据放在70H~77H内存单元中。

测量数据在显示时需经过转换成为十进制BCD码放在78H~7BH 中,其中7BH存放通道标志数。

寄存器R3用来作为8路循环控制,R0用做显示数据地址指针。

4、模数转换测量子程序
模数转换测量子程序是用来控制对0809 8路模拟输入电压的A/D转换,并将对应的数值移入70H~77H内存单元,其程序流程如图五所示。

具体程序清单见附件二。

图四主程序流程图图五 A/D转换测量程序流程图
程序的资源分配:
内部RAM70H~77H是8路模拟信号经过AD转换得到的二进制数存储单元,78H~7BH 是分别作为数码管的的模拟通道数,电压数值的百位、十位、个位。

五、检测与调试
按照总的电路图进行布局和布线,焊接完成之后,进行了系统检测,本电路的检测步骤如下:
a.在通电之前,先检查电源与地端之间的电阻大小,在正常情况下,电阻值为无穷大,但实际情况为几千欧姆。

如果电阻小,则说明电路中存在短路现象,可通
过定点与动点结合的试触法进行测试,检查短路的引脚,并矫正。

b.通电之后,检测单片机是否工作正常,通过检测单片机的30脚ALE看是否有正弦波输出,且其电压值是否为电源电压的一半。

如果单片机没工作,则看振荡电路是否正常,检测18,19脚的电压是否在2.2V左右。

c.检测复位电路是否工作正常,按下复位开关之后,单片机的第9脚是否有高电平。

如果没有,则检查复位电路是否连接正确。

d.检测各集成芯片是否工作正常,即检测各芯片的电源端是否有电压。

经检测完毕无异常情况之后,可以通过烧写器下载程序进行调试。

以下是在本次调试过程当中遇到的问题:
a.数码管只亮了后面两个,经检测数码管是好的,通过检测电路焊接情况,由于存在虚焊的情况,经矫正之后数码管亮了三个,为检查唯一一个不亮的数码管,采用了程序检测与硬件检测相结合的方法,最后得出结论三极管是坏的,换掉三极管之后,数码管工作完全正常。

b.在数码管显示时,发现数码管在初次采样显示为00,经调节程序的顺序并修改,从程序上电之初就开始轮流采集八路模拟电压,通过数码管显示,可以得到标准的电压数值量。

c.为检测得到的电压数值量与其代表的模拟电压是否相一致,用数字电压表测量模拟量与理论计算得到的模拟量进行比较,在开始检测时出现了较大的差值,经过检测发现,电压输入端存在虚焊的现象,经矫正,得到的测量值与理论值之间的误差为0.01左右,满足题目的精度要求。

六、系统改进设想
本设计可进一步进行指标和性能的完善,比如:可以扩大电压的量程范围,可以通过自动量程转换来实现;可以采用C语言来编写,提高显示数值显示精度,并可显示模拟电压的实际值。

七、总结
在本系统的设计制作过程中,经过两人的合作与努力,虽然在设计与制作过程中出现了各种各样的问题和情况,但是我们都能够冷静地进行硬件和软件检测,并针对性地进行纠正,在进行了全面检测及反复调试之后,该系统已经完全实现了所有功能,并达到了预期的所有指标。

参考文献
[1]李朝青.单片机原理及接口技术.北京.1998166。

[2]阎石.数字电子技术基础.北京.1998.12.150。

[3]藩新民,王燕芳.微型计算机控制技术.北京.2005.3.52。

附件二:程序清单
主程序和中断程序入口
ORG 0000H ;程序执行开始地址
LJMP START ;跳至START执行
ORG 0003H ;外中断0中断入口地址
RETI ;中断返回(不开中断)
ORG 000BH ;定时器T0中断入口地址
RETI ;中断返回(不开中断)
ORG 0013H ;外中断1中断入口地址
RETI ;中断返回(不开中断)
ORG 001BH ;定时器T1中断入口地址
RETI ;中断返回(不开中断)
ORG 0023H ;串行口中断入口地址
RETI ;中断返回(不开中断)
ORG 002BH ;定时器T2中断入口地址
RETI ;中断返回(不开中断)
;初始化程序中的各变量
CLEARMEMIO:CLR A ;
MOV P2,A ;P2口置0
MOV R0,#70H ;内存循环清0(70H~7BH)
MOV R2,#0CH
LOOPMEM: MOV @R0,A
INC R0
DJNZ R2,LOOPMEM
MOV A,#0FFH
MOV P0,A ;P0,P1,P3端口置1
MOV P1,A
MOV P3,A
RET ;子程序返回
;主程序
START: LCALL CLEARMEMIO ;初始化
MAIN: LCALL TEST ;测量一次
LCALL DISPLAY ;显示数据一次
AJMP MAIN ;返回MAIN循环
NOP ;PC值出错处理
NOP ;空操作
NOP ;空操作
LJMP START ;重新复位启动
DISPLAY: MOV R3,#08H ;8路信号循环显示控制
MOV R0,#70H ;显示数据初址(70H~77H)
MOV 7BH,#00H ;显示通道路数(0~7)
DISLOOP1: MOV A,@R0 ;显示数据转为三位十进制BCD 码存入
MOV B,#100 ;7AH,79H,78H显示单元内
DIV AB ;显示数据除100
MOV 7AH,A ;商入7AH
MOV A,#10 ;A放入数10
XCH A,B ;余数与数10交换
DIV AB ;余数除10
MOV 79H,A ;商入79H
MOV 78H,B ;余数入78H
MOV R2,#0FFH ;每路显示时间控制4ms*255 DISLOOP2: LCALL DISP ;调四位LED显示程序
DJNZ R2,DISLOOP2 ;每路显示时间控制
INC R0 ;显示下一路
INC 7BH ;通道显示数值加1
DJNZ R3,DISLOOP1 ;8路显示未完转DISLOOP1再循环
RET ;8路显示完子程序结束
;LED共阳显示子程序,显示内容在78H~7BH,数据在P1输出,列扫描在P3.0~P3.3口
DISP: MOV R1,#78H ;赋显示数据单元首址
MOV R5,#0FEH ;扫描字
PLAY: MOV P1,#0FFH ;关显示
MOV A,R5 ;取扫描字
ANL P3,A ;开显示
MOV A,@R1 ;取显示数据
MOV DPTR,#TAB ;取段码表首址
MOVC A,@A+DPTR ;查显示数据对应段码
MOV P1,A ;段码放入P1口
LCALL DL1MS ;显示1ms
INC R1 ;指向下一地址
MOV A,P3 ;取P3口扫描字
JNB ACC.3,ENDOUT ;四位显示完转ENDOUT结束
RL A ;扫描字循环右移
MOV R5,A ;扫描字放入R5暂存
MOV P3,#0FFH ;显示暂停
AJMP PLAY ;转PLAY循环
ENDOUT: MOV P3,#0FFH ;显示结束,端口置1
MOV P1,#0FFH
RET ;子程序返回
;LED数码显示管用共阳段码表,分别对应0~9,最后一个是"熄灭符" TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;1ms延时子程序,LED显示用
DL1ms: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;模数转换测量子程序
TEST: CLR A ;清累加器A
MOV P2,A ;清P2口
MOV R0,#70H ;转换值存放首址
MOV R7,#08H ;转换8次控制
LCALL TESTART ;启动测试
W AIT: JB P3.7,MOVD ;等A/D转换结束后转MOVD AJMP W AIT ;P3.7为0等待
TESTART: SETB P2.3 ;锁存测试通道地址
NOP ;延时2us
NOP
CLR P2.3 ;测试通道地址锁存完毕
SETB P2.4 ;启动测试,发开始脉冲
NOP ;延时2us
NOP
CLR P2.4 ;发启动脉冲完毕
NOP ;延时4us
NOP
NOP
NOP
RET ;子程序调用结束
;取A/D转换数据至70H~77H内存单元
MOVD: SETB P2.5 ;0809输出允许
MOV A,P0 ;将A/D转换值移入A
MOV @R0,A ;放入内存单元
CLR P2.5 ;关闭0809输出
INC R0 ;内存地址加1
MOV A,P2 ;通道地址移入A
INC A ;通道地址加1
MOV P2,A ;通道地址送0809
CLR C ;清进位标志
CJNE A,#08H,TESTCON ;通道地址不等于8转TESTCONT 再测试
JC TESTCON ;通道地址小于8转TESTCONT再测试
CLR A ;大于或等于8,A/D转换结束,恢复端口
MOV P2,A ;P2口置1
MOV A,#0FFH ;
MOV P0,A ;P0置1
MOV P1,A ;P1置1
MOV P3,A ;P3置1
RET ;取A/D转换数据结束
TESTCON: LCALL TESTART ;再发测试启动脉冲
LJMP W AIT ;跳至W AIT等待A/D转换结束信号
END ;程序结束
附件三:数值量模拟量转换对照表(ADC0809的参考电压为5V)
附件四:元件清单
BZ EQU 34H
ORG 0000H
AJMP START
ORG 0030H
START:
MOV 34H,#88H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
ST:ACALL YKJM
MOV A,BZ
CJNE A,#00H,ST1;电源按钮CPL P2.4
SETB P2.5
SETB P2.6
SETB P2.7
CPL P1.2
AJMP ST
ST1:CJNE A,#11H,ST2 CLR P2.4
CLR P2.5
SETB P2.6
SETB P2.7
CLR P1.2
AJMP ST
ST2:CJNE A,#22H,ST3
CLR P2.4
SETB P2.5
CLR P2.6
SETB P2.7
AJMP ST
ST3:CJNE A,#33H,ST
CLR P2.4
SETB P2.5
SETB P2.6
CLR P2.7
AJMP ST
YKJM:
JB P1.0,$;等待遥控信号出现
MOV R6,#9
SB: ACALL YS1;调用882微秒延时子程序
JB P1.0,YK1;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
AJMP YK2
YK1:AJMP YKEND
YK2:DJNZ R6,SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。

JNB P1.0, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码
MOV R1,#30H ;设定1AH为起始RAM区
MOV R2,#4
PP: MOV R3,#8
JJJJ: JNB P1.0,$;等待地址码第一位的高电平信号
LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P1.0;将P3.2引脚此时的电平状态0或1存入C中
JNC UUU;如果为0就跳转到UUU
JB P1.0,$;如果为1就等待高电平信号结束
UUU: MOV A,@R1;将R1中地址的给A
RRC A;将C中的值0或1移入A中的最低位
MOV @R1,A;将A中的数暂时存放在R1中
DJNZ R3,JJJJ;接收地址码的高8位
INC R1;对R1中的值加1,换成下一个RAM
DJNZ R2,PP ;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
;以下对代码是否正确和定义进行识别
;MOV A,1AH;比较高8位地址码
;RL A,#00000000B ;判断1AH的值是否等于00000000,相等的话A为0 ;JNZ EXIT;如果不相等说明解码失败退出解码程序
;MOV A,1BH;比较低8位地址
;XRL A,#11111111B ;再判断高8位地址是否正确
;JNZ EXIT;如果不相等说明解码失败退出解码程序
MOV A,32H;比较数据码和数据反码是否正确?
CPL A
XRL A,33H ;将1CH的值取反后和1DH比较不同则无效丢弃,核对数
据是否准确
JNZ EXIT;如果不相等说明解码失败退出解码程序CLR P3.4;解码成功发光二极管点亮指示!
acall YS2
acall YS2
acall YS2
acall YS2
acall YS2
acall YS2
SETB P3.4
MOV A,32H
;MOV P2,A
CJNE A,#00H,EXIT;电源按钮
MOV BZ,#00
AJMP YKEND
CJNE A,#10H,EXIT;一档
MOV BZ,#11
AJMP YKEND
CJNE A,#11H,EXIT;二挡
MOV BZ,#22
AJMP YKEND
CJNE A,#12H,EXIT;三档
MOV BZ,#33
AJMP YKEND
;判断在118毫秒内是否有连发码
AA:MOV R1,#25
XX:ACALL YS2
JNB P1.0,HH;跳转到判断连发代码是否正确的程序段
DJNZ R1,XX
EXIT:
AJMP YKEND
;连发码判断程序段-----------
HH:MOV R6,#4
S: ACALL YS1;调用882微秒延时子程序
JB P1.0,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R6,S;重复4次,目的是确认连发码的低电平信号波形
JNB P1.0, $ ;等待高电平
AJMP AA
YKEND:RET
YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
END。

相关文档
最新文档