单片机数字时钟课程设计报告.docx
《单片机数字时钟课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
![单片机数字时钟课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/16/d3bae07b-6973-4cb5-a469-fb567b97c995/d3bae07b-6973-4cb5-a469-fb567b97c9951.gif)
单片机数字时钟课程设计报告
单片机应用综合设计报告
设计题目:
学院名称:
专业:
班级:
姓名:
指导教师:
日期:
2015.12.28~2015.12.31
一、任务书
1.用80C51设计一个数字时钟。
2.可显示时、分、秒。
3.按键实现时、分、秒人工校准。
4.具有闹钟功能。
5.实现秒表/时钟转换,秒表要求精确到10ms。
二、总体方案
用80C51设计一个数字时钟。
该数字钟能显示时、分、秒,并具有闹钟、秒表功能。
由四个按键控制,功能分别为启动、调时,调闹、止闹、退出调时,切换秒表时钟,加一,减一、暂停。
另外两个按键为电源控制键,复位键。
该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。
用两个四位一体共阴数码管作时间显示:
能显示时、分、秒。
用一个+5V有源蜂鸣器做闹钟声报警功能,并用四个按键做时间和闹钟调整的数字钟。
利用定时/计数器、中断系统来实现时钟计数。
用定时器1实现时钟计时,定时器0实现秒表计时。
把定时器0和定时器1都设为工作方式1,定时时间为1.25ms和125ms,则计数溢出8次即得时钟、秒表计时最小单位(10毫秒/秒)。
晶振频率f=6MHz。
X1=216-125*103/2=0BDCH。
X2=216-1.25*103/2=0FEFFH。
采用中断方式进行溢出次数累计,计满8次。
从秒到分和从分到时的计时是通过累加和数值比较实现。
三、硬件设计
(1)单片机最小系统
单片机最小系统由单片机,时钟电路,复位电路组成。
其中由6MHz晶振构成的振荡电路,并通过使复位端经电阻与Vcc电源接通而实现的按键电平复位电路。
(2)电源系统
以+5V直流稳压电源作为电源供应系统。
(3)输入系统
由四个调整键组成独立式键盘,分别具有为启动、调时、退出调闹,调闹、止闹、退出调时,秒表切换,加一,减一、暂停功能。
(4)输出系统
由两个四位一体的共阴数码管,并以74LS244做驱动电路构成显示输出,由NPN三极管以及一个蜂鸣器构成闹铃。
四、软件设计
4.1单片机资源使用情况
(1)时钟与秒表的时分秒在片内RAM存储地址如表3.1所示。
表3.1时钟存储地址
名称
时
分
秒
十位
7AH
78H
76H
个位
79H
77H
75H
表3.4秒表存储地址
名称
时
分
秒
十位
66H
64H
62H
个位
65H
63H
61H
(2)电子钟的时钟时间在八位数码管上进行显示,因此,在片内RAM中设置显示缓冲区共8个单元。
LED7LED6LED5LED4LED3LED2LED1LED0
74H73H72H71H70H6FH6EH6DH
显示缓冲区从左至右依次存时、-、分、-、秒的数值。
(3)闹钟的时分秒在片内RAM存储地址如表3.2所示。
表3.2闹钟标志位存储地址表
名称
时
分
秒
十位
6CH
6AH
68H
个位
6BH
69H
67H
(4)P0口作为数据显示输出、P1.4作为闹铃输出,P1.0-P1.3接按键输入,
20H.0-20H.3作为P1.0-P1.3的位标志存储地址。
(5)运用了定时器1作为1秒计时所用,定时器0作为10ms计时所用。
4.2软件系统程序流程框图
主程序流程框图如图3.1所示。
图3.1主程序流程框图
(2)1秒计时子程序流程框图如图3.2所示。
图3.21秒计时流程框图
图3.3键监控程序流程框图
(3)键监控子程序流程框图如图3.3所示,它还包含了键扫描和P1口处理子程序,它们的程序流程框图分别为图3.4和3.5。
图3.5P1口处理子程序流程框图
图3.4键扫描子程序流程框图
4.3源程序清单
LJMPMAIN
ORG000BH
LJMPINTT0
ORG001BH
LJMPINTT1
;---------------------------------------------------------
;-----------------主程序----------------------------------
;---------------------------------------------------------
MAIN:
LCALLBEGIN;上电显示“PP”
MOVSP,#30H
MOVR0,#7AH;清7AH-67H单元
MOVR1,#14H
LCALLCLR0
MOV20H,#00H
MOV6CH,#01H
MOV6BH,#02H
MOV7BH,#0CH;熄灭符
MOVTMOD,#11H;定时器0、1的工作方式为1
MOVTH1,#0BH;125ms
MOVTL1,#0DCH
MOVTH0,#0FEH
MOVTL0,#0FFH;1.25ms
MOVR7,#08H;125ms*8=1s,1.25ms*8=10ms
SETBEA
SETBET1
SETBTR1
LOOP:
LCALLDIR;调显示子程序
LCALLCLOCK;查闹钟
LCALLKEYC
JB20H.0,KEYAA;若A键按下跳转,调时
JB20H.1,KEYCC;若B键按下跳转,调闹
JB20H.2,KEYEE;若C键按下跳转,切换秒表
JB20H.3,KEYDD;若D键按下跳转,暂停
LJMPLOOP
;--------------秒表显示程序-----------------------
KEYEE:
CLRET1
CLRTR1
SETBET0
SETBTR0
MBLOOP:
LCALLDIRS
LCALLDIRS
LCALLKEYCS
JB20H.2,OUTSETS
JB20H.3,MBZ
LJMPMBLOOP
OUTSETS:
CLRET0
CLRTR0
SETBET1
SETBTR1
LJMPLOOP
MBZ:
CLRET0
CLRTR0
MBZLOOP:
LCALLKEYCS
JB20H.3,OUTMBZ
JB20H.2,OUTSETS
LJMPMBZLOOP
OUTMBZ:
SETBET0
SETBTR0
LJMPMBLOOP
;-------------------------------------------------
;--------------闹钟调整程序-----------------------
;-------------------------------------------------
KEYCC:
CLRET1
LCALLSETCH
SETBET1
LJMPLOOP
;-------------------------------------------------
;------------------暂停---------------------------
;-------------------------------------------------
KEYDD:
CLRET1
CLRTR1
LOOPSP:
LCALLKEYC;键扫描
JB20H.3,OUTSP;D键按下,暂停取消,继续走
LJMPLOOPSP
OUTSP:
SETBTR1
SETBET1
LJMPLOOP
;-------------------------------------------------
;-------------时钟调整程序------------------------
;-------------------------------------------------
KEYAA:
CLRTR1
CLRET1
LJMPSETHH
OUTSET:
SETBET1
SETBTR1
LJMPLOOP
;---------------时位调整-------------------------
;------------------------------------------------
SETHH:
MOVR5,#0FFH
LOOPH0:
MOVR0,#79H
MOVR1,#7AH
LCALLRDIRH;输出
LCALLDIR;显示
LCALLDIR
LCALLKEYC;键扫描
JNB20H.0,H1
LJMPSETMM;A键按下,调分
H1:
JNB20H.1,H2
LJMPOUTSET;B键按下,退出调时
H2:
JNB20H.2,H3
LJMPADDH1;C键按下,加1
H3:
JNB20H.3,H4
LJMPSUBH1;D键按下,减1
H4:
DJNZR5,LOOPH0;无键按下,循环,返回
LJMPOUTSET
;------------时加减一----------------------------
ADDH1:
MOVR0,#79H;加一
LCALLADD1
LJMPSETH
SUBH1:
MOVR0,#79H;减一
LCALLSUBBH1
LJMPSETH
SETH:
MOVR0,#79H
MOVR1,#7AH
LCALLRDIRH
CJNER3,#24H,SETHH
MOV79H,#00H
MOV7AH,#00H
LJMPSETHH
;==============分位调整===========================
SETMM:
MOVR5,#0FFH
LOOPM0:
MOVR0,#77H
MOVR1,#78H
LCALLRDIRM
LCALLDIR
LCALLDIR
LCALLKEYC
JNB20H.0,M1
LJMPSETSS;A键按下,调秒
M1:
JNB20H.1,M2
LJMPOUTSET
M2:
JNB20H.2,M3
LJMPADDM1
M3:
JNB20H.3,M4
LJMPSUBBM
M4:
DJNZR5,LOOPM0
LJMPOUTSET
;---------------分加减一--------------------------
ADDM1:
MOVR0,#77H;加一
LCALLADD1
LJMPSETM
SUBBM:
MOVR0,#77H;减一
LCALLSUBBMS
LJMPSETM
SETM:
MOVR0,#77H
MOVR1,#78H
LCALLRDIRM
CJNER3,#60H,SETMM
MOV77H,#00H
MOV78H,#00H
LJMPSETMM
;==================秒位调整=======================
SETSS:
MOVR5,#0FFH
LOOPS0:
MOVR0,#75H
MOVR1,#76H
LCALLRDIRS
LCALLDIR
LCALLDIR
LCALLKEYC
JNB20H.0,S1
LJMPSETHH
S1:
JNB20H.1,S2
LJMPOUTSET
S2:
JNB20H.2,S3
LJMPADDS1
S3:
JNB20H.3,S4
LJMPSUBBS
S4:
DJNZR5,LOOPS0
LJMPOUTSET
;-------------------秒加减一----------------------
ADDS1:
MOVR0,#75H;加一
LCALLADD1
LJMPSETS
SUBBS:
MOVR0,#75H;减一
LCALLSUBBMS
LJMPSETS
SETS:
MOVR0,#75H
MOVR1,#76H
LCALLRDIRS
CJNER3,#60H,SETSS
MOV75H,#00H
MOV76H,#00H
LJMPSETSS
;------------------------------------------------
;==============闹钟调整子程序====================
;------------------------------------------------
;================时位调整========================
SETCHH:
MOVR5,#0FFH
LOOPCH0:
MOVR0,#6BH
MOVR1,#6CH
LCALLRDIRH
LCALLDIR
LCALLKEYC
JNB20H.0,CH0
LJMPOUTSC;结束子程序
CH0:
JNB20H.1,CH1
LJMPSETCM;B键按下,调分
CH1:
JNB20H.2,CH2
LJMPADDCH1
CH2:
JNB20H.3,CH3
LJMPSUBCH1
CH3:
DJNZR5,LOOPCH0
LJMPOUTSC
;-----------------时加减一-----------------------
ADDCH1:
MOVR0,#6BH;加一
LCALLADD1
LJMPSETCH
SUBCH1:
MOVR0,#6BH;减一
LCALLSUBBH1
LJMPSETCH
SETCH:
MOVR0,#6BH
MOVR1,#6CH
LCALLRDIRH
CJNER3,#24H,SETCHH
MOV6CH,#00H
MOV6BH,#00H
MOVR0,#6BH
MOVR1,#6CH
LCALLRDIRH
LJMPSETCHH
;==================分位调整======================
SETCMM:
MOVR5,#0FFH
LOOPCM0:
MOVR0,#69H
MOVR1,#6AH
LCALLRDIRM
LCALLDIR
LCALLKEYC
JNB20H.0,CM0
LJMPOUTSC
CM0:
JNB20H.1,CM1
LJMPSETCH
CM1:
JNB20H.2,CM2
LJMPADDCM1
CM2:
JNB20H.3,CM3
LJMPSUBCM1
CM3:
DJNZR5,LOOPCM0
LJMPOUTSC
;---------------------分加减一--------------------
ADDCM1:
MOVR0,#69H;加一
LCALLADD1
LJMPSETCM
SUBCM1:
MOVR0,#69H;减一
LCALLSUBBMS
LJMPSETCM
SETCM:
MOVR0,#69H
MOVR1,#6AH
LCALLRDIRM
CJNER3,#60H,SETCMM
MOV6AH,#00H
MOV69H,#00H
MOVR0,#69H
MOVR1,#6AH
LCALLRDIRM
LJMPSETCMM
OUTSC:
RET
;-------------------------------------------------
;===========调整显示装载子程序====================
;-------------------------------------------------
RDIRH:
MOV6DH,7BH
MOV6EH,7BH
MOV6FH,7BH
MOV70H,7BH
MOV71H,7BH
MOV72H,7BH
MOV73H,@R0
MOV74H,@R1
RET
RDIRM:
MOV6DH,7BH
MOV6EH,7BH
MOV6FH,7BH
MOV70H,@R0
MOV71H,@R1
MOV72H,7BH
MOV73H,7BH
MOV74H,7BH
RET
RDIRS:
MOV6DH,@R0
MOV6EH,@R1
MOV6FH,7BH
MOV70H,7BH
MOV71H,7BH
MOV72H,7BH
MOV73H,7BH
MOV74H,7BH
RET
;--------------------------------------------------
;=====================键扫描子程序=================
;--------------------------------------------------
KEYC:
LCALLKEYDEAL;键扫描子程序
LCALLDIR
LCALLDIR
LCALLKEYDEAL;再次确认键有无按下,去抖动
JZEXIT
MOVB,20H
KEYSF:
LCALLKEYDEAL
JZKEY1
LCALLDIR
LJMPKEYSF;当键按下弹起后保存键值,返回
KEY1:
MOV20H,B
EXIT:
RET
;----------------------秒表键扫描子程序--------------
KEYCS:
LCALLKEYDEAL;键扫描子程序
LCALLDIRS
LCALLDIRS
LCALLKEYDEAL
JZEXITS
MOVB,20H
KEYSFS:
LCALLKEYDEAL
JZKEY1S
LCALLDIRS
LJMPKEYSFS
KEY1S:
MOV20H,B
EXITS:
RET
;---------------P1口处理子程序----------------------
KEYDEAL:
PUSHPSW;P1口处理子程序
MOVA,P1
CPLA
ANLA,#0FH
MOV20H,A
POPPSW
RET
;---------------------------------------------------
;=================1S计时程序========================
;---------------------------------------------------
INTT1:
PUSHPSW
PUSHACC
CLRET1
CLRTR1
MOVTH1,#0BH
MOVTL1,#0DCH
SETBTR1
DJNZR7,OUTT0
ADDSS:
MOVR7,#08H
MOVR0,#75H
LCALLADD1
CLRC
CJNER3,#60H,ADDMM
ADDMM:
JCOUTT1
MOV75H,#00H
MOV76H,#00H
MOVR0,#77H
LCALLADD1
CLRC
CJNER3,#60H,ADDHH
ADDHH:
JCOUTT0
MOV77H,#00H
MOV78H,#00H
MOVR0,#79H
LCALLADD1
CLRC
CJNER3,#24H,HOUR
HOUR:
JCOUTT0
MOVR0,#75H
MOVR1,#06H
LCALLCLR0
OUTT0:
MOV6FH,#0CH;熄灭符
MOV72H,#0CH
LJMPOUTT2
OUTT1:
MOV6FH,#0BH;‘-’
MOV72H,#0BH;‘-’
OUTT2:
MOV6DH,75H;秒个位
MOV6EH,76H;十位
MOV70H,77H;分个位
MOV71H,78H;十位
MOV73H,79H;时个位
MOV74H,7AH;十位
SETBET1
POPACC
POPPSW
RETI
;----------------10ms计时程序------------------
IN