新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機 電子時鐘(匯編)

單片機 電子時鐘(匯編)

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

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

本文引用地址:http://2s4d.com/article/201611/315820.htm

second equ 30h ;定義臨時變量區(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 ;進入主程序

org 0003h

reti

org 000bh ;time0(定時器/計數(shù)器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) ;取高八位數(shù)據(jù)

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

clr tf0

setb ea

setb et0

setb tr0 ;開始計時

loop:

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

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

;定時器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: ;小時處理

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

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: ;共陰極數(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ù)(延時大概5*255*2=25ms)

l1: mov r5,#0ffh

l2: djnz r5,$

djnz r4,l1

ret

end



評論


技術專區(qū)

關閉