設計電子時鐘要用AT89S51微控制器的定時器實現,用4位數碼管顯示,用點的閃爍表示秒,我需要電路原理圖

2021-05-04 07:36:08 字數 10720 閱讀 3021

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核心的公開 各公司都...