单片机课程设计---基于单片机的数字电压表设计
《单片机原理及应用》
课程设计报告
学 院: 源与动力工程学院__ 班 级:_____建电1001______
学 号:_____101605121______ 姓 名:______刘兹平________
时 间:2012-12-17 ~ 2012-12-21
目 录
任务书 ............................................. 1 第一章 方案设计 .................................... 2 第二章 硬件系统设计 ................................ 3 第三章 软件设计 .................................... 7 第四章 系统调试 ................................... 10 小 结 ............................................ 11 附录1:原理图..................................... 13 附录2:源程序..................................... 14
《单片机原理及应用》课程设计 任务书
1、题 目:基于单片机的数字电压表设计 2、设计要求:
(1)利用单片机及ADC0809构成一个电压采集系统,实现8通道循环采样,循环显示。
(2)显示采用ZLG7290,显示精度到小数点后一位。
第1页 共31页
《单片机原理及应用》课程设计 第一章 方案设计
1、总体设计方案
本设计使用ADC0809对模拟信号进行转换,然后经过AT89C51转换后的结果来进行运算和处理,然后由数码管直接显示数字电压信号,其中分辨率为0.02v。用电位器控制输入电压,经ADC0809模数转换,然后数据被单片机采集,并经过单片机利用相应的算法进行调整,最后利用串口将处理好的数据输出至数码管。其中ADC0809通过IN0~IN7采集模拟电压信号送给单片机,单片机将采集来的信号通过一定的处理然后通过串口输出至共阳极的LED数码管显示采集到的电压值。 2、总体设计框图
时钟AT89C51 P1 A/D转显示测量电复位第2页 共31页
《单片机原理及应用》课程设计 第二章 硬件系统设计
1、硬件系统设计思路
8路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显示电路
等组成。ADC0809具有8路模拟量输入通道IN0---IN7,通过3位地址输入端C、B、A(引脚23--25)进行选择。引脚22为地址锁存控制端ALE,当输入为高电平时,C、B、A引脚输入的地址锁存于ADC0809内部是锁存器中,经内部译码电路译码选中相应的模拟通道。引脚6为启动转换控制端START,当输入一个2μs宽的高电平脉冲时,就启动ADC0809开始对输入通道的模拟量进行转换。引脚7为A/D转换器,当开始转换时,EOC信号为低电平,经过一段时间,转换结束,转换结束信号EOC输出高电平,转换结果存放于ADC0809内部的输出数据寄存器中。引脚9脚为A/D转换数据输出允许控制端OE,当OE为高电平时,存放于输出数据锁存器中的数据通过ADC0809的数据线D0—D7输出。引脚10为ADC0809的时钟信号输入端CLOCK。在连接时,ADC0809的数据线D0—D7与AT89S52的P0口相连接,ADC0809的地址引脚、地址锁存端ALE、启动信号START、数据输出允许控制端OE分别与AT89S52的P2口相连接,转换结束信号EOC与AT89S52的P3.7相连接。时钟信号输入端CLOCK
第3页 共31页
《单片机原理及应用》课程设计 信号,由单片机的地址锁存信号ALE得到。 2、模块分析
(1)AT89C51单片机
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/ 地址的第八位。在这里P0口作为输入与输出分别与ADC0808的输出端和LCD显示的输入端相连,且P0外部被阻值为1KΏ的电阻拉高。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。这里只用到了P2.0~P2.3四个端口,其中P2.1~P2.3都是作为输出端口控制显示电路的寄存器选择、读写信号和使能端口。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可
第4页 共31页
《单片机原理及应用》课程设计 接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,在这里用到了P3.3 /INT1(外部中断1)、 P3.6 /WR(外部数据存储器写选通)、P3.7 /RD(外部数据存储器读选通)。 (2)A/D转换
IN0~IN7为8路模拟量输入端,这里只接一路电压信号,其输入信号是由直流电源及可调电阻提供。
OUT1~OUT8为8位二进制数字量输出端,其另一端连接到AT89C51单片机进行数值转换。
ADDA、ADDB、ADDC为3位片选地址输入线,用于选通8路模拟输入中的一路。
ALE为地址锁存允许信号,由单片机P3.6口写信号与P2.0口相或取反输入,高电平有效。
START为 A/D转换启动脉冲输入端,由单片机P3.6口写信号与P2.0口相或取反输入一个正脉冲使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
EOC为 A/D转换结束信号,当A/D转换结束时,此端输出一个高电平取反给P3.3口(转换期间一直为低电平)。
第5页 共31页
《单片机原理及应用》课程设计 OE为数据输出允许信号,高电平有效。当A/D转换结束时,此端由单片机P3.7读信号与P2.0口相或后取反输入一个高电平,才能打开输出三态门,输出数字量。 (3)显示电路
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。由单片机P2.1口控制
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电
平R/W为低电平时可以写入数据。由单片机P2.2口控制 E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。由单片机P2.3口控制
D0~D7为8位双向数据线。由单片机P0口输入,经过阻值为1KΏ的上拉电阻连接。
第6页 共31页
《单片机原理及应用》课程设计 第三章 软件设计
1、设计说明
本实验采用AT89C51 单片机芯片配合 ADC0809 模/数转换芯片构成一个简 易的数字电压表,原理电路如图1-1 所示。该电路通过 ADC0809 芯片采样输入口 AI0 输入的0~5V 的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7 传送给 AT89C51 芯片的F0口。AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过P1 口传送给数码管。同时它还通过其三位 I/O 口 P3.0、P3.1、P3.2 产生位片选信号,控制数码管的亮灭。另外,AT89C51 还控制着 ADC0809 的工作。其ALE管脚为 ADC0809提供了 1MHZ 工作的时钟脉冲;P2.3 控制 ADC0809 的地址锁存端(ALE); P2.4 控制 ADC0809 的启动端(START); P2.5 控制 ADC0809 的输出允许端(OE); P3.7 控制 ADC0809 的转换结束信号(EOC)。 2、主程序设计
主程序包含初始化部分、调用A/D转换子程序和调用显示程序,如图所示。初始化部分包含存放通道数据缓冲区初始化和显示缓冲区初始化。
第7页 共31页
《单片机原理及应用》课程设计
3、A/D转换子程序设计
A/D转换子程序用于对ADC0809的8路输入模拟电压进行A/D转换,并将转换的数值存入8个相应的存储单元中,如图所示。A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次。
第8页 共31页
《单片机原理及应用》课程设计
4、显示子程序设计
显示子程序采用动态扫描法实现八位数码管的数值显示。高位数码管显示通道数,低两位显示所测电压数值。测量所得的A/D转换数据放在70H内存单元中,测量数据在显示时需转换成10进制BCD码放在66H~6DH单元中。寄存器R1用作显示数据地址指针。
第9页 共31页
《单片机原理及应用》课程设计 第四章 系统调试
1、由于单片机为8位处理器,当输入电压为5.00V时,输出数据值为255(FFH)因此单片机最大的数值分辨率为0.0196V(5/255)。这就决定了该电压表的最大分辨率(精度)只能达到0.0196V。测试时电压数值的变化一般以0.02的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A/D转换器或者使用双字节指令。
2、由于实验箱只有两个电位器接口,因此要实现八通道,可通过其它不用接线口串联实现等电位,进而实现模拟电压八通道输入。
3、当显示过快时可通过改变程序设置跳转时间,可便于观察。
第10页 共31页
《单片机原理及应用》课程设计 小 结
经过一个多星期的不断学习、不断尝试、不断提问,单片机课程设计终于完成了。课题不是很难,但是由于是第一次接触这种类型的学习过程,所以一开始效率有点低,主要是无从下手,不知该做什么。课程设计前一天我在网上搜索了很多关于课题的文档资料,有一定参照作用,但是也有很多不同之处,比如选用的单片机器件、A/D转换器件或者显示器件的不同,往往会令我在设计时不知如何正确接线。
本次课程设计是理论与实践相结合的一次实用性学习,要学会学以致用,将所学知识用到实处。这在编程调试时尤其突出重要,比如小数点的显示,精度的提高,误差的减小,这些内容一部分取决于器件的优劣,还有一部分来自于程序设计的好坏。所以,熟练汇编语言,熟练编程是我从此次课程设计中得到的一个重要启示,因为这将是我们将来学以致用的关键。
我的课题虽然是基于单片机的数字电压表设计,但是实际上就是一个数据采集的程序设计,只不过这里数据采集的是模拟电压罢了,采集后的数据然后通过ZLG7290显示出来。显示程序来源于以前的实验,我的U盘里面正好有,因此节省了不少力气。其次在调试程序仿真时,需要认真仔细,随机应变。 课程设计时间虽短暂,却是另一种完全不同的学习过程,它让
第11页 共31页
《单片机原理及应用》课程设计 我意识到理论联系实践的重要性以及应用时可能会出现很多意想不到的问题,这些东西不是书本上的知识可以学到的,而要通过实践不断积累经验,不断虚心请教和学习才能真正掌握的,因此以后要积极实验、实践,认真学习这些课本之外的东西。总的来说,课程设计还是让我学到了不少新知识,也有不少新领悟,当然,对单片机也有了更深层次的认识,也让我对单片机有了更高的兴趣,希望学到更多关于单片机的知识,做更多的实践内容。
第12页 共31页
《单片机原理及应用》课程设计 附录1:原理图
第13页 共31页
《单片机原理及应用》课程设计 附录2:源程序
SDA BIT P3.0 ;I2C总线定义 SCL BIT P3.1 RST BIT P1.7
MTD EQU 63H ;发送数据缓冲器 ZLG7290 EQU 70H ;ZLG7290的器件地址
ACK BIT 10H ;应答标志位 SLA DATA 60H ;器件的从地址 SUBA DATA 61H ;器件的子地址 NUMBYTE DATA 62H ;读/写的字节数变量
ORG 00H SJMP MAIN
ORG 00BH LJMP INT_T0
第14页 共31页
《单片机原理及应用》课程设计 ORG 0003H LJMP INT_EX0
ORG MAIN: MOV MOV MOV MOV MOV MOV 030H
MOV SP,#70H R2,#08H
MOV TMOD, #01H MOV TL0, #0B0H MOV TH0, #3CH SETB EX0 SETB IT0 SETB ET0 SETB EA SETB TR0 66H,#0 67H,#0 68H,#0 69H,#0 6AH,#0
第15页 共31页
《单片机原理及应用》课程设计 MOV 6BH,#0 MOV 6CH,#0 MOV 6DH,#0 MOV R1,#30H MOV R7,#20 SJMP $
INT_T0: MOV TL0, #0B0H MOV TH0, #3CH MOV DPTR,#0000H MOVX @DPTR,A MOV R0,#30H MOV A,@R1 MOV B,#5 DIV AB MOV B,#10 DIV AB MOV 66H,B MOV B,#10 DIV AB
第16页 共31页
《单片机原理及应用》课程设计 MOV 67H,B ORL 67H,#80H MOV 68H,A MOV 6DH,R1 ANL 6DH,#07H LCALL LEDDISP DJNZ R7,T0_END MOV R7,#20 INC R1
CJNE R1,#38H,T0_END MOV R1,#30H T0_END: RETI
INT_EX0:MOVX A,@DPTR MOV @R0,A INC DPTR INC R0
CJNE R0,#38H,LOP RETI
LOP: MOVX @DPTR,A
第17页 共31页
《单片机原理及应用》课程设计 RETI
leddisp:push psw push acc setb rs1 setb rs0 mov r0,#66H mov r4,#8 mov r5,#60h loop: MOV MTD,R5 MOV MTD+1,@R0 MOV SLA,#70H MOV SUBA,#07H MOV NUMBYTE,#02H LCALL IWRNBYTE LCALL DELY1 INC R0 INC R5 DJNZ R4,LOOP POP ACC
第18页 共31页
《单片机原理及应用》课程设计 POP PSW RET
re7290: clr rst lcall dely setb rst lcall dely ret
dely :mov r7,#80H min :djnz r7,ys500 ret
ys500 :lcall ys500us ljmp min ys500us:mov r6,#80h djnz r6,$ ret
dely1 :mov r7,#40h djnz r7,$
第19页 共31页
《单片机原理及应用》课程设计 ret
;启动I2C总线子程序 START: nop nop nop
SETB SDA NOP
SETB SCL 条件建立时间大于4.7us NOP NOP NOP NOP NOP
CLR SDA NOP 件锁定时大于4us NOP NOP
第20页 共31页
;起始起始条
;《单片机原理及应用》课程设计 NOP NOP
CLR SCL 总线,准备发数据 NOP nop nop RET
;结束总线子程序 STOP: NOP NOP NOP CLR SDA NOP
SETB SCL 结束条件的时钟信号
NOP 线时间大于4us
NOP
第21页 共31页
;钳住 ;发送;结束总《单片机原理及应用》课程设计 NOP NOP NOP
SETB SDA ;结束总线
NOP ;保证一个终止信号和起始信号的空闲时间大于4.7us NOP NOP NOP nop nop RET
;检查应答位子程序
;返回值,ACK=1时表示有应答 CACK: NOP NOP NOP
第22页 共31页
《单片机原理及应用》课程设计 SETB SDA NOP NOP SETB SCL CLR ACK NOP NOP
MOV C,SDA JC CEND
SETB ACK 判断应答位 CEND: NOP CLR SCL NOP nop nop RET
;发送字节子程序
第23页 共31页
;《单片机原理及应用》课程设计 ;字节数据放入ACC
;每发送一字节要调用一次CACK子程序,取应答位 WRBYTE: MOV R7,#08H
WLP: RLC A 数据位
JC WR1
SJMP WR0 判断数据位
WLP1: DJNZ R7,WLP NOP RET
WR1: SETB SDA 发送1 NOP SETB SCL NOP NOP NOP NOP
第24页 共31页
取 ; ; ; 《单片机原理及应用》课程设计 NOP CLR SCL SJMP WLP1
WR0: CLR SDA ;发送0 NOP SETB SCL NOP NOP NOP NOP NOP CLR SCL SJMP WLP1
;向器件指定子地址写N字节数据
;入口参数: 器件从地址SLA、器件子地址SUBA 、发送数据缓冲区MTD、发送字节数NUMBYTE
第25页 共31页
《单片机原理及应用》课程设计 ; 占用: A 、R0 、R1 、R3 、CY IWRNBYTE: MOV A,NUMBYTE MOV R3,A
LCALL START 起动总线
MOV A,SLA
LCALL WRBYTE ;发送器件从地址 LCALL CACK
JNB ACK,RETWRN 无应答则退出
MOV A,SUBA 指定子地址
LCALL WRBYTE LCALL CACK MOV R1,#MTD WRDA: MOV A,@R1
LCALL WRBYTE ;开始写入数据
LCALL CACK
第26页 共31页
;;;《单片机原理及应用》课程设计 JNB ACK,IWRNBYTE INC R1
DJNZ R3,WRDA ;判断写完没有
RETWRN: LCALL STOP RET
第27页 共31页
因篇幅问题不能全部显示,请点此查看更多更全内容