AT89C51单片机时钟电路.docx
- 文档编号:24168780
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:40
- 大小:373.14KB
AT89C51单片机时钟电路.docx
《AT89C51单片机时钟电路.docx》由会员分享,可在线阅读,更多相关《AT89C51单片机时钟电路.docx(40页珍藏版)》请在冰豆网上搜索。
AT89C51单片机时钟电路
工程设计
AT89C51单片机时钟电路
工程设计
任务书
摘要
前言
说明书
第一章电路原理分析
1-1显示原理
1-2数码管结构及代码显示
1-3键盘及读数原理
1-4连击功能的实现
第二章程序设计思想和相关指令介绍
2-1数据与代码转换
2-2计时功能的实现与中断服务程序
2-3时间控制功能与比较指令
2-4时钟误差的分析
附录A电路图
附录B存储单元地址表
附录C输入输出口功能分配表
附录D定时中断程序流程图
附录F调时功能流程图
附录G程序清单
摘要
单片计算机即单片微型计算机。
(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。
他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。
而51单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
前言
本文通过用对一个能实现定时,时钟,日历显示功能的时间系统的设计学习,详细介绍了51单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理、从而达到学习,了解单片机相关指令在各方面的应用。
系统由AT89C51、LED数码管、按键、二极管等部分构成,能实现时钟日历的功能:
能进行时、分、秒的显示。
也具有日历计算、显示和时钟,日历的校准、定时时间的设定,实现三路开关定时输出等功能。
文章后附有电路图,程序清单,各数据存储单元的所在地址,输入输出口对应表。
以供读者参考。
因作者本人也是个初学者,水平有限,难免有疏落不足之处,敬请老师和同学能给与批评正。
说明书
系统由AT89C51、LED数码管、按键、发光二极管等部分构成,能实现时间的调整、定时时间的设定,输出等功能。
系统的功能选择由SB0、SB1、SB2、SB3、SB4完成。
其中SB0为时间校对,定时器调整功能键,按SB0进入调整状态。
SB1为功能切换键。
第一轮按动SB1依次进入一路、二路、三路定时时间设置提示程序,按SB3进入各路定时调整状态。
定时时间到,二极管发亮。
到了关断时间后灭掉。
如果不进入继续按SB1键,依次进入时间¡年¡位校对、¡月¡位校对、¡日¡位校对、¡时¡位校对、¡分¡位校对、¡秒¡位校对状态。
不管是进入那种状态,按动SB2皆可以使被调整位进行不进位增量加1变化。
各预置量设置完成后,系统将所有的设置存入RAM中,按SB1退出调整状态。
上电后,系统自动进入计时状态,起始于¡00¡时¡00¡分。
SB4为年月日显示转换键,可使原来显示时分秒转换显示年月日。
二、电路原理分析
1.显示原理
电原理图见附图1。
由6个共阴极的数码管组成时、分、秒的显示。
P0口的8条数据线P0.0至P0.7分别与两个CD4511译码的ABCD口相接,P2口的P2.0至P2.2分别通过电阻R10至R13与VT1至VT3的基极相连接。
这样通过P0口送出一个存储单元的高位、低位BCD显示代码,通过P2口送出扫描选通代码轮流点亮LED1至LED6,就会将要显示的数据在数码管中显示出来。
从P0口输出的代码是BCD码,从P2口输出的就是位选码。
2.数码管结构及代码显示
共阴LED数码管由8只发光二极管VD1至VD8共阴连接并按¡8¡字形结构排列而成。
这样,我们将这些二极管的正极接高低不同的电位,把所有的负极接地,当正极为高电位时相应的二极管就会导通而发光,从而使数码管呈现不同的字符。
而只有P2相应呈现高电位,VT个管导通,LED1的GND与地相接,LED位被选中才具备发光的使能条件;可见,在利用P2口送出位选码,使各位轮流得到发光使能条件的同时,通过P0口分别送出不同的段选码,就会在LED1至LED4中显示出不同的数字来。
CD4511是一个用于驱动共阴极LED(数码管)显示器的BCD码—七段码译码器,特点如下:
具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。
可直接驱动LED显示器。
CD4511是一片CMOSBCD—锁存/7段译码/驱动器,引脚排列如图2所示。
其中abcd为BCD码输入,a为最低位。
LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码“8”,各笔段都被点亮,以检查显示器是否有故障。
BI为消隐功能端,低电平时使所有笔段均消隐,正常显示时,B1端应加高电平。
另外CD4511有拒绝伪码的特点,当输入数据越过十进制数9(1001)时,显示字形也自行消隐。
LE是锁存控制端,高电平时锁存,低电平时传输数据。
a~g是7段输出,可驱动共阴LED数码管。
另外,CD4511显示数“6”时,a段消隐;显示数“9”时,d段消隐,所以显示6、9这两个数时,字形不太美观图3是CD4511和CD4518配合而成一位计数显示电路,若要多位计数,只需将计数器级联,每级输出接一只CD4511和LED数码管即可。
所谓共阴LED数码管是指7段LED的阴极是连在一起的,在应用中应接地。
限流电阻要根据电源电压来选取,电源电压5V时可使用300Ω的限流电阻。
用CD4511实现LED与单片机的并行接口方法如下图:
(略)
CD4511引脚图
其功能介绍如下:
BI:
4脚是消隐输入控制端,当BI=0时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。
LT:
3脚是测试输入端,当BI=1,LT=0时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8”。
它主要用来检测数码管是否损坏。
LE:
锁定控制端,当LE=0时,允许译码输出。
LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。
A1、A2、A3、A4、为8421BCD码输入端。
a、b、c、d、e、f、g:
为译码输出端,输出为高电平1有效。
CD4511的内部有上拉电阻,在输入端与数码管笔段端接上限流电阻就可工作
1.CD4511的引脚
CD4511具有锁存、译码、消隐功能,通常以反相器作输出级,通常用以驱动LED。
其引脚图如3-2所示。
各引脚的名称:
其中7、1、2、6分别表示A、B、C、D;5、4、3分别表示LE、BI、LT;13、12、11、10、9、15、14分别表示 a、b、c、d、e、f、g。
左边的引脚表示输入,右边表示输出,还有两个引脚8、16分别表示的是VDD、VSS。
2.CD4511的工作原理
CD4511的工作真值表如表3-2锁存功能
译码器的锁存电路由传输门和反相器组成,传输门的导通或截止由控制端LE的电平状态。
当LE为“0”电平导通,TG2截止;当LE为“1”电平时,TG1截止,TG2导通,此时有锁存作用。
如图3-3
(3)译码
CD4511译码用两级或非门担任,为了简化线路,先用二输入端与非门对输入数
据B、C进行组合,得出
、
、
、
四项,然后将输入的数据A、D一起用或非门译码。
(4)消隐
BI为消隐功能端,该端施加某一电平后,迫使B端输出为低电平,字形消隐。
消隐控制电路如图3-4所示。
消隐输出J的电平为 J=
=(C+B)D+BI
如不考虑消隐BI项,便得J=(B+C)D据上式,当输入BCD代码从1010---1111时,J端都为“1”电平,从而使显示器中的字形消隐。
输 入
输 出
LE
BI
LI
D
C
B
A
a
b
c
d
e
f
g
显示
X
X
0
X
X
X
X
1
1
1
1
1
1
1
8
X
0
1
X
X
X
X
0
0
0
0
0
0
0
消隐
0
1
1
0
0
0
0
1
1
1
1
1
1
0
0
0
1
1
0
0
0
1
0
1
1
0
0
0
0
1
0
1
1
0
0
1
0
1
1
0
1
1
0
1
2
0
1
1
0
0
1
1
1
1
1
1
0
0
1
3
0
1
1
0
1
0
0
0
1
1
0
0
1
1
4
0
1
1
0
1
0
1
1
0
1
1
0
1
1
5
0
1
1
0
1
1
0
0
0
1
1
1
1
1
6
0
1
1
0
1
1
1
1
1
1
0
0
0
0
7
0
1
1
1
0
0
0
1
1
1
1
1
1
1
8
0
1
1
1
0
0
1
1
1
1
0
0
1
1
9
0
1
1
1
0
1
0
0
0
0
0
0
0
0
消隐
0
1
1
1
0
1
1
0
0
0
0
0
0
0
消隐
0
1
1
1
1
0
0
0
0
0
0
0
0
0
消隐
0
1
1
1
1
0
1
0
0
0
0
0
0
0
消隐
0
1
1
1
1
1
0
0
0
0
0
0
0
0
消隐
0
1
1
1
1
1
1
0
0
0
0
0
0
消隐
1
1
1
X
X
X
X
锁 存
锁存
表3-2CD4511的真值表
8421BCD码对应的显示见下图 :
选用共阴极数码管,对于CD4511,它与数码管的基本连接方式如下图:
3键盘及读数原理
键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。
可采用软件去
抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间20ms.
4连击功能的实现
按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应
的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。
利用连击功能,能实现快速调时操作。
三、程序设计思想和相关指令介绍
本系统的主程序主要完成时间显示和定时输出判断功能。
而年月日显示和各时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。
1.数据与代码转换。
由前述可知,从P2口输出位选码,从P0口输出段选码,LED就会显示出数字来。
但P0口的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。
可见,将要显示的存储单元的数据直接送到P0口去驱动LED数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码行转换后,将各个单元数据的段选代码送入P0口,给CD4511译码后去驱动数码管显示。
具体转换过程如下:
我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码,再放回A中,然后将A中的值输出。
如:
有一个单元存储了45这样一位数,则需转换成四位的BCD码:
(0100)(0101)然后放入A中。
A中BCD码,高位四位代表¡4¡低四位代表¡5¡同时送给两个译码器中,译码后¡45¡字就在两个LED中显示出来。
2.计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。
计数器T0打开后,进入计时,满100毫秒后,重装定时。
中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。
这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,实现时钟计时功能。
累加是用指令INC来实现的。
进入中断服务程序以后,执行PUSHPSW和PUSHA将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的¡保护现场¡.以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。
在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取与一般的RAM存取又有区别,对它的操作,要遵循¡后进先出¡的原则。
3时钟误差分析
开启定时器/计数器0,使之开始计时,中断后进入中断程序。
自停止计数到、计数又开始,中间执行了7条指令,也就是延迟了13个单周期共用时间26us,这样,每个中断的总时间应为为100.026sm,而原来定时是100ms,,所以,也就是说每次中断定时多了26um.这样,可改变计数重装值,使每次中断定时时间为99.974sm,加上原来的7条指令所用的时间,正好100sm.计数10次得1s.这样就可得到较精确的计时秒数,然后根据进率,得到
时、分的值。
4时间控制功能与比较指令
系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:
先将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条CLR指令,将对应的那路P3置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB对应的P3置低电位,二极管截止,。
实现此控制功能用到的比较指令为CJNEA,#direct,rel,其转移条件是累加器A中的值与立即数不等则转移。
参考文献
1、谢自美,《电子线路设计、实验、测试》武汉:
华中理工大学出版社,2000
2、何书森、何华斌《实用数字电路原理与设计速成》福州:
福建科学技术出版社,2000.6
3、白驹衍,《单片计算机及应用》北京:
电子工业出版社,1999.2
定时中断程序流程图
程序
SECEQU32H;秒即时时间\伪指令
MINEQU31H;分
HOUREQU30H;时
DAYEQU35H;日
MONEQU34H;月
YEAREQU33H;年
MIN_1EQU41H;分定时器1路、开存储单元
HOUR_1EQU42H;时
DAY_1EQU43H;
MON_1EQU44H;
YEAR_1EQU45H;
MIN_11EQU40H;分定时器1路、关存储单元
HOUR_11EQU46H;时
DAY_11EQU47H;日
MON_11EQU48H;月
YEAR_11EQU49H;年
;***********************
ORG0000H
ljmpMAIN
ORG0003H;中断转换显示年月日、INT0(SB4键)
LJMPSHOW
ORG000BH;计数中断T0、方式1
LJMPTIME
ORG0013H
LJMPCHANGE;调整时间、定时、INT1(SB0键)
;------主程序
ORG0030H
MAIN:
;--------初始化付值
MOVYEAR,#02
MOVMON,#05
MOVDAY,#01
MOVHOUR,#00
MOVMIN,#00
MOVSEC,#00
CLR40H;定时单元1路清零
CLR41H
CLR42H
CLR43H
CLR44H
CLR45H
CLR46H
CLR47H
CLR48H
CLR49H
;-------开中断
MOVTMOD,#01H;计数、模式1、T0
MOVTL0,#0B0H;100SM计数定时
MOVTH0,#3CH;
clrp3.0
MOV20H,#0AH;10次*100SM
SETBPT0;T0为最高级
SETBTR0;允许计数
SETBET0;允许T0中断
SETBEX0;允许INT0中断
SETBEX1;允许INT1中断
SETBEA;开总中断
;------显示、定时器启动判断
LOOP:
MOVR1,#30H;存储单元
MOVR4,#01H;位选通
MOVR3,#03H;三组显示
NEXT:
MOVA,@R1;
MOVB,#10;将存储单元转换成两高低两组的BCD码
DIVAB
SWAPA
ORLA,B
MOVP0,A;输出
MOVP2,R4
INCR1;下一单元
MOVA,R4;
RLA;位移
MOVR4,A
LCALLDE5SM;延时0.5SM
DJNZR3,NEXT;全扫描显示一偏
;------判断定时输出(只编写了一路)
CJNER7,#88H,LOOP;是8则开,否则、定时已关、转
;---------开
MOVA,YEAR
CJNEA,YEAR_1,LOOP_1;年比较,不等转关
MOVA,MON
CJNEA,MON_1,LOOP_1
MOVA,DAY
CJNEA,DAY_1,LOOP_1
MOVA,HOUR
CJNEA,HOUR_1,LOOP_1
MOVA,MIN
CJNEA,MIN_1,LOOP_1
CPLP3.0
;---------关
LOOP_1:
MOVA,YEAR
CJNEA,YEAR_11,LOOP;年比较
MOVA,MON
CJNEA,MON_11,LOOP
MOVA,DAY
CJNEA,DAY_11,LOOP
MOVA,HOUR
CJNEA,HOUR_11,LOOP
MOVA,MIN
CJNEA,MIN_11,LOOP
CPLP3.0
LJMPLOOP
;-----年月日显示中断子程序
SHOW:
PUSHPSW
pushACC
PUSHB
PUSH01H
PUSH02H
PUSH03H
PUSH04H
MOVR2,#0FFH;中断扫描次数
TURN:
MOVR1,#33H
MOVR4,#01H
MOVR3,#03H
NEXT_1:
MOVA,@R1
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,R4
INCR1
RLA
MOVR4,A
LCALLDE5SM
DJNZR3,NEXT_1
DJNZR2,TURN;反复显示一定时间后返回
POP04H
POP03H
POP02H
POP01H
POPB
POPACC
POPPSW
RETI
;-----计数中断服务子程序
TIME:
PUSHPSW
PUSHACC
PUSHB
PUSH06H
MOVTH0,#3CH;重装计数
MOVTL0,#0BH;
DJNZ20H,OUT;转到中断跳出pop程序
MOV20H,#0AH;重装:
100*10=1000
;-----进位程序
INCSEC
MOVR6,SEC;
CJNER6,#60,OUT;比较
MOVSEC,#00;
INCMIN
MOVR6,MIN
CJNER6,#60,OUT
MOVMIN,#00
INCHOUR
MOVR6,HOUR
CJNER6,#25,OUT
MOVHOUR,#00
INCDAY
MOVR5,MON
CJNER5,#1,MON_22;是否1月、不是转2月
MOVR5,DAY
CJNER5,#32,OUT;本月是否益出
INCMON
MOVDAY,#1
LJMPOUT
OUT:
POP06H
POPB
POPACC
POPPSW
RETI
MON_22:
MOVR5,MON
CJNER5,#2,MON_33;是否2月、不是转3月
MOVA,YEAR;判断是否瑞年
MOVB,#4
DIVAB
MOVA,B
JNZOUT_1;不是则转(A不为零则转)
MOVR5,DAY
CJNER5,#30,OUT;如是瑞年、判断是否到29天
INCMON
MOVDAY,#1
LJMPOUT
OUT_1:
MOVR5,DAY
CJNER5,#29,OUT;平年二月判断
INCMON
MOVDAY,#1
LJMPOUT
MON_33:
MOVR5,MON
CJNER5,#3,MON_44
MOVR5,DAY
CJNER5,#32,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_44:
MOVR5,MON
CJNER5,#4,MON_55
MOVR5,DAY
CJNER5,#31,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_55:
MOVR5,MON
CJNER5,#5,MON_66
MOVR5,DAY
CJNER5,#32,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_66:
MOVR5,MON
CJNER5,#6,MON_77
MOVR5,DAY
CJNER5,#31,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_77:
MOVR5,MON
CJNER5,#7,MON_88
MOVR5,DAY
CJNER5,#32,L1
INCMON
MOVDAY,#1
L1:
LJMPOUT
MON_88:
MOVR5,MON
CJNER5,#8,MON_99
MOVR5,DAY
CJNER5,#32,L2
INCMON
MOVDAY,#1
L2:
LJMPOUT
MON_99:
MOVR5,MON
CJNER5,#9,MON_00
MOVR5,DAY
CJNER5,#31,L3
INCMON
MOVDAY,#1
L3:
LJMPOUT
MON_00:
MOVR5,MON
CJNER5,#10,MON_AA
MOVR5,DAY
CJNER5,#32,L4
INCMON
MOVDAY,#1
L4:
LJMPOUT
MON_AA:
MOVR5,MON
CJNER5,#11,MON_BB
MOVR5,DAY
CJNER
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT89C51 单片机 时钟 电路