经过几天的尽力,第一个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,顺便仿真图和程序源代码及实物图………
仿真图
实物图现在还差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 ;中止回来