新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机4位数码管电子时钟

单片机4位数码管电子时钟

作者: 时间:2016-11-29 来源:网络 收藏
经过几天的努力,第一个51单片机电子时钟终于出炉了,通过4位数码管来显示时间,系统晶振11.0592MHZ,仿真图中用二极管代替时钟冒号闪烁,非门代替三极管,让仿真速度与真实速度达到一致,本设计用了6个按钮来对时间及闹钟时间的调节、关闭,p3.2接时间分加1按钮,p3.3接时间时加1按钮,p3.4接闹钟时间与当前时间切换按钮,按住不放显示闹钟的时间,闹钟初始化为00:00,放开按钮则显示当前时间,p3.5接闹钟加1按钮,p3.6接闹钟时加1按钮,p3.7接关闭闹钟按钮

有没有人会问 ,怎么没有减的按钮呢???
为了不用那么多按钮,所以只设置了加1的按钮,那减的怎么办??
程序的设计是这样的,当分加到59的时候,再加一次就变00,当时加到23的时候,再加一次就变00,从而实现了减的效果,O(∩_∩)O,附带仿真图和程序源代码及实物图.........

本文引用地址://m.amcfsurvey.com/article/201611/323565.htm

仿真图

实物图目前还差3个按钮,准备补上(^o^)/~,电源的指示灯太亮了╮(╯▽╰)╭,准备把它拆了


作者:胡琴
联系qq:1257394091
本程序版本规本人所有可以任意转载:
技术支持网站:http://www.51hei.com
本程序已经通过软件仿真和硬件制作.

程序源代码:
org 0000h
ajmp main ;调至主程序
org 000bh ;T0中断入口地址
ljmp inti0
org 001bh ;T1中断入口地址
ljmp inti1
org 0030h
main:mov tmod,#11h ;设T0、T1为模式1
mov ie,#8ah ;开T0、T1中断允许
mov th0,#4ch ;赋T0 50ms初值
mov tl0,#00h
mov th1,#4ch ;赋T1 50ms初值
mov tl1,#00h
mov sp,#60h ;设置堆栈指针
mov r0,#20 ; T0 50ms计数20次
mov 31h,#00 ;时间秒初始化
mov 32h,#00 ;时间分初始化
mov 33h,#00 ;时间时初始化
mov 38h,#00 ;闹钟分初始化
mov 39h,#00 ;闹钟时初始化
setb tr0 ;启动T0
setb tr1 ;启动T1
loop:lcall display ;调用时间显示子程序
lcall key ;调用时间调节按键子程序
lcall keynz ;调用闹钟按键子程序
ajmp loop
inti0:push psw ;保护现场
push acc
clr ea ;关中断
mov th0,#4ch ;重赋50ms初值
mov tl0,#00h
djnz r0,out ;对50ms计数判断
mov r0,#20 ;重赋50ms计数值
inc 31h ;秒加1
cpl p2.2 ;P2.2取反输出
mov a,31h
cjne a,#60,out ;判秒是否加到60,没有加到中断返回
mov 31h,#00 ;秒加到60,对秒清零
inc 32h ;分加1
mov a,32h
cjne a,#60,out ;判分是否加到60,没有加到就中断返回
mov 32h,#00 ;分加到60,对分清零
inc 33h ;时加1
mov a,33h
cjne a,#24,out ;判时是否加到24,没有就中断返回
mov 33h,#00 ;时加到24,对时清零
out: setb ea ;开中断
pop acc ;恢复现场
pop psw
reti ;中断返回
inti1:push psw ;保护现场
push acc
clr ea ;关中断
mov th1,#4ch ;赋50ms初值
mov tl1,#00h
inc 3ah
mov a,3ah
cjne a,#20,out1 ;判断50ms计数是否到20,没到就中断返回
mov 3ah,#00 ;50ms计数到20,将计数单元清零
mov a,32h
cjne a,38h,out1 ;闹钟分与时间分判断
mov a,33h
cjne a,39h,out1 ;闹钟时与时间时判断
clr p1.0 ;相等就清p1.0输出
out1: setb ea ;开中断
pop acc ;恢复现场
pop psw
reti ;中断返回


上一页 1 2 下一页

评论


技术专区

关闭