設計具有特定功能的電子鐘。該電子鐘上電或按鍵復位後能自動顯示系統提示符「P進入時鐘準備狀態

時間 2021-09-02 04:54:47

1樓:o酒醒何處

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 中斷入口程式;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;org 0000h ;程式執行開始地址

ljmp start ;跳到標號start執行

org 0003h ;外中斷0中斷程式入口

reti ;外中斷0中斷返回

org 000bh ;定時器t0中斷程式入口

ljmp intt0 ;跳至intto執行

org 0013h ;外中斷1中斷程式入口

reti ;外中斷1中斷返回

org 001bh ;定時器t1中斷程式入口

ljmp intt1 ;跳至intt1執行

org 0023h ;序列中斷程式入口地址

reti ;序列中斷程式返回

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 主 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;start: mov r0,#70h ;清70h-7ah共11個記憶體單元

mov r7,#0bh

;clr p3.7 ;

cleardisp: mov @r0,#00h ;

inc r0 ;

djnz r7,cleardisp ;

mov 20h,#00h ;清20h(標誌用)

mov 7ah,#0ah ;放入"熄滅符"資料

mov tmod,#11h ;設t0、t1為16位定時器

mov tl0,#0b0h ;50ms定時初值(t0計時用)

mov th0,#3ch ;50ms定時初值

mov tl1,#0b0h ;50ms定時初值(t1閃爍定時用)

mov th1,#3ch ;50ms定時初值

setb ea ;總中斷開放

setb et0 ;允許t0中斷

setb tr0 ;開啟t0定時器

mov r4,#14h ;1秒定時用初值(50ms×20)

start1: lcall display ;呼叫顯示子程式

jnb p3.7,setmm1 ;p3.7口為0時轉時間調整程式

sjmp start1 ;p3.7口為1時跳回start1

setmm1: ljmp setmm ;轉到時間調整程式setmm

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 1秒計時程式;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;t0中斷服務程式

intt0: push acc ;累加器入棧保護

push psw ;狀態字入棧保護

clr et0 ;關t0中斷允許

clr tr0 ;關閉定時器t0

mov a,#0b7h ;中斷響應時間同步修正

add a,tl0 ;低8位初值修正

mov tl0,a ;重灌初值(低8位修正值)

mov a,#3ch ;高8位初值修正

addc a,th0 ;

mov th0,a ;重灌初值(高8位修正值)

setb tr0 ;開啟定時器t0

djnz r4, outt0 ;20次中斷未到中斷退出

addss: mov r4,#14h ;20次中斷到(1秒)重賦初值

mov r0,#71h ;指向秒計時單元(71h-72h)

acall add1 ;呼叫加1程式(加1秒操作)

mov a,r3 ;秒資料放入a(r3為2位十進位制陣列合)

clr c ;清進位標誌

cjne a,#60h,addmm ;

addmm: jc outt0 ;小於60秒時中斷退出

acall clr0 ;大於或等於60秒時對秒計時單元清0

mov r0,#77h ;指向分計時單元(76h-77h)

acall add1 ;分計時單元加1分鐘

mov a,r3 ;分資料放入a

clr c ;清進位標誌

cjne a,#60h,addhh ;

addhh: jc outt0 ;小於60分時中斷退出

acall clr0 ;大於或等於60分時分計時單元清0

mov r0,#79h ;指向小時計時單(78h-79h)

acall add1 ;小時計時單元加1小時

mov a,r3 ;時資料放入a

clr c ;清進位標誌

cjne a,#24h,hour ;

hour: jc outt0 ;小於24小時中斷退出

acall clr0 ;大於或等於24小時小時計時單元清0

outt0: mov 72h,76h ;中斷退出時將分、時計時單後設資料移

mov 73h,77h ;入對應顯示單元

mov 74h,78h ;

mov 75h,79h ;

pop psw ;恢復狀態字(出棧)

pop acc ;恢復累加器

setb et0 ;開放t0中斷

reti ;中斷返回

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 閃動調時 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;t1中斷服務程式,用作時間調整時調整單元閃爍指示

intt1: push acc ;中斷現場保護

push psw ;

mov tl1, #0b0h ;裝定時器t1定時初值

mov th1, #3ch ;

djnz r2,intt1out ;0.3秒未到退出中斷(50ms中斷6次)

mov r2,#06h ;重灌0.3秒定時用初值

