c51单片机时钟程序汇编语言,51单片机时钟汇编程序

终于到了……感动ing...自己也可以DIY一个电子时钟了。

电路板和原件要另外找,南宁市的电子元件稀少得真难找啊,弄好后焊接,看来要找个好点的焊台,这样焊接电路时比较方便。

电路如下:

;简单的89C2051时钟程序

;显示方式为.12:34之12小时制

;P1口输出段数据,P3口输出位数据

;P1.7为秒点,P3.7为PM输出

;P3.4校时,P3.5校分

;晶振12MHz

flash equ 31h

sec equ 32h      ;定义秒存储位置

min equ 33h      ;定义分存储位置

hour equ 34h

hourk bit p3.4   ;调时按钮

mink bit p3.5    ;调分按钮

pm bit p3.7      ;PM输出端

org 0000h

ajmp start

org 000bh

ajmp int_t0

org 0100h

start: mov a,#00h       ;清0

mov 30h,a

mov flash,a

mov sec,a        ;秒清0

mov min,#00      ;分清0

mov hour,#12

mov sp,#60h      ;重设堆栈指针

setb pm          ;PM清0

mov p1,#0ffh

mov p3,#0ffh

mov tmod,#01h    ;设定定时器0工作于方式1

mov tl0,#0b0h    ;设定定时初始值50ms

mov th0,#3ch

setb ea          ;启动定时

setb et0

setb tr0

key:   lcall disp       ;按键处理子程序

jb hourk,mmm

hhh:   lcall disp

jnb hourk,hhh

inc hour         ;时加1

mov a,hour

cjne a,#12,ppp

cpl pm           ;PM取反

ppp:   cjne a,#13,key

mov hour,#01h    ;12小时到,清零.

mmm:   jb mink,key

nnn:   lcall disp

jnb mink,nnn

inc min

mov a,min

cjne a,#60,key

mov min,#00h     ;一小时时间到

ajmp key

int_t0:push acc         ;保护现场

mov tl0,#0b0h    ;赋定时初值

mov th0,#3ch

inc 30h          ;20H地址加1

mov a,30h

cjne a,#10,reti1

mov 30h,#00h     ;半秒钟时间到

inc flash        ;半秒加1

mov a,flash

cjne a,#2,reti1

mov flash,#00h

inc sec          ;秒加1

mov a,sec

cjne a,#60,reti1

mov sec,#00h     ;一分钟时间到

inc min          ;分加1

mov a,min

cjne a,#60,reti1

mov min,#00h     ;一小时时间到

inc hour         ;时加1

mov a,hour

cjne a,#12,cont

cpl pm           ;PM取反

cont:  cjne a,#13,reti1

mov hour,#01h    ;12小时到,清零.

reti1: pop acc          ;恢复现场

reti             ;中断返回

disp:  mov a,#10

mov b,a

mov a,hour

div ab

cjne a,#01,zero

jmp normal

zero:  mov a,#10        ;消隐无效零

normal:mov dptr,#tab

movc a,@a+dptr

mov p1,a

clr p3.0

lcall dely

setb p3.0

mov a,b

mov dptr,#tab

movc a,@a+dptr

mov p1,a

clr p3.1

lcall dely

setb p3.1

mov a,#10

mov b,a

mov a,min

div ab

mov dptr,#tab

movc a,@a+dptr

mov p1,a

clr p3.3

lcall dely

setb p3.3

mov a,b

mov dptr,#tab

movc a,@a+dptr

mov p1,a

clr p3.2

lcall dely

setb p3.2

mov a,flash

cjne a,#00,light

setb p1.7

lcall dely

jmp over

light: clr p1.7

lcall dely

over:  ret              ;子程序返回

tab:   db 88h,0afh,91h,0a1h,0a6h,0e0h,0c0h,0adh,80h,0a0h,0ffh;共阳段码表0123456789不亮

dely:  mov r6,#10

d1:    mov r7,#20

d2:    djnz r7,d2

djnz r6,d1

ret

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值