1樓:無畏無知者
用4位數碼管顯示,用點的閃爍表示秒,就是共有5位,7段;
那麼用一整個pio口(8位)去對應7段資料,再用另外乙個pio口的部分(全部)管腳去構成個鍵盤,這個就是你需要畫的電路圖了;
至於振盪電路、復位電路等幾乎是固定的結構形式,對應具體晶元就標註上對應的管腳序號就是了;
2樓:匿名使用者
1.基本要求:
(1) 顯示準確的北京時間(時、分、秒),可用24小時制式;
(2) 隨時可以調校時間。
(3) 增加公曆日期顯示功能(年、月、日),年號只顯示最後兩位;
(4) 隨時可以調校年、月、日;
(5) 允許通過轉換功能鍵轉換顯示時間或日期。
(6) 所有按鍵需要通過串列埠自發自收來調校各種功能。
2.發揮部分
(1)增加秒錶功能
(2)增加鬧鈴功能
(3)增加整點報時功能。
這是我以前做過的課程設計,你需要的話可以發給你參考一下只不過程式是彙編的,c語言我沒調好。
你的郵箱?
3樓:匿名使用者
帶鬧鐘智慧型電子鐘
源程式源程式如下: org 0000h ;程式開始入口
ljmp start
org 0003h ;外中斷0中斷程式入口
reti
org 000bh ;定時器t0中斷程式入口
ljmp intt0 ;跳至intto執行
org 0013h ;外中斷1中斷程式入口
reti
org 001bh ;定時器t1中斷程式入口
ljmp intt1
org 0023h ;序列中斷程式入口位址
reti
;---------------主程式----------------------;
start:mov r0,#70h ;70給r0,清70-7fh顯示記憶體
mov r7,#0fh
cleardisp:mov @r0,#00h ;0給r0中的數為位址的記憶體中存放(70h)
inc r0
djnz r7,cleardisp
mov 78h,#2 ;預設時間為12:00,鬧鐘5:00
mov 79h,#1
mov 74h,#2 ;防止上電時數碼管顯示00小時
mov 75h,#1
mov 66h,#1 ;中斷退出時66h為1時,分、時計時單元資料移入視訊記憶體標誌
mov 68h,#1 ;上電預設鬧鐘開狀態
mov 7dh,#6 ;鬧鐘時十位
mov 7ch,#3
mov 69h,#0
mov 7ah,#0ah ;放入"熄滅符"資料
mov tmod,#11h ;設t0、t1為16位定時器
mov tl0,#0b0h ;50ms定時初值(t0計時用)
mov th0,#3ch
setb ea ;總中斷開放
setb et0 ;允許t0中斷
setb tr0 ;t0定時器開始計時
mov r4,#14h ;1秒定時用初值(50ms×20)
start1:lcall display ;顯示子程式
lcall beep ;鬧鐘查詢
jnb p1.7,settime ;p1.7口為0時轉時間調整程式
jmp start1 ;p1.7口為1時跳回start1
;-----------------------時間鬧鐘調整系統--------------------------;
nflag:mov a,68h ;設定鬧鐘開關狀態
cjne a,#1,bee68
mov 68h,#0
jmp e6
bee68:mov 68h,#1
e6:mov 66h,#8 ;中斷退出66h不為1時分、時計時單元資料移入視訊記憶體標誌
mov 72h,7bh
mov 73h,7ch
mov 74h,7dh
mov 75h,7eh
lcall ddl
lcall ddl
mov 72h,68h
mov 73h,69h
mov 74h,7ah
mov 75h,7ah
lcall ddl
lcall ddl
mov 66h,#1
ljmp start1
settime:lcall ddl
jb p1.7,nflag ;鍵按下時間小於1秒,設定鬧鐘開關狀態並檢視鬧鐘時間,不關走時,確保準確,大於1秒調時
mov tl1,#0b0h ;t1閃爍定時初值
mov th1,#3ch
mov r2,#06h ;進入調時狀態,賦閃爍定時初值
mov 66h,#8 ;調鬧鐘時保持走時,關閉時鐘顯示資料
setb et1 ;允許t1中斷
setb tr1 ;開啟定時器t1
set1:lcall display ;呼叫顯示,防止鍵按下無顯示
jnb p1.7,set1 ;p1.7口為0等待鍵釋放
mov r5,#00h ;清設定型別閃爍標誌
setn1:inc r5 ;鬧鐘分調整
set5:lcall display
jb p1.7,set5
seetn1:lcall ddl ;有鍵按下大於1秒分時間連續加(0.5秒加1),小於1秒轉調時狀態
jb p1.7,set6 ;鍵釋放查詢,鍵釋放自動轉調時
mov r0,#7ch
lcall add1
mov a,r3
clr c
cjne a,#60h,hhn1
hhn1:jc seetn1
lcall clr0
jmp seetn1
set6:inc r5 ;鬧鐘時調整
seet6:lcall display
jb p1.7,seet6
seetnh1:lcall ddl
jb p1.7,setf
mov r0,#7eh
lcall add1
mov a,r3
clr c
cjne a,#24h,houu1
houu1:jc seetnh1
lcall clr0
jmp seetnh1
setf:lcall display
jb p1.7,setf
lcall ddl
jnb p1.7,setout ;短按調時,長按退出
clr et0
clr tr0
mov 70h,#00h ;設定後的時間從00秒開始走時
mov 71h,#00h
inc r5
set3:lcall display
jb p1.7,set3
setmm:lcall ddl
jb p1.7,set4
mov r0,#77h
lcall add1
mov a,r3
clr c
cjne a,#60h,mmh
mmh:jc setmm
lcall clr0
ajmp setmm
set4:inc r5
seet4:lcall display
jb p1.7,seet4
sethh:lcall ddl
jb p1.7,setout1
mov r0,#79h
lcall add1
mov a,r3
clr c
cjne a,#24h,houu
houu:jc sethh
lcall clr0
ajmp sethh
setout1:setb et0
setb tr0 ;計時開始
setout:mov r5,#00h ;清設定型別閃爍標誌
clr tr1 ;關閉t1
clr et1 ;關t1中斷
mov 66h,#1
setout2:lcall display
jnb p1.7,setout2
ljmp start1
;--------------------------延時1秒鐘-----------------------;
ddl:mov 18h,#36
ddl0:mov 17h,#239
ddl1:lcall display
djnz 17h,ddl1
djnz 18h,ddl0
ret;----------------------------t0中斷程式------------------------;
intt0: push acc ;打包
push psw
clr et0
clr tr0
mov a,#0b7h
add a,tl0
mov tl0,a
mov a,#3ch
addc a,th0
mov th0,a
setb tr0
djnz r4, outt0 ;20次中斷未到中斷退出
addss: mov r4,#14h ;20次中斷到(1秒)重賦初值
mov r0,#71h ;指向秒計時單元(70-71h)
acall add1 ;呼叫加1程式(加1秒操作)
mov a,r3 ;秒資料放入a(r3為2位十進位制數組合)
clr c ;清進製標誌
cjne a,#60h,addmm
addmm: jc outt01 ;小於60秒退出
acall clr0 ;等於或大於60秒清0
mov r0,#77h ;指向分計時單元(76h-77h)
acall add1
mov a,r3
clr c
cjne a,#60h,addhh
addhh: jc outt0
acall clr0
mov r0,#79h ;指向小時計時單元(78h-79h)
acall add1
mov a,r3
clr c
cjne a,#24h,hour
hour: jc outt0
acall clr0
outt0: mov a,66h ;查詢標誌
cjne a,#1,outt01
mov 72h,76h ;中斷退出時將分、時計時單元資料移入對應顯示單元
mov 73h,77h
mov 74h,78h
mov 75h,79h
outt01:pop psw ;出棧
pop acc
setb et0 ;開放t0
reti ;中斷返回
;---------------------------加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 ;資料放入當削位址單元中
retclr0: clr c
clr a ;清累加器
mov @r0,a ;清當前位址單元
dec r0 ;指向前一位址
mov @r0,a ;前一位址單元清0
ret ;子程式返回
;-------------------------調時閃爍程式----------------------;
intt1: push acc
push psw
mov tl1,#0b0h
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 a,r5
cjne a,#01h,nl
jmp nnn1
nl:cjne a,#02h,nl1
ljmp nnn1
nl1:cjne a,#03h,nl2
ljmp nll
nl2:cjne a,#04h,intt1out
ljmp nll
nll:mov 72h,76h
mov 73h,77h
mov 74h,78h
mov 75h,79h
ajmp intt1out
nnn1:mov 72h,7bh
mov 73h,7ch
mov 74h,7dh
mov 75h,7eh
intt1out:pop psw ;恢復現場
pop acc
reti ;中斷退出
flash1:mov a,r5
cjne a,#01h,ml
ljmp mnn1
ml:cjne a,#02h,ml1
ljmp mnn2
ml1:cjne a,#03h,mn
ljmp mll
mn:cjne a,#04h,intt1out
ljmp mhl
mll:mov 72h,7ah
mov 73h,7ah ;顯示單元(72-73h),將不顯示分資料
mov 74h,78h
mov 75h,79h
ajmp intt1out
mhl:mov 72h,76h
mov 73h,77h
mov 74h,7ah ;顯示單元(74-75h),小時資料將不顯示
mov 75h,7ah
ajmp intt1out
mnn1:mov 72h,7ah
mov 73h,7ah ;顯示單元(72-73h),將不顯示鬧鐘分資料
mov 74h,7dh
mov 75h,7eh
ajmp intt1out
mnn2:mov 72h,7bh
mov 73h,7ch
mov 74h,7ah
mov 75h,7ah ;顯示單元(74-75h),鬧鐘小時資料將不顯示
ajmp intt1out
;-------------------------顯示-------------------------------;
display:mov dptr,#disdata
mov a,70h
movc a,@a+dptr
mov p3,a
clr p1.0
nopnopnopsetb p1.0
mov a,71h
movc a,@a+dptr
mov p3,a
clr p1.1
nopnopnopsetb p1.1
mov a,72h
movc a,@a+dptr
mov p3,a
clr p1.2
nopnop查詢鬧鐘分十位
cjne a,7ch,beere
bb:clr p1.6
lcall ddl
setb p1.6
lcall ddl
jnb p1.7,beerr
beere:ret
beerr:setb p1.6
mov 68h,#0
lcall display
jnb p1.7,beerr
jmp beere
disdata:db 0c0h,0f9h,64h,70h,59h,52h,42h,0f8h,40h,50h,0ffh ;0123456789空白end
AT89S51微控制器常用的指令究竟有多少條
要說指令,這是針對使用組合語言寫程式而言的,是不是常用指令,討論這個問題好像沒有什麼意義,不管用什麼指令,只要寫出程式就行,只是用不同的指令,程式的長短有點區別而已。而如今,多數人已經用c語言寫程式了,幾乎不用再考慮指令的事了。這樣說來,能用c語言寫出很好程式,不用掌握彙編指令也可以嗎。所以,也不必...
用微控制器設計電子時鐘的組合語言,用微控制器設計電子時鐘的組合語言
start mov p3,0ffh mov dptr,table mov a,0 mov r0,a mov r1,a mov r2,a loop mov r3,50 acall display inc r0 cjne r0,60,loop mov r0,0 inc r1 cjne r1,60,loo...
微控制器8051與at89c51的區別
8051一般泛指與mcs 51相容的微控制器,包括at89c51,at89c51是atmel公司的產品,是一款具體微控制器的說法專 早期的產品時8031 那時候屬晶元沒有自帶rom,後來改進型的8051增加了flah型別的儲存器等到了優化,隨後就以51比較普及加之mcs 8051核心的公開 各公司都...