单片机/微机接口课程设计说明书题目: 8路输入模拟信号数值显示电路设计系部:信息与控制工程学院专业:电子信息工程班级:学生姓名:学号:指导教师:2010年6 月21 日目录1 设计任务与要求 (1)2 设计方案 (2)3 系统硬件电路设计 (3)3.1模拟信号采集电路 (3)3.2数字处理模块电路 (3)3.3数码显示模块电路 (4)4 系统软件设计 (5)4.1初始化程序 (5)4.2主程序 (5)4.3显示子程序 (5)4.4模数转换测量子程序 (5)5 检测与调试 (7)6 设计结论 (8)7 附录 (9)附录一系统总设计图 (9)附录二程序清单 (9)8 参考文献 (14)1 设计任务与要求设计一个8路输入模拟信号数值显示电路,具体要求如下:1.1 8路模拟信号输入;1.2 自动轮流显示通道模拟信号的数值;1.3 最小分辨率为0.02V;1.4 最大显示数值为255(输入为5V时);1.5 模拟输入最大值为5V;1.6 可作为数字电压表使用。
2 设计方案8路输入模拟信号数值显示电路由A/D转换、数据处理及显示控制等组成。
根据设计要求,要求能同时输入8路模拟信号,故在本设计中采用8路的数模转换器ADC0809。
由单片机AT8952提供控制信号控制ADC0809,并对采集到的数据进行处理,通过软件编程实现8路模拟信号电压数值自动轮流显示。
为得到8路模拟信号的数值进行轮流显示,本设计中采用了四个数码管,通过软件直接译码,间接驱动4个共阳极数码管,并通过动态显示来轮流显示4个数码管。
系统总体框图设计如图一所示:图一系统总体设计框图3 系统硬件电路设计3.1 模拟信号采集电路模拟信号的采集需要用的模数转换器,在本设计中A/D转换由集成电路ADC0809完成。
0809具有8路模拟输入端口,地址线(23-25脚)可决定对哪一路模拟输入作A/D转换,22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。
6脚为测试控制,当输入一个2μS宽高电平脉冲时,就开始A/D转换。
7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。
9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从端口输出。
10脚为0809的时钟输入端,利用单片机30脚的六分频晶振信号再通过14024二分频得到。
模数转换器0809各引脚及功能如图二所示:图二模拟信号采集电路3.2 数字处理模块电路该电路主要完成将接收到的0809转换输出的二进制数值进行BCD码的转换,并根据设计要求完成8路数值轮流显示的功能,故需要借助单片机来完成编程工程。
在本设计中,采用AT89C52单片机。
单片机的P1、P3端口作四位LED数码管显示控制,P0端口作A/D转换数据读入用,P2端口用作0809的A/D转换控制。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,为了得到实验所需的时钟频率,在电路中采用了带预置和清除端的双D触发器74LS74,通过总原理图的接法,可以得到二分频,连接到ALE端之后,可以得到满足0809转换的时钟脉冲。
74LS74的引脚功能表如下表一所示。
表一 74LS74引脚功能表3.3 数码显示模块电路根据设计要求,要求自动轮流显示模拟通道数,以及8路模拟电压数值,在本设计中采用了动态显示,并用四个连接的共阳数码管取代单个的数码管。
根据数码管的参数要求,在电路中采用三极管进行扩流来驱动四个数码管。
同时为防止数码管灌入单片机的电流超出允许的电流范围,在数码管与单片机的P1口之间接入510欧姆的电阻。
该模块的电路图如图三所示:图三数码显示模块电路4 系统软件设计4.1 初始化程序系统上电时,将70H—77H内存单元清零,P2口置零。
4.2 主程序在刚上电时,因内存70H—77H内存单元的数据为0,每一通道的数码管显示值都为000,当进行一次测量后,将显示出每一通道的A/D转换值。
每个通道的数据显示时间在1秒左右。
主程序在调用显示程序和测试程之间循环(流程图见图四)。
图四主程序流程图4.3 显示子程序采用动态扫描法实现四位数码管的数值显示。
测量所得的A/D转换数据放在70H —77H内存单元中,测量数据在显示时需经过转换成为十进制BCD码放在78H—7BH 中,其中7BH存放通道标志数。
寄存器R3用来作8路循环控制,R0用作显示数据地址指针。
4.4 模数转换测量子程序模数转换测量子程序是用来控制对0809八路模拟输入电压的A/D转换并将对应的数值移入70H-77H内存单元。
其程序流程见图五所示:图五 A/D转换测量程序流程图5 检测与调试按照总的电路图进行布局和布线,焊接完成之后,进行了系统检测。
本设计的电路检测步骤如下:a.在通电之前,先检查电源也地段之间的电阻大小,在正常情况下,电阻值为无穷大,但实际情况为几千欧姆。
如果电阻过小,则说明电路中存在短路现象,可通过定点和动点结合的试触发进行检测,检查短路的引脚,并矫正。
b.通电之后,检测单片机是否工作正常,通过检测单片机的30脚ALE看是否有正弦波输出,且其电压值是否为电源电压的一半。
如果单片机没有工作,则看振荡电路是否正常,检测18,19脚的电压是否在2.2V左右。
c.检测复位电路是否工作正常,按下复位开关之后,单片机之后,单片机的第9脚是否有高电平。
如果没有,则检查复位电路是否连接正确。
d.检测个集成芯片是否工作正常,即检测各芯片的电源端是否有电压。
经检测完毕无异常情况之后,可以通过烧写器下载程序进行调试。
以下是在本次调试过程中遇到的问题:a.数码管只亮了后面的两个,经检测数码管是好的,通过检测电路焊接情况,由于存在虚焊的情况,经矫正之后数码管亮了三个,为检查不亮的数码管,采用了程序检测与硬件检测相结合的方法,最后得出结论三极管是坏的,换掉坏的三接管后,数码管工作完全正常。
b.在数码管显示时,发现数码管在初次采样显示为00,经调节程序的顺序并修改,从程序上电之初就开始轮流采集8路模拟电压,通过数码管显示,可以得到标准的电压数值量。
c.为检测得到的电压数值量与其代表的模拟电压是否相一致,用数字电压表测量模拟量与理论计算得到的模拟量进行比较,在开始检测时出现了较大的差值,经过检测发现电压输入端存在虚焊的现象,经矫正得到的测量值与理论值之间的误差满足题目的精度要求。
6 设计结论本设计可进一步进行指标和性能的完善,比如可以扩大电压的量程范围,可以通过自动量程转换实现;可以采用C语言来编写程序,提高显示数值显示精度,并可显示模拟电压的实际值。
在本系统的设计制作过程中,经过本组成员的合作与努力,虽然在设计与制作过程中出现了各种各样的问题和情况,但在我们的努力以及老师的指导下都能将将问题针对性的进行纠正,在经过了全面检测及反复调试之后,该系统已经完全实现了所要求的功能,达到了预期的所有指标。
7 附录附录一系统总设计图图六 8路输入模拟信号数值显示电路附录二程序清单70H—77H存放采样值,78H—7BH存放显示数据,依次为个位、十位、百位、通道标志主程序和中断程序入口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口置0MOV 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端口置1MOV P1,A ;MOV P3,A ;RET ;子程序返回;主程序START: LCALL CLEARMEMIO ;初始化MAIN: LCALL DISPLAY ;显示数据一次LCALL TEST ;测量一次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 ;显示数据除100MOV 7AH,A ;商入7AHMOV A,#10 ;A放入数10XCH A,B ;余数与数10交换DIV AB ;余数除10MOV 79H,A ;商入79HMOV 78H,B ;余数入78HMOV R2,#0FFH ;每路显示时间控制 4MS*255 DISLOOP2: LCALL DISP ;调四位LED显示程序DJNZ R2,DISLOOP2 ;每路显示时间控制INC R0 ;显示下一路INC 7BH ;通道显示数值加1DJNZ 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 ;显示1MSINC 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 ;显示结束,端口置1MOV 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,#19HDL2: DJNZ R7,DL2DJNZ R6,DL1RET;模数转换测量子程序TEST: CLR A ;清累加器AMOV P2,A ;清P2口MOV R0,#70H ;转换值存放首址MOV R7,#08H ;转换8次控制LCALL TESTART ;启动测试WAIT: JB P3.7,MOVD ;等A/D转换结束信号后转MOVDAJMP WAIT ;P3.7为0等待;TESTART: SETB P2.3 ;锁存测试通道地址NOP ; 延时2微秒NOP ;CLR P2.3 ;测试通道地址锁存完毕SETB P2.4 ; 启动测试,发开始脉冲NOP ; 延时2微秒NOP ;CLR P2.4 ; 发启动脉冲完毕NOP ;延时4微秒NOP ;NOP ;NOP ;RET ;子程序调用结束;取A/D转换数据至70H-77H内存单元MOVD: SETB P2.5 ;8090输出允许MOV A,P0 ;将A/D转换值移入AMOV @R0,A ;放入内存单元CLR P2.5 ;关闭8090输出INC R0 ;内存地址加1MOV A,P2 ;通道地址移入AINC A ;通道地址加1MOV P2,A ; 通道地址送8090CLR C ;清进位标志CJNE A,#08H,TESTCON ; 通道地址不等于8转TESTCONT 再测试JC TESTCON ; 通道地址小于8转TESTCONT再测试CLR A ; 大于或等于8,A/D转换结束,恢复端口MOV P2,A ; P2口置0MOV A,#0FFH ;MOV P0,A ; P0口置1MOV P1,A ; P1口置1MOV P3,A ; P3口置1RET ; 取A/D转换数据结束TESTCON: LCALL TESTART ; 再发测试启动脉冲LJMP WAIT ; 跳至WAIT等待A/D转换结束信号;END ; 程序结束8 参考文献[1] 李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版,2005[2] 阎石.数字电子技术基础[M].北京:高等教育出版社,1998[3] 邹逢兴.微型计算机原理与接口技术[M].长沙:国防科技大学出版社[4] 穆兰.单片微型计算机原理及接口技术[M].北京:机械工业出版社[5] 李东升等《Protel 99SE 电路设计技术入门与应用》电子工业出版社。