cpl 02h ;0.3秒定時到對閃爍標誌取反

jb 02h,flash1 ;02h位為1時顯示單元"熄滅"

mov 72h,76h ;02h位為0時正常顯示

mov 73h,77h ;

mov 74h,78h ;

mov 75h,79h ;

intt1out: pop psw ;恢復現場

pop acc ;

reti ;中斷退出

flash1: jb 01h,flash2 ;01h位為1時,轉小時熄滅控制

mov 72h,7ah ;01h位為0時,"熄滅符"資料放入分

mov 73h,7ah ;顯示單元(72h-73h),將不顯示分資料

mov 74h,78h ;

mov 75h,79h ;

ajmp intt1out ;轉中斷退出

flash2: mov 72h,76h ;01h位為1時,"熄滅符"資料放入小時

mov 73h,77h ;顯示單元(74h-75h),小時資料將不顯示

mov 74h,7ah ;

mov 75h,7ah ;

ajmp intt1out ;轉中斷退出

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 加1子 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;add1: mov a,@r0 ;取當前計時單後設資料到a

dec r0 ;指向前一地址

swap a ;a中資料高四位與低四位交換

orl a,@r0 ;前一地址中資料放入a中低四位

add a,#01h ;a加1操作

da a ;十進位制調整

mov r3,a ;移入r3暫存器

anl a,#0fh ;高四位變0

mov @r0,a ;放回前一地址單元

mov a,r3 ;取回r3中暫存資料

inc r0 ;指向當前地址單元

swap a ;a中資料高四位與低四位交換

anl a,#0fh ;高四位變0

mov @r0,a ;資料放入當削地址單元中

ret ;子程式返回

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 清零程式 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;對計時單元復零用

clr0: clr a ;清累加器

mov @r0,a ;清當前地址單元

dec r0 ;指向前一地址

mov @r0,a ;前一地址單元清0

ret ;子程式返回

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 時鐘調整程式;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;當調時按鍵按下時進入此程式

setmm: clr et0 ;關定時器t0中斷

clr tr0 ;關閉定時器t0

lcall dl1s ;呼叫1秒延時程式

jb p3.7,closedis ;鍵按下時間小於1秒,關閉顯示(省電)

mov r2,#06h ;進入調時狀態,賦閃爍定時初值

setb et1 ;允許t1中斷

setb tr1 ;開啟定時器t1

set2: jnb p3.7,set1 ;p3.7口為0(鍵未釋放),等待

setb 00h ;鍵釋放,分調整閃爍標誌置1

set4: jb p3.7,set3 ;等待鍵按下

lcall dl05s ;有鍵按下,延時0.5秒

jnb p3.7,sethh ;按下時間大於0.5秒轉調小時狀態

mov r0,#77h ;按下時間小於0.5秒加1分鐘操作

lcall add1 ;呼叫加1子程式

mov a,r3 ;取調整單後設資料

clr c ;清進位標誌

cjne a,#60h,hhh ;調整單後設資料與60比較

hhh: jc set4 ;調整單後設資料小於60轉set4迴圈

lcall clr0 ;調整單後設資料大於或等於60時清0

clr c ;清進位標誌

ajmp set4 ;跳轉到set4迴圈

closedis: setb et0 ;省電(led不顯示)狀態。開t0中斷

setb tr0 ;開啟t0定時器(開時鐘)

close: jb p3.7,close ;無按鍵按下,等待。

lcall display ;有鍵按下,調顯示子程式延時削抖

jb p3.7,close ;是干擾返回close等待

waith: jnb p3.7,waith ;等待鍵釋放

ljmp start1 ;返回主程式(led資料顯示亮)

sethh: clr 00h ;分閃爍標誌清除(進入調小時狀態)

sethh1: jnb p3.7,set5 ;等待鍵釋放

setb 01h ;小時調整標誌置1

set6: jb p3.7,set7 ;等待按鍵按下

lcall dl05s ;有鍵按下延時0.5秒

jnb p3.7,setout ;按下時間大於0.5秒退出時間調整

mov r0,#79h ;按下時間小於0.5秒加1小時操作

lcall add1 ;調加1子程式

mov a,r3 ;

clr c ;

cjne a,#24h,houu ;計時單後設資料與24比較

houu: jc set6 ;小於24轉set6迴圈

