1樓:江雪紈
org 0000h
ljmp start
org 001bh ;int t1 入口地址
ljmp int_t1
org 0080h
start:
mov sp,#60h
mov 30h,#0
mov 31h,#0
mov 32h,#0
mov 33h,#0
mov 34h,#0
mov 35h,#0
mov 36h,#0
mov 37h,#0
mov r3,#0h ;時
mov r2,#0h ;分
mov r1,#0h ;秒
mov r6,#0h ;標誌
mov r7,#0h ;標誌
mov 38h,#0h ;標誌
mov 39h,#0h ;標誌
mov tmod,#10h
mov tl1,#00h ;50 ms 的時間常數
mov th1,#04ch
mov r0,#10
mov r4,#2
setb p2.7
setb tr1
setb et1
setb ea ;允許中斷
loop:
lcall scankey
cjne r7,#0ffh,wait1
lcall display2
sjmp loop
wait1:
cjne r6,#0ffh,wait
lcall display1
mov 34h,30h
mov 35h,31h
mov 36h,32h
mov 37h,33h
sjmp loop
wait:
lcall display
sjmp loop
int_t1: ;int_t1中斷服務子程式
push dph ;保護現場
push dpl
push acc
push psw
clr tr1
mov tl1,#00h ;50ms 定時常數
mov th1,#4ch
setb tr1
djnz r4,exit1
mov r4,#2
mov a,30h
cjne a,#09h,s0
mov 30h,#0
mov a,31h
cjne a,#9h,s1
mov 31h,#0h
mov a,32h
cjne a,#9h,s2
mov 32h,#0h
mov a,33h
cjne a,#9h,s3
mov 33h,#0h
s3:mov a,33h
add a,#1
mov 33h,a
s2:mov a,32h
add a,#1
mov 32h,a
s1:mov a,31h
add a,#1
mov 31h,a
s0:mov a,30h
add a,#1
mov 30h,a
djnz r0,exit1 ;判斷毫秒=0
mov r0,#10 ;delay 1 second
cpl p2.7
mov a,38h
cjne a,#0ffh,next1
ljmp hour1
next1:
mov a,39h
cjne a,#0ffh,next2
ljmp minute1
next2: cjne r1,#59h,second ;判斷秒=59
mov r1,#99h
minute1:cjne r2,#59h,minute ;判斷分=59
mov r2,#99h
hour1:cjne r3,#23h,hour ;判斷時=23
mov r3,#99h
hour:
mov a,r3
add a,#1 ;時加1
da a
mov r3,a
mov a,38h
cjne a,#00,exit1
minute:
mov a,r2
add a,#1 ;分加1
da a
mov r2,a
mov a,39h
cjne a,#00,exit1
second:
mov a,r1
add a,#1 ;秒加1
da a
mov r1,a
exit1:
mov 38h,#0h
mov 39h,#0h
pop psw ;恢復現場
pop acc
pop dpl
pop dph
reti ;中斷返回
display:
mov a,r3
anl a,#0fh
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
;mov p2,#0fbh
setb p2.0
clr p2.2
setb p2.1
setb p2.3
lcall delay
mov a,r3
swap a
anl a,#0fh
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
setb p2.0
clr p2.3
setb p2.2
setb p2.1
;mov p2,#0f7h
lcall delay
mov a,r2
anl a,#0fh
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
setb p2.1
clr p2.0
setb p2.2
setb p2.3
;mov p2,#0feh
lcall delay
mov a,r2
swap a
anl a,#0fh
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
setb p2.0
clr p2.1
setb p2.2
setb p2.3
;mov p2,#0fdh
lcall delay
retdisplay1:
mov a,30h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0feh
lcall delay
mov a,31h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0fdh
lcall delay
mov a,32h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0fbh
lcall delay
mov a,33h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0f7h
lcall delay
retdisplay2:
mov a,34h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0feh
lcall delay
mov a,35h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0fdh
lcall delay
mov a,36h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0fbh
lcall delay
mov a,37h
mov dptr,#ledseg
movc a,@a+dptr
mov p0,a
mov p2,#0f7h
lcall delay
retdelay: ;延時子程式
push 0 ;儲存現場
push 1
mov 0,#1h
delay1: mov 1,#0fh
djnz 1,$
djnz 0,delay1
pop 1 ;恢復現場
pop 0
retscankey:
setb p1.0
jb p1.0,p11
lcall delay
jb p1.0,p11
mov r6,#0ffh
mov r7,#0h
mov 30h,#0
mov 31h,#0
mov 32h,#0
mov 33h,#0
sjmp loop1
p11:
setb p1.1
jb p1.1,p12
lcall delay
jb p1.1,p12
mov r6,#0h
mov r7,#0h
sjmp loop1
p12:
setb p1.2
jb p1.2,p13
lcall delay
jb p1.2,p13
mov r7,#0ffh
sjmp loop1
p13:
setb p1.3
jb p1.3,p14
lcall delay
jb p1.3,p14
mov 38h,#0ffh
sjmp loop1
p14:
setb p1.4
jb p1.4,loop1
lcall delay
jb p1.4,loop1
mov 39h,#0ffh
sjmp loop1
loop1:
retledseg: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h ;'0,1,2,3,4,5,6,7'
db 7fh,6fh,77h,7ch,39h,5eh,79h,71h ;'8,9,a,b,c,d,e,f'
db 6dh,02h,08h,00h,59h,0fh,76hend
C語言程式設計,微控制器,微控制器C語言程式設計程式設計,一臉懵,求大佬們教我
一點都不會做不應該的,你寫出來,可以幫你修改 如按鍵如何獲取,定時器如何設定等等,基本都是照抄例程的 微控制器c語言程式設計程式設計,一臉懵,求大佬們教我 是要 實現呢?還是在開發板上實現?這種程式,你可以在這裡搜尋到答案的。求一個簡單的51微控制器c語言程式設計 機的外部結構 1.dip40 雙列...
51微控制器最簡單的C語言程式設計求教
你把裡面的數字轉換成二進位制,比如table 0 0x3f 00111111b 由於你這個是共陰極數碼管,高電平有效,所以寫一的地方對應的led都點亮 至於那七根數碼管以及一個小數點和二進位制位數對應關係你可以上網上查一下,簡單的說小數點也就是dp是最高位,其他的那七根數碼管從最上面那個開始順時針一...
微控制器怎樣用C語言實現數字間的異或
你的意思是4個整數 按位對應 4個位全相同為0,有任意一個不同為1 的話版 可以寫成 a b 權 a c a d b c b d c d int a a 1234 2345 3456 4567 c語言異或操作 你是打算對數字進行異或,需要將字元變成數字,異或完後再變回字元我只簡單寫了一下,沒有異常處...