導航:首頁 > 操作系統 > 單片機電子時鍾設計

單片機電子時鍾設計

發布時間:2023-10-27 16:15:44

A. 哪位大神能幫我寫一個基於單片機C51的電子時鍾設計報告

老師給我的
電子鍾設計
1、 電路圖:

2功能實現:
(1. 把「單片機系統」區域中的P1.0-P1.7埠用8芯排線連接到「動態數碼顯示」區域中的A-H埠上;
(2. 把「單片機系統:區域中的P3.0-P3.7埠用8芯排線連接到「動態數碼顯示」區域中的S1-S8埠上;
(3. 把「單片機系統」區域中的P0.0/AD0、P0.1/AD1、P0.2/AD2埠分別用導線連接到「獨立式鍵盤」區域中的SP3、SP2、SP1埠上;
3、程序框圖:

6. 匯編源程序
HOURK BIT P1.2
MINITEK BIT P1.1
SECONDK BIT P1.0
SECOND EQU 30H
MINITE EQU 31H
HOUR EQU 32H
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
ORG 0030H
START:
MOV SECOND,#00H
MOV MINITE,#00H
MOV HOUR,#12
MOV R0,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
NEXT: MOV A,#7FH
MOV P3,A
MOV A,HOUR
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0BFH
MOV P3,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY

MOV A,#0DFH
MOV P3,A
mov p2,#40h
call delay

mov a,#0efh
mov p3,a
MOV A,MINITE
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0F7H
MOV P3,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY

MOV A,#0FBH
MOV P3,A
mov p2,#40h
call delay

MOV A,#0FDH
MOV P3,A
MOV A,SECOND
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV A,#0FEH
MOV P3,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CALL DELAY

WT: JB SECONDK,NK1
LCALL DELY10MS
JB SECONDK,NK1
JNB SECONDK,$
INC SECOND
MOV A,SECOND
CJNE A,#60,NK1
MOV SECOND,#00H
NK1: JB MINITEK,NK2
LCALL DELY10MS
JB MINITEK,NK2
JNB MINITEK,$
INC MINITE
MOV A,MINITE
CJNE A,#60,NK2
MOV MINITE,#00H
NK2: JB HOURK,NK3
LCALL DELY10MS
JB HOURK,NK3
JNB HOURK,$
INC HOUR
MOV A,HOUR
CJNE A,#24,NK3
MOV HOUR,#00
NK3:
MOV A,R0
CJNE A,#20,NEXT1
MOV R0,#0
INC SECOND
MOV A,SECOND
CJNE A,#60,NEXT1
MOV SECOND,#0
INC MINITE
MOV A,MINITE
CJNE A,#60,NEXT1
MOV MINITE,#0
INC HOUR
MOV A,HOUR
CJNE A,#24,NEXT1
MOV HOUR,#0
next1:JMP NEXT
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
INT_T0: CLR TR0
INC R0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
RETI
DELAY:
MOV R6,#2
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELY10MS:
MOV R6,#10
DD1: MOV R7,#248
DJNZ R7,$
DJNZ R6,DD1
RET
END

B. 用AT89S51(單片機)設計一個電子鍾

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;20h.1半點標示位
;20H.2鬧鍾設置中........標示,為了顯示區別用
;20H.3鬧鍾設置時間CHECK到,使能標志位
;20H.5開/關鬧鍾設置中........標示;
;20H.6鬧鍾1開關標志位
;20H.7鬧鍾2開關標志位
;psw.5用來做顯示開關標志位
;21,22,23,24這里設置第一個鬧鍾的時間
;25,26,27,28這里設置第二個鬧鍾的時間
;29H
;P0口輸出數碼管段碼,
;P2口 輸出位選信號
;
;70H存放P1.0--3按鈕值,
;71H--78H存放當前系統定時時間;
;78H 77H 76H 75H 74H 73H 72H 71H
; 星期* 小時 分鍾 秒鍾
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ts equ 24h ;這里設置`24小時周期制
trr equ #0bbh ;這個是溫度,晶振等的時間補償值,
org 0000h ;定時太慢此值調大,定時太快調小;
jmp main
;org 0bh ;定時器0中斷入口矢量
;jmp bz
org 1bh ;定時器1中斷入口矢量
jmp t1int
org 0100h ;主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
main:clr p3.0; ;關繼電器
mov sp,#30h
mov r3,#20
mov tmod,#10h
;mov tl0,#06h ;定時器1,方式1,定時 50 MS;
;mov th0,#06h
mov tl1,#0b0h
mov th1,#3ch
mov ie,#88h ;開定時器1中斷
;mov 65h,#5
; mov 66h,#100
;mov 64h,#4
;clr psw.5
clr p3.0
setb pt1 ;設置T1為高優先順序中斷
;setb tr1
clr tr1 ;開啟T1中斷
acall send ;71h--78h 清零;
acall send1 ;20h--29h 清零;
dd: acall daa ;進行十進制調整71H-79H
;acall compare ;第一鬧鍾
;acall compare1 ;第二鬧鍾 設置值
;acall sound
acall disp ;數碼管顯示,78H--71H分別對應著8個數碼管顯示
acall key_scanf ;按鈕控制
acall time_adj ;時間調整
acall lasttime ;調用上一次的設置值為當前定時值
;acall alarm1_set ;設置定時開/關鬧鍾
ajmp dd

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;調用上次值為設置時間
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lasttime:push acc
mov a,70h
jnb acc.2,return1
clr p3.0; 緊急暫停按鈕,按下後暫停,並把上次設定值恢復.
clr tr1
mov 73h,21h
mov 74h,22h
wait7:acall disp
acall key_scanf
mov a,70h
jnb acc.0,wait7
mov 71h,#0
mov 72h,#0
mov 79h,#0
mov tl1,trr
mov th1,#3ch
mov r3,#20
setb tr1
setb p3.0
return1:pop acc
ret

daa: push acc ;對當前系統時間進行十進制調整
mov 71h,79h
mov r1,#71h
cjne @r1,#10,s2
mov 71h,#0h
mov 79h,#0
inc 72h
mov r1,#72h
cjne @r1,#6,s2
mov 72h,#0h
dec 73h
mov r1,#73h
cjne @r1,#255,s2
dec 74h
mov 73h,#9
s1: pop acc
ret
s2: mov r1,#73h
cjne @r1,#0,s1
mov r1,#74h
cjne @r1,#0,s1
clr p3.0
clr tr1
sjmp s1

h_half: ;半點CHECK
mov r1,#73h
mov a,74h
swap a
xchd a,@r1
cjne a,#29h,o25 ;CHECK 當前時間是否為29分鍾
xchd a,@r1
mov r1,#71h
mov a,72h
swap a
xchd a,@r1
cjne a,#59h,o25 ;CHECK 當前時間為59秒?
setb tr0 ;啟動T0
setb 20h.1 ;enable 半點flag bit
o25: xchd a,@r1
ret
compare: ;鬧鍾1設置時間與當前時間比較
push acc
jnb 20h.6,nequ ;鬧鍾1開/關標志位
mov a,73h
cjne a,21h,nequ ;分低位
mov a,74h
cjne a,22h,nequ ;分高位
mov a,75h
cjne a,23h,nequ ;小時低位
mov a,76h
cjne a,24h,nequ ;小時高位
setb 20h.3 ;到鬧鍾設置時間,使能鬧鍾報警標志位
nequ:pop acc
ret

compare1: ;鬧鍾2設置時間與當前時間比較
push acc
jnb 20h.7,nequ33 ;鬧鍾2開/關標志位
mov a,73h
cjne a,25h,nequ33
mov a,74h
cjne a,26h,nequ33
mov a,75h
cjne a,27h,nequ33
mov a,76h
cjne a,28h,nequ33
setb 20h.3 ;到鬧鍾設置時間,使能鬧鍾報警標志位
nequ33:
pop acc
ret

sound:
acall h_half ;check 是否半點?
jb 20h.1,s23 ;半點則返回
jb 20h.0,s23
mov r1,#73h
mov a,74h
swap a
xchd a,@r1
cjne a,#59h,s25
xchd a,@r1
mov r1,#71h
mov a,72h
swap a
xchd a,@r1
s20: cjne a,#56h,s21
ajmp s26
s21: cjne a,#58h,s22
ajmp s26
s22: cjne a,#59h,s25
setb tr0
ajmp s26
s25: xchd a,@r1
s23: ret
s26: jb 20h.0,s25
setb tr0
xchd a,@r1
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中斷服務程序,報時鈴音信號輸出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

bz: djnz 64h,rrr
jb 20h.3,alarmsign;鬧鍾到點報時有效
jb 20h.1,next ;半點報時
mov 64h,#4 ;0.5KHZ
ajmp justh
alarmsign:
mov 64h,#1; 2KHZ信號
justh:
djnz 66h,ccc
mov 66h,#100
djnz 65h,ccc ;產生1000次中斷後關中斷
mov 65h,#5 ;響0.5秒
setb 20h.0
clr tr0
reti

next:mov 64h,#2 ;1KHZ信號,半點報時音
ccc: jb 20h.3,cc
cpl p1.4 ;半點報時輸出聲音信號
rrr: reti
cc: cpl p1.4 ;鬧鍾報時輸出聲音信號
reti

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中斷服務程序,定時器主時鍾;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

t1int:
clr ea
mov tl1,trr
mov th1,#3ch
djnz r3,sd ;20*50MS=1S
mov r3,#20
;cpl p1.4
inc 79h
clr 20h.0
clr 20h.1 ;半點報時標志清零
jb 20h.3,sdd ;鬧鍾CHECK有效與否?
clr tr0 ;關T0
sd: setb ea
reti
sdd: setb tr0 ;開T0,即開鬧鈴聲音
setb ea
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;顯示子函數
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dispnum1:; 顯示
ajmp disp_num
disp:
push acc
;jb 20h.5,dispnum1;開/關鬧鍾設置中界面...........
;jb 20h.2,alarmcheck;鬧鍾設置時間中界面..........
jb psw.5,closedisp
mov r2,#01h;位選通信號輸出到P2口
mov r5,#2; 顯示的位數循環控制
mov r0,#73h;分別取出內存76H-71H
cjne r3,#10,dot1;在小時和分之間閃爍DOT point
dot1:jnc dsp1
orl 73h,#10h
;dot1:cjne r3,#11,dsp1
;anl 73h,#0efh
dsp1:mov a,r2
;cpl a
mov p2,a
mov a,@r0
dsp2:mov dptr,#bcd
movc a,@a+dptr
mov p0,a
acall delay
mov a,r2
rl a
mov r2,a
inc r0
djnz r5,dsp1
anl 73h,#0efh
pop acc
ret
closedisp:; 關顯示
acall delay
mov p0,#0ffh
mov p2,#0
pop acc
ret

;;;;;;;;;;;;;;;;;鬧鍾的定時設置顯示
alarmcheck:
mov r2,#01h
mov r5,#2 ;兩位顯示22-21H對應定時設置值
mov r0,#21h
dsp21:
mov a,r2
;cpl a
mov p2,a
mov a,@r0
mov dptr,#bcd
movc a,@a+dptr
mov p0,a
acall delay
mov a,r2
rl a
mov r2,a
inc r0
djnz r5,dsp21
pop acc
ret
bcd:; 共陽接法數碼管段碼表
db 0c0h,0f9h,0a4h,0b0h
db 99h,92h,82h,0f8h
db 80h,90h,88h,83h
db 0c6h,0a1h,86h,8eh; 不帶小數點七段
db 40h,79h,24h,30h,19h
db 12h,02h,78h,00h,10h
db 0ffh,0bfh,7fh,3fh; 帶小數點七段
delay:mov r6,#4h
tm: mov r4,#0h
ee: djnz r4,ee; 延時2048US=2MS
djnz r6,tm
ret

send:mov r7,#9; 初始化設置
mov r0,#71h
mov a,#0h
ss: mov @r0,a
inc r0
djnz r7,ss
mov 78h,#1h
mov 77h,#01ah
;mov 71h,#1
;mov 72h,#2
;mov 73h,#3
;mov 74h,#4
ret
send1:; 初始化
mov r7,#10
mov r0,#20h
mov a,#0
ss1: mov @r0,a
inc r0
djnz r7,ss1
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;開/關鬧鍾界面顯示
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
disp_num:
mov p2,#0f7h
mov a,29h ;當前要操作的鬧鍾號碼
mov dptr,#bcd
movc a,@a+dptr
mov p0,a
acall delay
pop acc
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
key_scanf:; 按鈕處理
push acc
mov 70h,#0
orl p1,#0fh
mov a,p1
cpl a
anl a,#07h
jz nokey1
acall daa
acall disp
mov a,p1
cpl a
anl a,#07h
jz nokey1
mov 70h,a
key_wait:; 等按鈕放下
acall daa
acall disp
mov a,p1
cpl a
anl a,#07h
jnz key_wait
mov a,70h
jnb acc.1,nokey1
cpl psw.5
nokey1:; 無按鈕
pop acc
ret

a_on_off:
jnb 29h.0,iii
cpl 20h.6
iii: jnb 29h.1,out_2
cpl 20h.7
out_2:
ajmp alarmnum
alarmnum:
setb 20h.5
acall daa
acall disp
acall key_scanf
clr 20h.5
mov a,70h
jb acc.0,a_on_off
jb acc.1,alar_adj_1
jb acc.2,a_num_inc
acall numb
ajmp alarmnum
alarm1_set:
push acc
mov a,70h
jb acc.1,alarmnum
alarm1_out:
clr 20h.2
pop acc
ret
a_num_inc:
inc 29h
mov a,29h
anl a,#0fh
cjne a,#3,alarmnum
anl 29h,#0
ajmp alarmnum
alar_adj_1:
setb 20h.2
acall daa
orl 21h,#10h
acall disp
anl 21h,#0fh
acall key_scanf
mov a,70h
jb acc.1,hadj_1
jb acc.2,minc_1
ajmp alar_adj_1
madj_2:
acall daa
orl 25h,#10h
acall disp
anl 25h,#0fh
acall key_scanf
mov a,70h
jb acc.1,hadj_2
jb acc.2,minc_2
ajmp madj_2
hadj_1:
acall daa
orl 23h,#10h
acall disp
anl 23h,#0fh
acall key_scanf
mov a,70h
jb acc.1,madj_2
jb acc.2,hinc_1
ajmp hadj_1
hadj_2:acall daa
orl 27h,#10h
acall disp
anl 27h,#0fh
acall key_scanf
mov a,70h
jb acc.1,alarm1_out
jb acc.2,hinc_2
ajmp hadj_2
minc_1:
inc 21h
mov r1,#21h
cjne @r1,#10,alar_adj_1
mov 21h,#0
inc 22h
mov r1,#22h
cjne @r1,#6,alar_adj_1
mov 22h,#0h
ajmp alar_adj_1
minc_2:
inc 25h
mov r1,#25h
cjne @r1,#10,madj_2
mov 25h,#0
inc 26h
mov r1,#26h
cjne @r1,#6,madj_2
mov 26h,#0
ajmp madj_2
hinc_1:
inc 23h
mov r1,#23h
cjne @r1,#10,ss14
mov 23h,#0
inc 24h
ss14:
mov a,24h
swap a
xchd a,@r1
cjne a,#ts,ss15
mov 23h,#0
mov 24h,#0
ajmp hadj_1
ss15:xchd a,@r1
ajmp hadj_1
hinc_2:
inc 27h
mov r1,#27h
cjne @r1,#10,sss14
mov 27h,#0
inc 28h
sss14:
mov a,28h
swap a
xchd a, @r1
cjne a,#ts,sss15
mov 27h,#0
mov 28h,#0
ajmp hadj_2
sss15:
xchd a,@r1
ajmp hadj_2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;時間調整程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

time_adj:;
clr psw.5
push acc
mov a,70h
jb acc.0,l1;P1.0調時功能鍵,每按一次切換一位
ajmp nokeyout
adj_out:
mov 21h,73h
mov 22h,74h
setb p3.0 ;閉合繼電器
setb tr1
nokeyout:
pop acc
ret
QQ: anl 73h,#0fh
anl 74h,#0fh
;anl 78h,#0fh
ret
l1: clr tr1;acall dab; 分鍾調整
orl 73h,#10h;點亮分右下角的小數點,當前調整位置
acall disp
acall QQ
acall key_scanf
clr psw.5
mov a,70h
jb acc.0,h_adj;切換到小時調整
jb acc.1,m_inc;P1.2加1按鈕
ajmp l1
h_adj:; 小時調整
;acall dab
orl 74h,#10h
acall disp
acall QQ
acall key_scanf
clr psw.5
mov a,70h
jb acc.0,out_adj;切換到星期調整
jb acc.1,h_inc;小時加1
ajmp h_adj
w_adj:
acall daa
orl 78h,#10h
acall disp
acall QQ
acall key_scanf
clr psw.5
mov a,70h
jb acc.0,out_adj
jb acc.2,w_inc
ajmp w_adj
out_adj:
ajmp adj_out
m_inc:;;;;;;;;;;;;;;; 調整分時,對定時復位,初始化
clr tr1
mov 71h,#0
mov 72h,#0
mov 79h,#0
mov tl1,trr
mov th1,#3ch
mov r3,#20
inc 73h
mov r1,#73h
cjne @r1,#10,s12
mov 73h,#0
inc 74h
mov r1,#74h
cjne @r1,#10,s12
mov 74h,#0
s12: ajmp l1
;;;;;;;;;;;;;;;;;;;;;;調整小時位
h_inc:
inc 74h
mov r1,#74h
cjne @r1,#10,s14
mov 74h,#0
;inc 76h
s14: ajmp h_adj
;mov a,76h
;swap a
;xchd a,@r1
;cjne a,#ts,s15;;;12進制,24進制設置值決定
;mov 75h,#0
;mov 76h,#0
;ajmp h_adj
;s15: ;xchd a,@r1
;ajmp h_adj
;;;;;;;;;;;;;;;;;;;;;;;調整星期位
w_inc:
inc 78h
mov r1,#78h
cjne @r1,#8,s16
mov 78h,#1h
s16: ajmp w_adj

;;;;;;;;;;;;;;;;;;;;;;;當前鬧鍾開/關情況報告位
numb:clr 29h.4
jnb 29h.0,iii1
jnb 20h.6,iii1
setb 29h.4
iii1:jnb 29h.1,out_21
jnb 20h.7,out_21
setb 29h.4
out_21:
jnb 20h.6,out_12
jnb 20h.7,out_13
mov 77h,#1dh
ajmp out_22
out_12:
jnb 20h.7,out_14
mov 77h,#1bh
ajmp out_22
out_13:
mov 77h,#1ch
ajmp out_22
out_14:
mov 77h,#1ah
out_22:
ret
end

C. 51單片機做數字電子鍾

這么復雜的東西給這么少分 暈死了 你也太小氣了吧,分多的話還可能幫你動動腦

D. C51單片機電子時鍾設計思路

用定時器,設置定時時間為20毫秒,50次累加=1秒,累加秒數據60次=1分,依次類推。每次中斷完成累加和顯示(動態,刷新頻率50HZ,應該不會閃爍)

E. 基於單片機的電子時鍾

首先,硬體的選取:
1,單片機,其控制系統不算復雜,使用簡單的8位機即可,然後就是時鍾的選擇,本設計基於其實時性要求不高,所以時鍾盡量選擇低一點,可以用3M、6M的時鍾,因為時鍾選擇越高其單片機的功耗就越大,甚至出現超頻現象(不過現在的單片機時鍾一般都能達到50M了)!
2,顯示部分,根據本常式的要求,可以選用6個8位數碼管進行顯示。
3,驅動電路,數碼管驅動晶元有很多,常見的有串列通信的如74LS164、74HC595、SM1617等常用LED串列驅動晶元。
4,時鍾晶元的選擇,單片機上面有定時器,但是實現長時間的定時必定不準確,誤差很大,還得經常對時,所以建議你選用一款時鍾晶元,常用的DS1302等。
5,用戶界面,你就用幾個按鍵實現用戶操作就行了。
軟體:首先顯示部分的變成,在網上有很多常式,你只需要簡單的移植就可以使用了,時鍾晶元DS1302典型的IIC匯流排驅動模式,你可以使用單片機中IIC外設來訪問,按鍵部分使用掃描和外部中斷都可!
自己動手豐衣足食,寫了這么多,希望對你有用,加油

F. 利用單片機的定時器和數碼管,設計一個電子時鍾

給你個電路和程序,//前幾天幫一個網友寫,單片機定時時鍾在調節功能,可以參考一下我程序

/***************************************************
* 6位數碼管顯示電子鍾
*
* 功能: 按鍵加,按鍵減, 按鍵,啟動和停止。
*
*
***************************************************/
#include "REG52.H"

sbit SHUG_01 = P2^0; //數碼管1
sbit SHUG_02 = P2^1; //數碼管2
sbit SHUG_03 = P2^2; //數碼管3
sbit SHUG_04 = P2^3; //數碼管4
sbit SHUG_05 = P2^4; //數碼管5
sbit SHUG_06 = P2^5; //數碼管6
sbit KEY0_01 = P0^0; //按鍵 啟動或停止sbit KEY0_02 = P0^1; //按鍵 加
sbit KEY0_03 = P0^2; //按鍵減
sbit KEY0_04 = P0^3; //按鍵菜單
#define LED_DATA P1 //P1數據埠
unsigned char value_temp = 0;unsigned char value_Outk = 0;
unsigned char value_shio = 8;
unsigned char value_feno = 40;
unsigned char value_miao = 0;
unsigned char code value_tab0[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //共陽極unsigned char code value_tab1[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //共陽極帶點

/*
* 延時1ms延時子函數
**/
void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}
/* * 程序運行【啟動和停止】子函數
**/
void Disp_layledketCmd(void)
{
/***小時***/
SHUG_01 = 1;
LED_DATA = value_tab0[value_shio / 10]; /*******小時的十位數顯示***************/
Delay_1ms(5);
SHUG_01 = 0;
SHUG_02 = 1;
LED_DATA = value_tab1[value_shio % 10]; /*******小時的個位數顯示***************/
Delay_1ms(5);
SHUG_02 = 0;
/***分鍾***/ SHUG_03 = 1;
LED_DATA = value_tab0[value_feno / 10]; /*******分鍾的十位數顯示***************/
Delay_1ms(5);
SHUG_03 = 0;
SHUG_04 = 1;
LED_DATA = value_tab1[value_feno % 10]; /*******分鍾的個位數顯示***************/
Delay_1ms(5);
SHUG_04 = 0;
/***秒鍾***/ SHUG_05 = 1;
LED_DATA = value_tab0[value_miao / 10]; /*******秒鍾的十位數顯示***************/
Delay_1ms(5);
SHUG_05 = 0;
SHUG_06 = 1;
LED_DATA = value_tab0[value_miao % 10]; /*******秒鍾的個位數顯示***************/
Delay_1ms(5);
SHUG_06 = 0;
}
/* * 定時器初始化定時50ms
**/
void Tero_Init(void)
{
TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
ET0 = 1;
TR0 = 1;
EA = 1;
}
/* * 按鍵開關【啟動和停止】子函數
**/
void Scan_keyoutCmd(void)
{
if(KEY0_01 == 0)
{
Delay_1ms(10);
if(KEY0_01 == 0)
{
TR0 = ~ TR0;
}
while(KEY0_01 == 0);
}
if(KEY0_02 == 0) {
Delay_1ms(10);
if(KEY0_02 == 0)
{
value_miao--;
if(value_miao == -1)
{
value_feno--;
value_miao = 59;
if(value_feno == -1)
{
value_shio--;
value_feno = 59;
if(value_shio == -1)
{
value_shio = 23;
}
}
}
while(KEY0_02 == 0);
}
}
if(KEY0_03 == 0) {
Delay_1ms(10);
if(KEY0_03 == 0)
{
value_miao++;
if(value_miao == 60)
{
value_miao = 0;
value_feno++;
if(value_feno == 60)
{
value_feno = 0;
value_shio++;
if(value_shio == 24)
{
value_shio = 0;
}
}
}
while(KEY0_03 == 0); //檢測鬆手
}
}
}
/* * 函數主體
**/
int main(void)
{
P1 = P2 = P3 = 0x00;
Tero_Init();

while(1)
{
Scan_keyoutCmd();
Disp_layledketCmd(); //執行應運程序
}
}
/* * 定時器中斷服務程序
**/
void Tmero()interrupt 1
{
TH0 = 0x4C;
TL0 = 0x00;
value_temp++;
if(value_temp == 20)
{
value_temp = 0;
value_miao++;
if(value_miao == 60)
{
value_feno++;
value_miao = 0;
if(value_feno == 60)
{
value_shio++;
value_feno = 0;
if(value_shio == 24)
{
value_shio = 0;
}
}
} }
}

閱讀全文

與單片機電子時鍾設計相關的資料

熱點內容
java常見模式 瀏覽:500
典欣空調壓縮機 瀏覽:421
app如何認定許可權 瀏覽:849
兩個復數相除的角度計演算法則 瀏覽:584
電商類app開發怎麼收費 瀏覽:300
打造電子書反編譯工具 瀏覽:74
壓縮比115 瀏覽:558
pdf怎麼摳圖 瀏覽:864
霍妮pdf 瀏覽:808
反編譯VMP 瀏覽:46
hello編譯器 瀏覽:771
apk程序加密 瀏覽:595
如何給app重命名 瀏覽:603
怎麼幽默調侃程序員 瀏覽:285
忘記密碼解壓視頻 瀏覽:911
運城機場春運加密 瀏覽:287
安卓手機如何關閉app後台 瀏覽:154
安卓數字密碼忘記怎麼破解 瀏覽:253
pythonzmq模式 瀏覽:182
linux運行php網站 瀏覽:867