新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī) 電子時(shí)鐘(匯編)

單片機(jī) 電子時(shí)鐘(匯編)

作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
今天很高興,一次性就把這個(gè)電子時(shí)鐘寫了出來(今晚的單片機(jī)實(shí)驗(yàn),記得去年自學(xué)單片機(jī)的時(shí)候,這個(gè)還真是寫不出來,不過這個(gè)時(shí)鐘只是靜態(tài)的,不能夠用手工來修改,這點(diǎn)還是不夠完善,以后有時(shí)間了的話,我重新寫一下,呵呵)

count equ 9217 ;定義1s計(jì)數(shù)值,對于11.0592的晶振來說,延時(shí)10ms

本文引用地址:http://butianyuan.cn/article/201611/315820.htm

second equ 30h ;定義臨時(shí)變量區(qū)

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 ;進(jìn)入主程序

org 0003h

reti

org 000bh ;time0(定時(shí)器/計(jì)數(shù)器T0入口地址)

ljmp int_time0 ;跳轉(zhuǎn)到中斷0服務(wù)程序

org 001bh

reti

org 0023h

reti

main:

mov r0,#0 ;初始化程序(本程序初始值設(shè)為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) ;取高八位數(shù)據(jù)

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

clr tf0

setb ea

setb et0

setb tr0 ;開始計(jì)時(shí)

loop:

lcall digitor_display ;調(diào)用數(shù)碼管掃描顯示程序

sjmp loop ;程序在此循環(huán)

;定時(shí)器0中斷

int_time0:

push acc

push psw

clr tf0

mov th0,#high(65536-count) ;取高八位數(shù)據(jù)

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: ;小時(shí)處理

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: ;數(shù)碼管掃描

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 ;顯示秒鐘的個(gè)位

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 ;顯示分鐘的個(gè)位

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 ;顯示小時(shí)的個(gè)位

mov a,hour_ge

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

mov p1,#11111110b ;顯示小時(shí)的十位

mov a,hour_shi

mov dptr,#table

movc a,@a+dptr

mov p2,a

lcall delay

pop psw

pop acc

ret ;掃描程序返回

table: ;共陰極數(shù)碼管掃描碼

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 ;延時(shí)函數(shù)(延時(shí)大概5*255*2=25ms)

l1: mov r5,#0ffh

l2: djnz r5,$

djnz r4,l1

ret

end



評論


技術(shù)專區(qū)

關(guān)閉