基于52单片机的时钟设计
- 格式:docx
- 大小:55.58 KB
- 文档页数:10
单片机设计任务书
课题
名称 基于单片机的数字电子钟的设计
设计
目的 1. 增进对MCS51单片机电路的感性认识,加深对理论方面的理解;掌握Protel99SE,Proteus,,Keil软件的有关知识;了解和掌握软硬件设计过程、方法及实现;
2. 通过基于单片机的数字电子钟的设计的设计练习,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
实验
环境 1. 微型电子计算机(PC),安装Windows 2000以上操作系统;
2. Keil uVision2环境,Proteus 仿真软件,Protel99SE制图软件;
任务
要求 1. 查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;
2. 设计一个时钟系统,实现以24小时为一个周期,同时8位7段LED数码管显示小时、分钟和秒的要求;
3. 该时钟在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时;
4. 设计四个按键S1、S2、S3和S4键,进行相应的操作就可实现校时、定时、复位功能。
5. 设计系统原理图,利用Protel99SE绘制原理图,设计程序,利用Proteus 仿真软件进行系统调试;
6. 结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字。
参考程序:
;-------------------------------------------------------------------
;本电子钟实现24小时制,8位数码管显示时分秒,可整点报时
;显示格式:00-00-00(设置小时十位为0时,不显示)
;通过3只按键来调整时间
;调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁
; 增加键ADD_KEY:P1.1;按一次使选中位加1
; 减少键DEC_KEY:P1.2;按一次使选中位减1
;如果长按ADD_KEY或DEC_KEY,可进行调时、调分快进快减,并停止闪烁
;如果选中位是秒,则按增加键或减少键可实现,但无调时快进和快减功能
;P0口输出数码管段选信号,P3口输出数码管位选信号;晶振11.0592M
;P2.1为蜂鸣器发声报时
;编程人:郑振凡 编写日期:2009年12月2日 修改日期(最终):2009年12月6日
;-------------------------------------------------------------------
;-----------
;程序入口
;-----------
ORG 0000H ;程序入口地址
LJMP START
ORG 000BH ;定时器0中断入口地址
LJMP TIMET0
ORG 1000H
;----------------------------------
;显P.程序
;功能:可以在8个数码闪烁移位进行屏保
;----------------------------------
START:MOV R6, #2 ;闪烁次数
MOV A, #01H ;位选
TT:MOV P3, A
MOV P0, #0CH ;段码"P."
LCALL DELAY
MOV P3, #00H
DJNZ R6, TT
LCALL DELAY
LCALL DELAY1
RR A
JB P1.0, TT ;键是否按下,没按下则转移
LCALL DELAY ;延时去抖
JNB P1.0, KAI ;再次判断键是否按下
KAI:SETB P1.0
CLR A ;状态恢复
MOV P0, #0FFH
LCALL DELAY1
SETB 48H ;用于调时闪烁标志 SETB 47H ;用于产生脉冲用于调时快进的脉冲
MOV R1, #0 ;调整选择键功能标志:0计时、1调时、2调分、3调秒
;-------------------------------
;清16位寄存器及初始化
;50H 用于控制秒基准时钟源的产生
;51H 清零秒寄存器
;52H 清零分寄存器
;53H 清零时寄存器
;5FH 用于秒个位;5EH 用于秒十位
;5DH 用于分个位;5CH 用于分十位
;5BH 用于时个位;5AH 用于时十位
;54H 用于控制调时闪烁
;-------------------------------
MOV R0, #50H ;初始化
MOV R6, #10H
CLEARJCQ:MOV @R0, #00H ;清寄存器
INC R0
DJNZ R6, CLEARJCQ
MOV IP, #02H
SETB EA
SETB ET0
MOV TMOD, #01H ;设定定时器0工作方式1
MOV TH0, #3CH
MOV TL0, #0B0H ;赋定时初值,定时50ms
SETB TR0 ;启动定时器0
MOV SP, #70H ;堆栈
;--------
;主程序
;--------
MAIN:LCALL DISPLAY
LCALL KEY_SCAN
JZ MAIN
LCALL SET_KEY
JB 46H, MAIN ;如果已进行调时快进,则不再执行下面的调整
LCALL ADD_KEY ;调用增加键处理子程序,加一
LCALL DEC_KEY ;调用减少键处理子程序,减一
LJMP MAIN ;重新循环
;---------------
; 显示处理程序
;---------------
DISPLAY:MOV A, 51H
ANL A, #0FH
MOV 5FH, A ;转换出秒个位,存入5FH
MOV A, 51H
ANL A, #0F0H SWAP A
MOV 5EH, A ;转换出秒十位,存入5EH
JB 46H, MIN ;如果调时快进,则跳过闪烁处理程序
CJNE R1, #3,MIN ;如果R1为3,闪烁秒位待调整
JB 48H, MIN
MOV 5FH, #0AH ;使该位为10,查表得到使该位不显示
MOV 5EH, #0AH
MIN:MOV A, 52H
ANL A, #0FH
MOV 5DH, A ;转换出分个位,存入5DH
MOV A, 52H
ANL A, #0F0H
SWAP A
MOV 5CH, A ;转换出分十位,存入5CH
JB 46H, HOUR
CJNE R1, #2,HOUR ;如果R1为2,闪烁分位待调整
JB 48H, HOUR
MOV 5DH, #0AH
MOV 5CH, #0AH
HOUR:MOV A, 53H
ANL A, #0FH
MOV 5BH, A ;转换出时个位,存入5BH
MOV A, 53H
ANL A, #0F0H
SWAP A
MOV 5AH, A ;转换出时十位,存入5AH
JB 46H, DISP
CJNE R1, #1,DISP ;如果R1为1,闪烁时位待调整
JB 48H, DISP
MOV 5BH, #0AH ;使该位为10,查表得到使该位不显示
MOV 5AH, #0AH
;-------------------
;数码管动态扫描显示
;-------------------
DISP:MOV DPTR, #TABLE
MOV A, 5FH
MOVC A, @A+DPTR
MOV P0, A
SETB P3.7
LCALL DELAY
CLR P3.7 ;显示秒个位
MOV A,5EH
MOVC A, @A+DPTR
MOV P0, A
SETB P3.6
LCALL DELAY CLR P3.6 ;显示秒十位
MOV A, #0BFH
MOV P0, A
SETB P3.5
LCALL DELAY
CLR P3.5 ;显示“-”
MOV A, 5DH
MOVC A, @A+DPTR
MOV P0, A
SETB P3.4
LCALL DELAY
CLR P3.4 ;显示分个位
MOV A,5CH
MOVC A, @A+DPTR
MOV P0, A
SETB P3.3