基本思想:
當需要編寫程式實現較複雜的功能時,整個程式就如同乙個裝配體(總成),而子程式就如同裝配體中的零件,子程式與主程式的介面就如同機械中的連線件將不同零件裝配起來。
使用子程式能使程式結構更清晰,且邏輯不易發生錯誤。
實現電子時鐘需要的子程式:
1.顯示子程式disp
2.顯示延時子程式dey1
3.中斷服務intt0
4.中斷服務退出子程式out
5.加一子程式add1
6.清空子程式clr0
應注意的事項:
1.位選應與段碼輸送相配合,若使用p2位選,p2.0連線最前端的數碼管,則p2=#00000001b,即p2.0=1時,應輸送小時的最高位段碼
2.若通過p2左移實現顯示,可通過左移次數判斷一次顯示是否完成,也可將p2的值賦給a,通過判斷acc.7是否為1得到一次顯示是否完成,後者在實現上更方便
3.進入中斷服務時,可將中斷允許et0先斷開,在中斷服務退出子程式中再將et0開啟,可減少計時誤差
4.判斷秒鐘、分鐘是否達到60,時鐘是否達到24,用djne語句比用減法後判斷jc更簡單
5.當秒鐘、分鐘達到60,時鐘達到24時,需呼叫清空子程式clr0將其清0
6.加一子程式add1可通過16進製制數加#01h後通過十進位制調整指令da將其轉換為10進製數,通過分別遮蔽高、低4位並通過swap指令分別賦給對應的顯緩區
7.共陽極8位二極體顯示0~9的段碼分別為:
0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
顯示橫槓(——)的段碼為0bfh
共陰極段碼取反即可
程式**如下:
使用proteus7.5**的效果如下:org 0000h
ljmp main
org 000bh
ljmp intt0
org 0100h
main: mov tmod,#01h
mov tl0,#0b0h
mov th0,#3ch
setb ea
setb et0
setb tr0
mov r4,#20
mov 73h,#10
mov 76h,#10
mov dptr,#table
loop: lcall disp
ljmp loop
disp: mov r3,#01h
mov r0,#78h
play: mov a,r3
mov p2,a
mov a,@r0
movc a,@a+dptr
mov p0,a
lcall dey1
mov a,r3
dec r0
jb acc.7,next
rl a
mov r3,a
ljmp play
next:ljmp disp
dey1: mov r6,#10
dl1: mov r7,#19h
dl2: djnz r7,dl2
djnz r6,dl1
retintt0: push acc
push psw
clr et0
clr tr0
mov tl0,#0b0h
mov th0,#3ch
setb tr0
djnz r4,out
adds: mov r4,#20
mov r0,#71h
lcall add1
mov a,r2
clr c
cjne a,#60h,addmin
addmin: jc out
lcall clr0
mov r0,#74h
lcall add1
mov a,r2
clr c
cjne a,#60h,addh
addh: jc out
lcall clr0
mov r0,#77h
lcall add1
mov a,r2
clr c
cjne a,#24h,hourreset
jc out
hourreset: lcall clr0
out: pop psw
pop acc
setb et0
reti
add1: inc r0
mov a,@r0
swap a
dec r0
orl a,@r0
add a,#01h
da a
mov r2,a
anl a,#0fh
mov @r0,a
mov a,r2
anl a,#0f0h
swap a
inc r0
mov @r0,a
retclr0: mov a,#0
mov @r0,a
dec r0
mov @r0,a
rettable: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0bfh
end

tkinter實現電子時鐘
一 import tkinter import threading import datetime import time tkinter.tk overrideredirect true 不顯示標題欄 attributes alpha 0.9 半透明 attributes topmost 1 總是...
QT實現 電子時鐘
2.時鐘視窗 3.執行效果圖 簡介 1.主視窗 menu.件 ifndef menu h define menu h include include include class menu public qwidget endif menu h menu.cpp檔案 include menu.h in...
常用匯程式設計序轉移指令
1,無條件轉移指令 長轉移 jmp無條件轉移指令 call過程呼叫 ret retf過程返回 2,條件轉移指令 短轉移,128到 127的距離內 當且僅當 sf xor of 1時,op1 ja jnbe不小於或不等於時轉移.意思就是大於則就跳 jae jnb大於或等於轉移.jb jnae小於轉移....