lcall clr0 ;大於或等於24時清0操作

ajmp set6 ;跳轉到set6迴圈

setout: jnb p3.7,setout1 ;調時退出程式。等待鍵釋放

lcall display ;延時削抖

jnb p3.7,setout ;是抖動,返回setout再等待

clr 01h ;清調小時標誌

clr 00h ;清調分標誌

clr 02h ;清閃爍標誌

clr tr1 ;關閉定時器t1

clr et1 ;關定時器t1中斷

setb tr0 ;開啟定時器t0

setb et0 ;開定時器t0中斷(計時開始)

ljmp start1 ;跳回主程式

set1: lcall display ;鍵釋放等待時呼叫顯示程式(調分)

ajmp set2 ;防止鍵按下時無時鐘顯示

set3: lcall display ;等待調分按鍵時時鐘顯示用

ajmp set4

set5: lcall display ;鍵釋放等待時呼叫顯示程式(調小時)

ajmp sethh1 ;防止鍵按下時無時鐘顯示

set7: lcall display ;等待調小時按鍵時時鐘顯示用

ajmp set6

setout1: lcall display ;退出時鐘調整時鍵釋放等待

ajmp setout ;防止鍵按下時無時鐘顯示

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 顯示程式 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 顯示資料在70h-75h單元內,用六位led共陽數碼管顯示,p0口輸出段碼資料,p3口作

; 掃描控制,每個led數碼管亮1ms時間再逐位迴圈。

display: mov r1,#70h ;指向顯示資料首址

mov r5,#0feh ;掃描控制字初值

play: mov a,r5 ;掃描字放入a

mov p2,a ;從p2口輸出

mov a,@r1 ;取顯示資料到a

mov dptr,#tab ;取段碼錶地址

movc a,@a+dptr ;查顯示資料對應段碼

mov p1,a ;段碼放入p0口

lcall dl1ms ;顯示1ms

inc r1 ;指向下一地址

mov a,r5 ;掃描控制字放入a

jnb acc.5,endout ;acc.5=0時一次顯示結束

rl a ;a中資料迴圈左移

mov r5,a ;放回r5內

ajmp play ;跳回play迴圈

endout: setb p2.5 ;一次顯示結束,p2口復位

mov p1,#0ffh ;p0口復位

ret ;子程式返回

tab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

;1ms延時程式,led顯示程式用

dl1ms: mov r6,#14h

dl1: mov r7,#19h

dl2: djnz r7,dl2

djnz r6,dl1

ret;20ms延時程式,採用呼叫顯示子程式以改善led的顯示閃爍現象

ds20ms: acall display

acall display

acall display

ret;延時程式,用作按鍵時間的長短判斷

dl1s: lcall dl05s

lcall dl05s

retdl05s: mov r3,#20h ;8毫秒*32=0.196秒

dl05s1: lcall display

djnz r3,dl05s1

retend ;程式結束

數位電子鐘的設計與製作,數位電子石英鐘設計

文庫精選 內容來自使用者 gf1682 本數位電子鐘採用最基本的4000系列數字ic,根據數位電路基礎理論設計而成。本電子鐘採用全數字元件,與中職的數位電子技術課程相符,充分考慮了它的實用性,使學生完成製作同時,可以提高動作能力和鞏固所學數位電路知識,同時製成一個實用的數位電子鐘 產品 本電路採用高...

電子鐘上的MODE,SET,UP,DOWN是什麼意思

mode是模式,set是設定up,down分別是向上和向下。以萬年曆電子鐘為例,具體操作步驟如下 1 首先,必須翻轉萬年曆,也就是說,背面應該面向自己,如下圖所示,然後進入下一步。2 其次,立即按 設定 按鈕 進入時間設定狀態,當年份 閃爍 時,可以按 上 或 下 按鈕修改年份,如下圖所示,然後進入...

怎樣設計並製作具有報警功能的密碼電子鎖和門鈴電路

1.編碼按鈕分別為0,1,2,9十個按鍵 可以用矩陣鍵盤實現,2.用發光二極體作為輸出指示燈,燈亮代表鎖 開 燈滅代表鎖 不開 用一個io口,接上二極體,接上限流電阻,接地。密碼正確,另該io口值為1,否則為0 3.設定開鎖密碼,並按此密碼設計電路。密碼可以是0 9十位數。若按開鎖編碼規定數的先後順...