新闻中心

EEPW首页>嵌入式系统>设计应用> 汇编电子钟的设计

汇编电子钟的设计

作者: 时间:2012-09-17 来源:网络 收藏

8.jpg写在前面:
前天晚上断网之后闲来无事忽然心血来潮想起和谁说过以我现在的水平做个时钟没有什么问题,就准备将它实现了。借用老师的学习板子,一直搞到凌晨2点做出了一个24小时的计数器显示,因为没有学过按键的使用方法,昨天实验课下课后问了老师,她给出了查询方式。昨晚搞了下,可以置数,但是不能实现0~60范围加,只能0~99加。今天上午在老师的指导下,终于可以了,总算没有食言啊。呵呵,下面贴出程序了。
先来个效果图:

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


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串口



关键词:设计电子钟汇编

评论


相关推荐

技术专区

关闭