您的位置 首页 芯闻

单片机 电子时钟(汇编)

今天很高兴,一次性就把这个电子时钟写了出来(今晚的单片机实验,记得去年自学单片机的时候,这个还真是写不出来,不过这个时钟只是静态的…

今日很快乐,一次性就把这个电子时钟写了出来(今晚的单片机试验,记住上一年自学单片机的时分,这个还真是写不出来,不过这个时钟仅仅静态的,不能够用手艺来修正,这点仍是不行完善,今后有时间了的话,我从头写一下,呵呵)

count equ 9217 ;界说1s计数值,关于11.0592的晶振来说,延时10ms

second equ 30h ;界说暂时变量区

second_ge equ 31h

second_shi equ 32h

minute equ 33h

minute_ge equ 34h

minute_shi equ 35h

hour equ 36h

hour_ge equ 37h

hour_shi equ 38h

org 0000h

sjmp main ;进入主程序

org 0003h

reti

org 000bh ;time0(定时器/计数器T0进口地址)

ljmp int_time0 ;跳转到中止0服务程序

org 001bh

reti

org 0023h

reti

main:

mov r0,#0 ;初始化程序(本程序初始值设为13:33:22)

mov second,#22

mov second_ge,#0

mov second_shi,#0

mov minute,#33

mov minute_ge,#0

mov minute_shi,#0

mov hour,#13

mov hour_ge,#0

mov hour_shi,#0

mov tmod,#00000001b

mov th0,#high(65536-count) ;取高八位数据

mov tl0,#low(65536-count) ;取底五位

clr tf0

setb ea

setb et0

setb tr0 ;开端计时

loop:

lcall digitor_display ;调用数码管扫描显现程序

sjmp loop ;程序在此循环

;定时器0中止

int_time0:

push acc

push psw

clr tf0

mov th0,#high(65536-count) ;取高八位数据

mov tl0,#low(65536-count) ;取底五位

inc r0

cjne r0,#100,ret_loop ;秒值加一

sjmp second_add

second_add: ;秒值处理

mov r0,#0

inc second

mov a,second

cjne a,#60, ret_loop

sjmp minute_add

minute_add: ;分值处理

mov second,#0

inc minute

mov a,minute

cjne a,#60, ret_loop

sjmp hour_add

hour_add: ;小时处理

mov minute,#0

inc hour

mov a,hour

cjne a,#24,ret_loop

sjmp hour_reset

hour_reset:

mov hour,#0

ret_loop:

pop psw

pop acc

reti ;中止回来

digitor_display: ;数码管扫描

push acc

push psw

mov a,second

mov b,#10

div ab

mov second_shi,a

mov second_ge,b

mov a,minute

mov b,#10

div ab

mov minute_shi,a

mov minute_ge,b

mov a,hour

mov b,#10

div ab

mov hour_shi,a

mov hour_ge,b

mov p1,#11011111b ;显现秒钟的个位

mov a,second_ge

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

mov p1,#11101111b ;显现秒钟的十位

mov a,second_shi

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

mov p1,#11110111b ;显现分钟的个位

mov a,minute_ge

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

mov p1,#11111011b ;显现分钟的十位

mov a,minute_shi

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

mov p1,#11111101b ;显现小时的个位

mov a,hour_ge

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

mov p1,#11111110b ;显现小时的十位

mov a,hour_shi

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

pop psw

pop acc

ret ;扫描程序回来

table: ;共阴极数码管扫描码

DB 3FH ;0

DB 06H ;1

DB 5BH ;2

DB 4FH ;3

DB 66H ;4

DB 6DH ;5

DB 7DH ;6

DB 27H ;7

DB 7FH ;8

DB 6FH ;9

delay: mov r4,#5 ;延时函数(延时大约5*255*2=25ms)

l1: mov r5,#0ffh

l2: djnz r5,$

djnz r4,l1

ret

end

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/266739.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部