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十位數。若按開鎖編碼規定數的先後順...