您的位置:网站首页 > 电器维修资料网 > 正文 >
汇编电子钟的设计编程
来源: 日期:2013-12-12 11:13:49 人气:标签:
先来个效果图:
mini_second equ 30h ;设置0.05秒、秒、分、时的地址
second equ 31h
minute equ 32h
clock equ 33h
k1 equ p3.2 ;设置按键地址,为外部中断口int0和int1
k2 equ p3.3
org 0000h
ljmp start
org 000bh
ljmp t0_x ;使用中断计时
org 0050h
start: mov mini_second,#00h ;清零
mov second,#00h
mov minute,#00h
mov clock,#00h
mov tmod,#01h ;置工作方式1,开定时器
mov th0,#3ch
mov tl0,#0b0h
setb ea
setb et0
setb tr0
start1: lcall show_led ;主程序跳转程序显示
lcall key_d ;置数程序
ljmp start1 ;一直循环显示
t0_x:
push acc ;保护现场
push psw
mov th0,#3ch ;置初值,这个不是很准确,
mov tl0,#0b4h ;估计一分钟慢个2~3秒
inc mini_second
mov a,mini_second
cjne a,#20,ret0 ;20次为1秒,没有20次均跳出中断重新跳
mov mini_second, #00h
mov a,second
add a,#01h
da a
mov second,a
cjne a,#60h,ret0 ;1秒后出循环,每秒后秒清零,跳到分计时加1
mov second,#00h
mov a,minute
add a,#01h ;分同秒
da a
mov minute,a
cjne a,#60h,ret0
mov minute,#00h
mov a,clock
add a,#01h
da a
mov clock,a
cjne a,#24h,ret0
mov clock,#00h
ret0: pop psw ;结束保护,跳出
pop acc
reti
nop
nop
nop
;======================================显示子程序
show_led:
mov a,second ;个位秒显示
anl a,#0fh
mov 40h,a
clr p1.5 ;片选数码管
clr p1.6
setb p1.7
mov a,40h
lcall led_x
lcall delay
mov a,second ;十位秒显示
anl a,#0f0h
swap a
mov 41h,a
setb p1.5
clr p1.6
setb p1.7
mov a,41h
lcall led_x
lcall delay
mov a,minute ;个位分显示
anl a,#0fh
mov 42h,a
setb p1.5
setb p1.6
setb p1.7
mov a,42h
lcall led_x
lcall delay
mov a,minute ;十位分显示
anl a,#0f0h
swap a
mov 43h,a
clr p1.5
clr p1.6
clr p1.7
mov a,43h
lcall led_x
lcall delay
mov a,clock ;个位时显示
anl a,#0fh
mov 44h,a
clr p1.5
setb p1.6
clr p1.7
mov a,44h
lcall led_x
lcall delay
mov a,clock ;十位时显示
anl a,#0f0h
swap a
mov 45h,a
setb p1.5
setb p1.6
clr p1.7
mov a,45h
lcall led_x
lcall delay
ret
led_x: mov dptr,#led_data
movc a,@a+dptr
mov p0,a
ret
;====================================延迟子程序
delay: mov r7,#10
de1: mov r6,#100 ;延时1ms多一点,因为晶振为11.0592mhz
djnz r6,$
djnz r7,de1
ret
;===================================数码管的段选码
led_data: db 0c0h,0f9h,0a4h,0b0h,099h,92h,82h,0f8h,80h,90h
;=====================================置数子程序
key_d: jnb k1,key1
jnb k2,key2
ret
key1: mov a,minute ;查询方式 ————> 分位置数
clr c ;清零进位,防止干扰da和cjne指令的操作
inc a ;累加器自加一 ,此为加法置数
da a ;十进制处理
cjne a, #60h, k_01 ;判断是否为60,为60清零,跳出
mov a,#00h
k_01: mov minute,a
jnb k1,$
ret
key2: mov a,clock ;时位 置数同上
clr c
inc a
da a
cjne a, #24h,k_11
mov a,#00h
k_11: mov clock,a
jnb k2,$
ret
本程序如有雷同,纯属不可能 ?
我的不够成熟或称之为幼稚的汇编编程,郑文老师的独特学习板子(显示数码管是p0口,片选竟然是用p1口3个i/o口接138,——!这个独特焊接方式让我程序写得这么长),郑子含老师对我置数程序的修改,才出来的程序,虽然不是什么成功,至少是一个开始,我会继续疯下去的。这个时钟的弊端挺多的,比如置数的时候,会有闪屏现象,程序我会再改进的。 ?
后记:对于院系电子设计竞赛我的失败我得向我的组员道歉,虽然我知道那些所谓成功的几组也比我们好不到哪里去(看过答辩了),但是我会继续我们的课题,加油吧 ?
编译工具:wave6000 ?
烧制工具:stc-isp(话说国产的stc公司要统一全球51市场,呵呵) 、rs232串口
【看看这篇文章在百度的收录情况】
相关文章
- 上一篇: 可以调整时间的电子时钟的C语言
- 下一篇: 单片机与电脑串口通信控制及附带遥控控制程序