51单片机数码管时钟电路的设计AT89C51.docx
- 文档编号:30337323
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:35
- 大小:35.87KB
51单片机数码管时钟电路的设计AT89C51.docx
《51单片机数码管时钟电路的设计AT89C51.docx》由会员分享,可在线阅读,更多相关《51单片机数码管时钟电路的设计AT89C51.docx(35页珍藏版)》请在冰豆网上搜索。
51单片机数码管时钟电路的设计AT89C51
广东石油化工学院
《51单片机原理与实践》课程设计报告
学院
计算机与电子信息学院
专业
班级
学号
姓名
指导教师
课程成绩
完成日期
2010年12月27日
数码管时钟电路的设计
一、设计目的:
通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统的设计的,熟悉用KEIL软件进行汇编语言的汇编,以及把代码写入实验板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。
二、设计要求:
LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。
该电路采用AT89C2051单片机,使用3V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。
三、设计实验内容:
1.硬件的设计
其采用AT89C51单片机应用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P2口输出位码数据,P1.1、P1.2接按钮开关。
为了提供LED数码管的驱动电流,采用6MHz晶振。
2.系统总体分析
系统主要包含四大模块:
显示模块、时间计时模块、模式切换模块和模式设置模块。
●显示模块:
主要由主循环负责。
内存中开辟了一段8字节的内存空间,用作数据显示的字符缓冲区。
主循环不断将缓冲区中的字符呈现至数码管。
●时间计时模块:
电子钟的核心模块,记录了时间的时、分、秒信息。
●模式切换模块(MODE):
切换电子钟的设置模式,包括时设置、分设置、秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。
相关数据被设置时将闪烁显示。
●模式设置模块(CONFIG):
通过判断设置模式(MODE),执行相应的设置。
如时、分、秒的增1以及闹铃开关的变换。
另外,主循环还负责扫描键盘,检测相应键是否被按下,若MODE键被按下则在特定单元中登记该功能,并启动定时器1,然后返回继续执行显示功能。
在定时器1中断时,被登记的功能正式执行。
期间用时约10ms,用以消除机械抖动。
主循环流程图大致如下:
图
(一)主循环流程图
定时器1中断服务程序流程图如下:
图
(二)定时器1中断服务程序流程图
3.系统主要程序的设计
1)主程序
本设计中的主程序主要负责对键盘扫描及显示数据,还包括判断是否闹钟正在活动。
若键盘中的P1.6(模式键)或P1.7(设置键)被按下,登记将被执行的功能,主循环不负责功能模块的执行。
若闹钟正在活动,调用蜂鸣函数。
其中bPalse标识了一秒的前半秒和后半秒,是为了控制显示数据的半秒闪烁。
主函数还包含初始化操作,以下省略。
loop:
MOVB,#01111111B;位选通信号
MOVR0,#prebuf-01H;数据缓冲区
nextnum:
ACALLkeyscan;扫描键盘
INCR0
MOVA,@R0
PUSHACC
MOVA,B
RLA
MOVB,A
JBbPalse,show
ORLA,dmask
JNBbAlaIng,show
MOVled,#0FFH
ACALLbeeponce若闹铃活动,调用蜂鸣函数
DECSP
SJMPloop
show:
PUSHACC
ACALLdisplayone在特定数码管显示数据。
DECSP
DECSP
ACALLdelay
CJNER0,#prebufend,nextnum
SJMPloop
keyscan:
JNBkeym,keymode;若切换键被按下,登记“切换”功能
JNBkeyc,keyconf;若设置键被按下,登记“设置”功能
RET
;=====================
;
;logfunction'mode'
;
;=====================
keymode:
MOVfunclog,#01H;keyact
ACALLfuncperform;激活“功能执行模块”(见下文),
RET
;=====================
;
;logfunction'config'
;
;=====================
keyconf:
MOVfunclog,#02H
ACALLfuncperform;激活“功能执行模块”(见下文)
RET
2)显示子程序
在特定数码管显示数据,通过堆栈传递参数。
第一个参数是待显示的字符,第二个参数是位选通信号。
函数通过查字形码表将字形显示至数码管。
displayone:
PUSHACC
PUSHPSW
MOVA,R0
PUSHACC
PUSHB
MOVPSW,#00H
MOVA,SP
SUBBA,#07H
MOVR0,A
MOVA,@R0
INCR0
MOVB,@R0
PUSHDPL
PUSHDPH
MOVDPTR,#metrix
MOVCA,@A+DPTR
JNBbPalse,noft
ANLA,ft
noft:
MOVlmask,B
MOVled,A
POPDPH
POPDPL
POPB
POPACC
MOVR0,A
POPPSW
POPACC
RET
3)定时器TO中断服务程序
电子钟的计秒程序,负责计算时间。
act:
;maintimeractor
CJNER2,#0BH,con
CLRbPalse;palsepersecond
con:
DJNZR2,leave
MOVR2,#14H
PUSHACC
PUSHPSW
MOVPSW,#00H
MOVA,s;s
INCA
DAA
MOVs,A
CJNEA,#60H,incn
MOVs,#00H
MOVA,m;m
INCA
DAA
MOVm,A
CJNEA,#60H,incn
MOVm,#00H
MOVA,h;h
INCA
DAA
MOVh,A
CJNEA,#24H,incn
MOVh,#00H
incn:
SETBbPalse
JNBbAlaOn,alarmoff
ACALLcheckala;checkalarmwhenalarmisON
alarmoff:
MOVA,npage
ANLA,#02H
JNZskip
ACALLprepare
skip:
POPPSW
POPACC
leave:
MOVTH0,#03CH
MOVTL0,#0B0H
RETI
4)模式切换程序
切换设置模式,包括时间时设置、时间分设置、时间秒设置、闹铃开关设置、闹铃时设置、闹铃分设置。
mode:
;mode
;SETBP3.2
PUSHACC
PUSHPSW
PUSHDPL
PUSHDPH
JNBbAlaIng,modeskip
SETBbKick;stopalarm
CLRbAlaIng
SJMPmodeleave
modeskip:
MOVnpage,#00H
MOVDPTR,#maskdat
MOVA,cmode
INCA
CJNEA,#07H,enmode
MOVA,#00H
enmode:
MOVcmode,A
ANLA,#04H
JZnotalapage
MOVnpage,#02H
ACALLpreala;时钟调整页准备
notalapage:
MOVA,cmode
MOVCA,@A+DPTR
MOVdmask,A;设置时闪烁
modeleave:
POPDPH
POPDPL
POPPSW
POPACC
RET
5)模式设置程序
对时间量执行加1,特别的闹铃开关执行开关设置。
conf:
;conf
;SETBP3.3
PUSHACC
PUSHPSW
MOVPSW,#00H
MOVA,cmode
PUSHDPL
PUSHDPH
JNBbAlaIng,confskip
;SETBbKick;stopalarm
;CLRbAlaIng
SJMPconfleave
confskip:
MOVDPTR,#confset
RLA
JMP@A+DPTR
set1:
;时设置
MOVA,h
INCA
DAA
MOVh,A
CJNEA,#24H,notset
MOVh,#00H
SJMPnotset
set2:
;分设置
MOVA,m
INCA
DAA
MOVm,A
CJNEA,#60H,notset
MOVm,#00H
SJMPnotset
set3:
;秒设置
MOVA,s
INCA
DAA
MOVs,A
CJNEA,#60H,notset
MOVs,#00H
SJMPnotset
setae:
CPLbAlaOn;闹钟开关
SJMPnotseta
setah:
MOVA,ah;闹钟时设置
INCA
DAA
MOVah,A
CJNEA,#24H,notseta
MOVah,#00H
SJMPnotseta
setam:
MOVA,am;闹钟分设置
INCA
DAA
MOVam,A
CJNEA,#60H,notseta
MOVam,#00H
notseta:
ACALLpreala
CLRbKick
SJMPconfleave
notset:
ACALLprepare
confleave:
POPDPH
POPDPL
POPPSW
POPACC
RET
confset:
SJMPconfleave
SJMPset1
SJMPset2
SJMPset3
SJMPsetae
SJMPsetah
SJMPsetam
6)功能执行程序
执行程序负责执行被登记的功能,功能由主循环扫描键盘并登记。
主循环中,当扫描到有键盘按下时,登记下将被执行的功能,然后启动定时器1,定时器1的中断服务程序即是功能执行程序,中断程序分析并执行被登记的功能。
encperform:
CLRTR1;actonce
PUSHACC
PUSHPSW
MOVA,funclog
CJNEA,#01H,encconf
JNBkeym,encperformleave;actionjustatbuttonup;
ACALLmode;do'mode'function
SJMPencperformleave
encconf:
CJNEA,#02H,encperformleave
JNBkeyc,encperformleave;actionjustatbuttonup;
ACALLconf;do'config'function
encperformleave:
POPPSW
POPACC
RETI
四、完整源代码
sEQU30H
mEQU31H
hEQU32H
dmaskEQU33H
cmodeEQU34H
ftEQU36H
prebufEQU37H;8bytebuffer
prebufendEQU3EH
amEQU3FH;alarmminite
ahEQU40H;alarmhour
npageEQU41H;functionpage
funclogEQU42H;functoact
stackEQU4FH
;pin
ledEQUP0
lmaskEQUP2
beepEQUP3.3
keymEQUP1.6;key'mode'
keycEQUP1.7;key'config'
;bitaddr
bPalseEQU00H
bAlaIngEQU01H
bAlaOnEQU02H
bKickEQU03H
;metrixelement
m_noneEQU0AH
m_oEQU0BH
m_fEQU0CH
m_nEQU0DH
org0000H
LJMPstart
org0003H
LJMPmodelogger;INT0tomode
org000BH
LJMPact;timer
org0013H
LJMPconflogger;INT1toconfig
org001BH
LJMPencperform;performer
org0100H
start:
MOVSP,#stack
MOVTMOD,#11H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVR2,#14H;R2usedbyT0
MOVs,#00H
MOVm,#00H
MOVh,#00H
MOVdmask,#00H
MOVcmode,#00H
MOVnpage,#00H
MOVah,#23H
MOVam,#59H
SETBEA
SETBET0;T0
SETBPT0
SETBTR0
SETBET1;T1
SETBEX0;INT0
SETBIT0
SETBEX1;INT1
SETBIT1
SETBP3.2
SETBP3.3
SETBkeym
SETBkeyc
CLRbAlaIng
CLRbAlaOn
CLRbKick
loop:
MOVB,#01111111B
MOVR0,#prebuf-01H
nextnum:
ACALLkeyscan
INCR0
MOVA,@R0
PUSHACC
MOVA,B
RLA
MOVB,A
JBbPalse,show
ORLA,dmask
JNBbAlaIng,show
MOVled,#0FFH;clrledwhenalarm
ACALLbeeponce
DECSP
SJMPloop
show:
PUSHACC
ACALLdisplayone
DECSP
DECSP
ACALLdelay
CJNER0,#prebufend,nextnum
SJMPloop;endstart
beeponce:
CPLbeep
MOVR5,#02H
beeploop2:
MOVR6,#0FFH
beeploop1:
NOP
DJNZR6,beeploop1
DJNZR5,beeploop2
RET;endbeeponce
;=====================
;;displayonecharacter
;
;@paramcharCharactertodisplay
;@parammaskPositioncharactertodisplay
;=====================
displayone:
PUSHACC
PUSHPSW
MOVA,R0
PUSHACC
PUSHB
MOVPSW,#00H
MOVA,SP
SUBBA,#07H
MOVR0,A
MOVA,@R0
INCR0
MOVB,@R0
PUSHDPL
PUSHDPH
MOVDPTR,#metrix
MOVCA,@A+DPTR
JNBbPalse,noft
ANLA,ft
noft:
MOVlmask,B
MOVled,A
POPDPH
POPDPL
POPB
POPACC
MOVR0,A
POPPSW
POPACC
RET;enddisplayone
delay:
PUSHACC
MOVA,R5
PUSHACC
MOVA,R6
PUSHACC
MOVR5,#03H
dloopo:
MOVR6,#0FFH
dloop:
NOP
DJNZR6,dloop
DJNZR5,dloopo
POPACC
MOVR6,A
POPACC
MOVR5,A
POPACC
RET;enddelay
ORG0200H
;=====================
;
;preparetimedatas
;tothedisplaybuffer
;
;=====================
prepare:
MOVft,#11011111B;enableft
PUSHACC
PUSHPSW
PUSHB
MOVA,R1
PUSHACC
MOVR1,#prebuf
MOV@R1,#m_none
INCR1
MOV@R1,#m_none
INCR1
MOVA,h;h
MOVB,A
SWAPA
ANLA,#0FH
MOV@R1,A
ANLB,#0FH
INCR1
MOV@R1,B
MOVA,m;m
MOVB,A
SWAPA
ANLA,#0FH
INCR1
MOV@R1,A
ANLB,#0FH
INCR1
MOV@R1,B
MOVA,s;s
MOVB,A
SWAPA
ANLA,#0FH
INCR1
MOV@R1,A
ANLB,#0FH
INCR1
MOV@R1,B
POPACC
MOVR1,A
POPB
POPPSW
POPACC
RET;endprepare
;=====================
;
;preparealarmdatas
;tothedisplaybuffer
;
;=====================
preala:
MOVft,#0FFH;noft
PUSHACC
PUSHPSW
MOVR1,#prebuf
MOV@R1,#m_o
INCR1
JNBbAlaOn,alaoff
MOV@R1,#m_n
INCR1
MOV@R1,#m_none
SJMPalacon
alaoff:
MOV@R1,#m_f
INCR1
MOV@R1,#m_f
alacon:
INCR1
MOV@R1,#m_none
MOVA,ah
SWAPA
ANLA,#0FH
INCR1
MOV@R1,A
MOVA,ah
ANLA,#0FH
INCR1
MOV@R1,A
MOVA,am
SWAPA
ANLA,#0FH
INCR1
MOV@R1,A
MOVA,am
ANLA,#0FH
INCR1
MOV@R1,A
POPPSW
POPACC
RET;endpreala
ORG0300H
;=====================
;
;performaction
;
;=====================
encperform:
CLRTR1;actonce
PUSHACC
PUSHPSW
MOVA,funclog
CJNEA,#01H,encconf
JNBkeym,encperformleave;actionjustatbuttonup;
ACALLmode;do'mode'function
SJMPencperformleave
encconf:
CJNEA,#02H,encperformleave
JNBkeyc,encperformleave;actionjustatbuttonup;
ACALLconf;do'config'function
encperformleave:
POPPSW
POPACC
RETI
;=====================
;
;preparetodofunction
;
;=====================
funcperform:
MOVTH1,#0D8H
MOVTL1,#0F0H
SETBTR1
RET
;=====================
;
;logfunction'mode'
;
;=====================
modelogger:
MOVfunclog,#01H
ACALLfuncperform
RETI
;=====================
;
;logfunction'config'
;
;=====================
conflogger:
MOVfunclog,#02H
ACALLfuncperform
RETI
ORG0400H
;=====================
;
;mode
;
;tochangefunction
;orstopal
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 数码管 时钟 电路 设计 AT89C51