数字钟
中文摘要:随着时代的进步和发展,单片机技术已经普及到我们的生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将利用单片机来设计制作一个数字钟。当开机时,数字钟开始计时。同时也可以利用按键分别调整秒、分、时的计数。
英文摘要:With the era of progress and development, microcontroller technology has spread to our life, work, research in various fields, has become a relatively mature technology, the paper will use the microcontroller to design a digital clock. When switched on, digital clock starts. Can also use the control buttons are seconds, minutes, hours count.
关键词:单片机,数字钟,AT89S51
一.引言
数字钟是一种用电路技术实现时、分、秒计数字时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。该设计利用AT89S51单片机来实现,开机时,从12:00:00开始计时,并且可以利用按键来对时间进行调整。
二.总体设计方案
1.数字钟设计方案论证
方案一:
本设计可利用中小规模集成电路组成数字钟,主要利用数字电路知识,主要采用74LS160 、译码器7448等芯片,再加上555定时器、数码管、电阻、电容这些器件组成数字钟。接通电源即可工作,但接线比较麻烦。
方案二:
本设计也利用单片机来实现,单片机作主控制器,再接一些外围电路便可组成数字钟。此设计接线比较简单且利用单片机实现的电子钟具有编程灵活,并便于功能的扩展。
从以上两种方案,很容易看出,采用方案二,接线比较简单,电子钟编程灵活,故采用了方案二。
2.方案二的总体设计框图:
2.1主控制器
AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51按其功能来分,可分为如下3类:
(1)电源及时钟引脚:Vcc、Vss;XTAL1、XTAL2。
(2)控制引脚:非PSEN、 ALE 、非EA、 RESET(即RST)。
(3)I/O口引脚:P0、P1、P2、P3,为4个8位I/O口的外部引脚。
(引脚图)
2.2时钟振荡电路
方案一:外部时钟方式
外部时钟方式是使用外部振荡器产生的脉冲信号,外部的时钟源直接连到XTAL1端,XTAL2端悬空。常用于多片单片机同时工作,以便于多片单片机之间的同步,一般为低于12MHz的方波。
方案二:内部时钟方式
AT89S51内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器(简称晶振)和微调电容,就构成一个稳定的自激振荡器。电路中的电容C1和C2典型值通常选择为30pF左右。对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的范围、振荡器的稳定性和起振的快速性。晶振的振荡频率的范围通常是在1.2MHz-12MHz之间。晶振的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。
考虑到方案一一般适用于多片单片机,故采用方案二。
2.3单片机复位电路
复位电路由两部分组成,电容和电阻。此复位电路称上电复位。上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端为低电平,程序正常运行。
2.4按键调节电路
每按下一次开关,计数值加1,把“单片机系统”区域中的P0.0、P0.1、P0.2端口连接到SP1、SP2、SP3。作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说,当我们按下一个按键时,总希望某个命令只执行一次,而在按键按下的过程中,不要有干扰进来,因为在按下的过程中,一旦有干扰过来,可能造成误触发过程,因此在按键按下的时候要滤除干扰信号。在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,再来检测一次,看按键是否真的已经按下,若真的已经按下,这时肯定输出为低电平,若这时检测的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程,从而提高了系统的可靠性。
2.5显示电路
采用动态扫描的方法进行显示,所谓动态扫描显示技术就是指:多位数码管采用“并联”动态接口,通过对各数码管轮流循环点亮,实现多位数码显示。当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。对于显示的字形码数据采用查表方法完成。
三.程序设计框图:
1. 主程序流程图
2. 中断服务程序流程图
四.总结与体会
在此次设计的过程中,我们发现了许多的问题,虽然以前也做过一些设计但这次设计真的让我们长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前也写过一些程序,但我们都觉得写好一个程序并不是一件简单的事。从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际中去,学习单片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我们在这次课程设计中的最大收获。
五.参考文献
1.张毅刚.单片机原理及应用.北京:高等教育出版社,2003
2.李任青、熊勇勇.单片机原理实验及应用.南昌大学共青学院,2009
六.附录一:汇编源程序
SECOND EQU 30H
MINITE EQU 31H
HOUR EQU 32H
HOURK BIT P0.0
MINITEK BIT P0.1
SECONDK BIT P0.2
DISPBUF EQU 40H
DISPBIT EQU 48H
T2SCNTA EQU 49H
T2SCNTB EQU 4AH
TEMP EQU 4BH
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV SECOND,#00H
MOV MINITE,#00H
MOV HOUR,#12
MOV DISPBIT,#00H
MOV T2SCNTA,#00H
MOV T2SCNTB,#00H
MOV TEMP,#0FEH
LCALL DISP
MOV TH0,#(65536-2000) / 256
MOV TL0,#(65536-2000) MOD 256
SETB TR0
SETB ET0
SETB EA
WT: JB SECONDK,NK1
LCALL DELY10MS
JB SECONDK,NK1
INC SECOND
MOV A,SECOND
CJNE A,#60,NS60
MOV SECOND,#00H
NS60: LCALL DISP
JNB SECONDK,$
NK1: JB MINITEK,NK2
LCALL DELY10MS
JB MINITEK,NK2
INC MINITE
MOV A,MINITE
CJNE A,#60,NM60
MOV MINITE,#00H
NM60: LCALL DISP
JNB MINITEK,$
NK2: JB HOURK,NK3
LCALL DELY10MS
JB HOURK,NK3
INC HOUR
MOV A,HOUR
CJNE A,#24,NH24
MOV HOUR,#00H
NH24: LCALL DISP
JNB HOURK,$
NK3: LJMP WT
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP:
MOV A,#DISPBUF
ADD A,#8
DEC A
MOV R1,A
MOV A,HOUR
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,#10
MOV@R1,A
DEC R1
MOV A,MINITE
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
MOV A,#10
MOV@R1,A
DEC R1
MOV A,SECOND
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
RET
INT_T0:
MOV TH0,#(65536-2000) / 256
MOV TL0,#(65536-2000) MOD 256
MOV A, #0FFH
MOV P3,A
MOV A,#DISPBUF
ADD A,DISPBIT
MOV R0,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
MOV A,DISPBIT
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P3,A
INC DISPBIT
MOV A,DISPBIT
CJNE A,#08H,KNA
MOV DISPBIT,#00H
KNA: INC T2SCNTA
MOV A,T2SCNTA
CJNE A,#100,DONE
MOV T2SCNTA,#00H
INC T2SCNTB
MOV A,T2SCNTB
CJNE A,#05H,DONE
MOV T2SCNTB,#00H
INC SECOND
MOV A,SECOND
CJNE A,#60,NEXT
MOV SECOND,#00H
INC MINITE
MOV A,MINITE
CJNE A,#60,NEXT
MOV MINITE,#00H
INC HOUR
MOV A,HOUR
CJNE A,#24,NEXT
MOV HOUR,#00H
NEXT: LCALL DISP
DONE: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
END
附录二:
1.DXP
2.proteus
单片机原理及其接口技术
课程设计报告
设计课题:基于MCS-51单片机的时钟秒表设计
专业班级: 08自动化
小组成员: 周剑(08118090)
指导教师: 阮海容
基于MCS-51单片机的时钟秒表设计
设计任务书
基本设计要求
(1)在ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。
(2)程序的首地址应使目标机可以直接运行,即从0000H开端。在主程序的开端部分必须设置一个合适的栈底。程序放置的地址须持续且靠前,不要在中间留下大批的空间地址,以使目标机可以应用较少的硬件资源。
(3)6位显示器数码管从左到右分辨显示时. 分. 秒(各占用2位),采用24小时标准计时制。开端计时时为000000,到235959后变成000000.
(4)在4*4矩阵键盘上选定3个键分辨作为小时. 分. 秒的调校键。每按一次键,对应的显示值便加1。分. 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不产生转变).
(5)软件设计必须应用8031片内定时器,采用定时中断结构,不得应用软件延时法
选作项目
(1)另设三个键,分别作小时、分、秒的减1调校。
(2)在以上设计的基础上,修改程序制作一个电子秒表。分、秒各占用 2位显示,1/10秒、1/100秒各占用1位显示。设定二个键分别作启动/ 停止、清零。
(3)在做完(2)后,将时钟与秒表合二为一,并且在同时使用时互不影 响。即可在时钟与秒表之间任意切换,而不影响走时、计秒。
.目录
第一章 设计阐明
1.1 设计内容
1.2 设计请求
1.3设备及工作环境
第二章 硬件计划
2.1 设计思路
2.2 原理电路图
2.3 硬件工作原理论述
第三章 软件计划
3.1 分析论证
3.2 程序流程图
3.3程序清单
第四章 调试过程及成果分析
第五章设计总结
参考文献
第一章 设计阐明
1.1设计内容
用ZY15MCU12BD型综合单片机实验箱及串口电路设计实现显示时间并能够调校时间的时钟,还能够实现秒表的启动/暂停,复位功能
1.2设计请求
(1) 在ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。
(2) 程序的首地址应使目标机可以直接运行,即从0000H开端。在主程序的开端部分必须设置一个合适的栈底。程序放置的地址须持续且靠前,不要在中间留下大批的空间地址,以使目标机可以应用较少的硬件资源。
(3) 6位显示器数码管从左到右分别显示时. 分. 秒(各占用2位),采用24小时标准计时制。开端计时时为000000,到235959后变成000000.
(4) 在键盘上选定6个键分别作为小时. 分. 秒的调校键。每按一次键,对应的显示值便加1或减1。分. 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不产生转变)再选一个键用作时钟的复位键.另外选一个键作为秒表的启动/暂停键,再选一个键作为秒表的复位键。
(5) 软件设计必须应用8031片内定时器,采用定时中断结构,不得应用软件延时法。
(6) 上机调试程序。
(7) 写出设计报告。
1.3设备及工作环境
(1) 硬件:盘算机一台、ZY15MCU12BD型综合单片机实验箱一台、通信电缆一根。
(2) 软件:Windows操纵系统、Keil C51软件。
第二章 硬件计划
2.1 设计思路
电子时钟程序由显示模块、校时模块和时钟运算模块三大部分组成。其中校时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒算到60时,要自己清零并向分进1;分算到60时,要自己清零并向时进1;时算到24时,要清零。这样,才能循环记时。秒表程序也由显示模块,启动/暂停复位模块和时钟运算模块组成。其中校时模块和时钟模块要对1/100秒,1/10秒,秒,分的数值进行操作并且1/100秒算到10时,要自己清零并向1/10秒进1;1/10秒算到10时,要自己清零并向秒进1;秒时算到60时,要自己清零并向分进1,秒时算到60时,要自己清零。用按键决定是进入时钟程序还是秒表程序。
2.2 原理电路图
2.3 硬件工作原理论述
硬件由8031芯片、74LS373锁存器、8255A串口芯片、74LS240驱动器、显示器数码显示管和4*4键盘组成.由8031片内定时器定时中断,并取一存储单元作为计数器应用,每中断一次,在中断服务程序中使计数器加1、用8031片内定时器T0定时中断服务程序完成秒、分、时的运算即计时功效,T1定时中断服务程序完成1/100秒、1/10秒、秒,分的运算即秒表功效。8255A负责将内存里的时位、分位和秒位数值或1/100秒、1/10秒、秒,分位数值输出到数码管。同时按键01键、02键、03键是分别对时、分、秒的加1校订;05键、06键、07键时分别对时、分、秒的减1校订;00键是清零键。并且开机时时钟时从000000开端计时的,到235959时在回到000000.09键实现秒表的启动/暂停,0A0键实现秒表的复位。
第三章软件计划
3.1 分析论证
此时钟秒表的设计与实现,主要采用了6只显示器数码管,8031内部二进制16位定时器/计数器,可编程并行I/O接口8255芯片和矩阵键盘等,包含显示模块,运算模块和校时模块三大功效模块。
3.1.1、显示模块:
用8255,数码管的显示功效来设计。显示部分硬件用六只显示器为显示管,这些显示器发光二极管的阳极是互相连接在一起的,所以称为共阳极数码管。通过在这8只发光二极管的阴极加-5 V或0 V的电压使不同的二极管发光,形成不同的数字。该模块重要是将运算模块和校时模块运算出来并存放在内存单元里的十六进制表现的时位、分位和秒位或或1/100秒、1/10秒、秒,分数值转化为十进制,并通过6只数码管显示出来。该模块实现的硬件是实验箱中的显示器单元,采用软件译码,即在程序中设置一个段选码表。CPU直接往显示器输出八段代码,省去了硬件译码器。只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现由左向右使6只显示器依次呈现数字显示。
3.1.2、运算模块:
该模块的重要功效是对时、分、秒或或1/100秒、1/10秒、秒,分的运算,并把运算出的终极成果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可以细分为定时模块和运算模块。定时模块负责供给中断信号,由于CPU运算模块中的指令耗费必定的时间,所以中断信号最好通过硬件来实现。本实验中用8031定时器/计数器,但由于8031供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。中断信号是8031工作方法为方法1,产生一个50ms的脉冲信号。运算模块负责时、分、秒或或1/100秒、1/10秒、秒,分的计算,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1 、秒清零;当分加到60时,时加1、分清零。当时加到24时,直接清零,然后转到调用处。秒表也是如此。
3.1.3、校时模块:
该模块重要功效是修正时、分、秒内存单元的数值。每按一次键,对应的显示值便加1。分、 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不产生转变)。要注意在主程序中对时间进行调校前应封闭中断,以防在调校过程中定时中断服务程序也对时间进行修正而造成混杂。
3.1.4、启动/暂停,复位模块
该模块的功能是实现秒表的启动/暂停,复位。本实验中第一次按下09键进入秒表程序,开始跑时,第二次按下09键暂停秒表,按下0A0键秒表清零并返回到主程序
3.1.5、整体功效:
在6块显示器数码管上能实现数字时钟的时、分、秒显示和秒表,并能对时、分、秒进行加1校订、减1校订和清零。本实验中01键、02键、03键是分别对时、分、秒的加1校订;05键、06键、07键时分别对时、分、秒的减1校订;00键是清零键。并且开机时时钟时从000000开端计时的,到235959时在回到000000.
3.2 程序流程图
主程序流程图
3.3程序清单…
ORG 0000H
LJMP START
ORG 000BH
LJMP INTT0
ORG 001BH
LJMP INTT1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
START: MOV SP, #60H
MOV R0, #5
LOOP1: MOV R1, #200
LOOP2: MOV R2, #250
DJNZ R2, $
DJNZ R1, LOOP2
DJNZ R0,LOOP1 ;延时0.5S
MOV DPTR,#4003H ;8255初始化
MOV A, #81H
MOVX @DPTR, A
MOV R0, #20H
MOV R7, #07H
CLEAR: MOV @R0, #00H
MOV @R1, #00H
INC R0
DJNZ R7,CLEAR ;20H-26H 30H-36H清零
MOV TMOD,#11H ;选择方法.
MOV TH1, #0D8H
MOV TL1, #0F0H
MOV TH0, #3CH
MOV TL0,#0B0H ;赋初值
LOOP: SETB EA
SETB ET0
SETB TR0 ;启动T0计数
LCALL DISPLAY1 ;调用时钟显示程序
LCALL KEYSCAN ;键盘扫描
CJNE A,#0FFH, CHOOSE ;若有键按下,则CHOOSE
SJMP CLOCK ;无键按下,则转LOOP
CHOOSE: CJNE A, #09H,CLOCK
LJMP SECONDS ;若秒表启动键按下,则进入秒表
CLOCK: LCALL DISPLAY1
LCALL KEYSCAN ;再次扫描键盘
CJNE A,#0FFH,SET_A;若有键按下则进入调校
SJMP LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 秒表 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SECONDS: MOV 30H, #00H
MOV 31H, #00H
MOV 32H, #00H
MOV 33H, #00H
MOV 34H, #00H
MOV 35H, #00H
SETB TR1
LOOP3: SETB ET1
LCALL DISPLAY2
LCALL KEYSCAN
CJNE A,#0FFH,PAUSE;若有键按下,则PAUSE
SJMP LOOP3
PAUSE:CLR ET1 ;关中断
CJNE A, #09H, RESET1
CPL TR1;暂停
SJMP LOOP3
RESET1: CJNE A, #0AH, LOOP5
MOV TH1, #0D8H
MOV TL1, #0F0H
SETB TR1
MOV 30, #00H
MOV 31, #00H
MOV 32, #00H
MOV 33, #00H
MOV 34, #00H
MOV 35,#00H;清零
CLR TR1
LCALL DISPLAY2
LJMP LOOP
LOOP5: AJMP LOOP3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 加1子 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
SET_A: CLR ET0 ;关中断
CJNE A,#03H,ADDMM ;按下的键为秒键往下履行
INC 25H
MOV A, 25H
CJNE A, #10, LOOP4
MOV 25H, #0
INC 24H
MOV A, 24H
CJNE A, #6, LOOP4
MOV 24H, #0
SJMP LOOP
ADDMM: CJNE A,#02H,ADDHH ;按下的键为分键往下履行
INC 23H
MOV A, 23H
CJNE A, #10, LOOP4
MOV 23H, #0
INC 22H
MOV A, 22H
CJNE A, #6, LOOP4
MOV 22H, #0
LJMP LOOP
ADDHH: CJNE A,#01H,REST ;按下的键为小时键往下履行
INC 21H
MOV A, 21H
CJNE A, #10, A_HOUR
MOV 21H, #0
INC 20H
REST: CJNE A,#00H,DECSS
MOV 20H, #00H
MOV 21H, #00H
MOV 22H, #00H
MOV 23H, #00H
MOV 24H, #00H
MOV 25H, #00H
A_HOUR: MOV A, 20H
SWAP A
ORL A, 21H
CJNE A, #24H, LOOP4
MOV 20H, #0
MOV 21H, #0
LOOP4: LJMP LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 减1子 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
SET_D: LJMP LOOP
DECSS: CJNE A,#07H,DECMM
MOV A, 25H
DEC 25H
CJNE A, #0, SET_D
MOV 25H, #9
MOV A, 24H
DEC 24H
CJNE A, #0, SET_D
MOV 24H, #5
SJMP SET_D
DECMM: CJNE A, #06H, DECHH
MOV A, 23H
DEC 23H
CJNE A, #0H, SET_D
MOV 23H, #9
MOV A,
DEC 22H
CJNE A, #0, SET_D
MOV 22H, #5
SJMP SET_D
DECHH: CJNE A,#05H,SET_D
MOV A, 21H
CJNE A, #0, D_HOUR1
MOV A, 20H
CJNE A, #0,D_HOUR2
MOV 21H, #3
MOV 20H, #2
SJMP SET_D
D_HOUR1: DEC 21H
LJMP SET_D
D_HOUR2: DEC 20H
MOV 21H, #9
LJMP SET_D
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 时钟显示程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 显示数据在20H-25H单元内,用六位LED共阳数码管显示,
DISPLAY1: MOV PSW, #08H
MOV R0, #20H
MOV R2, #0FEH
LD0: MOV A,@R0
MOV DPTR, #DTAB
MOVC A,@A+DPTR ;查字形代码
MOV DPTR,#4001H ;字形代码送B段口
MOVX @DPTR, A
MOV A, R2
MOV DPTR,#4000H ;字形代码送A位口
MOVX @DPTR, A
MOV R1, #250
DJNZ R1, $
MOV A,#0FFH ;封闭所有的显示位即位口置高电平
MOVX @DPTR, A
MOV A, R2
RL A
MOV R2, A
INC R0
CJNE R0, #26H,LD0
RET
DTAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H
DB 92H, 82H, 0F8H, 80H, 90H
DB 88H, 83H, 0C6H, 0A1H, 86H
DB 8EH, 40H, 79H, 24H, 30H
DB 19H, 12H, 02H, 78H, 00H
DB 80H, 08H, 03H, 46H, 21H
DB 06H, 0EH, 0BFH, 0FFH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 秒表显示程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 显示数据在30H-35H单元内,用六位LED共阳数码管显示,
DISPLAY2: MOV PSW, #08H
MOV R0, #30H
MOV R2, #0FEH
LD1: MOV A,@R0
MOV DPTR, #DTAB1
MOVC A,@A+DPTR ;查字形代码
MOV DPTR,#4001H ;字形代码送B段口
MOVX @DPTR, A
MOV A, R2
MOV DPTR,#4000H ;字形代码送A位口
MOVX @DPTR, A
MOV R1, #250
DJNZ R1, $
MOV A,#0FFH ;封闭所有的显示位即位口置高电平
MOVX @DPTR, A
MOV A, R2
RL A
MOV R2, A
INC R0
CJNE R0, #36H,LD1
RET
DTAB1: DB 0C0H, 0F9H , 0A4H, 0B0H, 99H
DB 92H, 82H, 0F8H, 80H, 90H
DB 88H, 83H, 0C6H, 0A1H, 86H
DB 8EH, 40H, 79H, 24H, 30H
DB 19H, 12H, 02H, 78H, 00H
DB 80H, 08H, 03H, 46H, 21H
DB 06H, 0EH, 0BFH, 0FFH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 键盘扫描程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYSCAN: MOV DPTR, #4002H
MOV A, #0FH
MOVX @DPTR, A
MOVX A,@DPTR
ANL A, #0FH
CJNE A, #0FH,NEXT
SJMP DONE
NEXT: MOV R2, #0EFH
KEYSM1: MOV A, R2
MOV DPTR, #4002H
MOVX @DPTR, A
MOVX A,@DPTR
ANL A, #0FH
CJNE A, #0FH, NEXT1
KEYSM2: MOV A, R2
RL A
MOV R2, A
JB ACC.0, KEYSM1
DONE: MOV A, #0FFH
RET
NEXT1: MOV R6, A
MOV R3, #100
LOOP9: MOV R4, #100
DJNZ R4, $
DJNZ R3, LOOP9
MOVX A,@DPTR
ANL A, #0FH
XRL A, R6
JNZ KEYSM2
LOOP20: MOVX A,@DPTR
ANL A, #0FH
CJNE A, #0FH, LOOP20
MOV A, R6
ANL A, #0FH
MOV R6, A
MOV A, R2
ANL A, #0F0H
ORL A, R6
CALL KEY20
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 查键值程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY20: PUSH ACC
MOV R1, #00H
KEY21: JNB ACC.4, KEY22
RR A
INC R1
SJMP KEY21
KEY22: MOV A, R1
MOV B, #4
MUL AB
MOV R1, A
POP ACC
KEY23: JNB ACC.0,KEY24
RR A
INC R1
SJMP KEY23
KEY24: MOV DPTR, #KEYTAB
MOV A, R1
MOVC A,@A+DPTR
RET
KEYTAB: DB 0FH, 0BH, 07H, 03H
DB 0EH, 0AH, 06H, 02H
DB 0DH, 09H, 05H, 01H
DB 0CH, 08H ,04H, 00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; T1中断服务程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
INTT1: PUSH ACC
PUSH PSW
MOV TH1, #0D8H
MOV TL1, #0F0H
INC 35H
MOV A, 35H
CJNE A,#10,OUTT1;未到1秒,则转RETURN
MOV 35H, #00H
INC 34H ;到1秒,秒单元的个位加1
MOV A, 34H
CJNE A, #10, OUTT1;
MOV 34H, #00H
INC 33H
MOV A, 33H
CJNE A,#10,OUTT1;未到60秒,则转
MOV 33H , #00H
INC 32H ; 分单元个位加1
MOV A, 32H
CJNE A , #06,OUTT1
MOV 32H, #00H
INC 31H
MOV A, 31H
CJNE A,#10H,CCC ;若未到60分,则转
MOV A, 30H
CJNE A, #06H, CCC
MOV 31H, #00H
MOV 30H, #00H
CCC: CJNE A, #10, OUTT1
MOV 31H, #00H
INC 30H
MOV A, 30H
OUTT1: POP PSW
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; T0中断服务程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
INTT0: PUSH ACC
PUSH PSW
MOV TH0, #3CH
MOV TL0, #0B0H
INC 26H
MOV A, 26H
CJNE A,#20,OUTT0 ;未到1秒,则转RETURN
MOV 26H, #00H
INC 25H ;到1秒,秒单元的个位加1
MOV A, 25H
CJNE A, #10, OUTT0;
MOV 25H, #00H
INC 24H
MOV A, 24H
CJNE A,#6,OUTT0;未到60秒,则转
MOV 24H, #00H
INC 23H ; 分单元个位加1
MOV A, 23H
CJNE A, #10, OUTT0
MOV 23H, #00H
INC 22H
MOV A, 22H
CJNE A,#06H,OUTT0 ;若未到60分,则转
MOV 22H, 00H
INC 21H
MOV A, 21H
CJNE A, #4H, CCCC
MOV A, 20H
CJNE A, #2H, CCCC
MOV 21H, #00H
MOV 20H, #00H
CCCC: CJNE A, #10, OUTT0
MOV 21H, #00H
INC 20H
MOV A, 20H
OUTT0: POP PSW
POP ACC
RETI
END
单片机课程设计电子钟一实现功能1能够实现准确计时以数字形式显示时分秒的时间2小时以24小时计时形式分秒计时为60进位能够调节时钟时…
单片机课程设计报告基于单片机的数字钟班级姓名学号设计时间单片机课程设计正文一引言现代社会科技飞速发展人们生活节奏加快时间就是金钱时…
科技创新实践[数字时钟设计][用AT89S52单片机设计电子时钟的实验报告]目录单片机的个性化电子钟设计报告1一、设计背景1二、作…
西安建筑科技大学课程设计论文第1章绪论1设计要求1系统可以按秒进行计时2数字时钟可以显示小时0023分钟0059和秒00593可通…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…
单片机数字钟设计心得体会经过一周的课程设计,我收获颇多,有深刻的心得体会。实训让我们受益匪浅。首先是关于单片机方面的。我们学到了许…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…
单片机课程设计报告基于单片机的数字钟班级姓名学号设计时间单片机课程设计正文一引言现代社会科技飞速发展人们生活节奏加快时间就是金钱时…
单片机课程设计电子钟一实现功能1能够实现准确计时以数字形式显示时分秒的时间2小时以24小时计时形式分秒计时为60进位能够调节时钟时…
西安建筑科技大学课程设计论文第1章绪论1设计要求1系统可以按秒进行计时2数字时钟可以显示小时0023分钟0059和秒00593可通…