微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机 电子时钟(汇编)

单片机 电子时钟(汇编)

时间:11-18 来源:互联网 点击:
今天很高兴,一次性就把这个电子时钟写了出来(今晚的单片机实验,记得去年自学单片机的时候,这个还真是写不出来,不过这个时钟只是静态的,不能够用手工来修改,这点还是不够完善,以后有时间了的话,我重新写一下,呵呵)

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top