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語言程式設計題 20
爬行的山羊 這是兩個題啊。哈哈好做,第一個有c語言的冒泡法排序,第二個用中斷,讀,輸出就可以 include define led0 0 define led1 1 define led2 2 define ledport p2 sbit sw0 p1 0 sbit sw1 p1 1 sbit sw...
微控制器c語言中,微控制器C語言中 while a 是什麼意思 a為什麼要定義得那麼大 比如
金色潛鳥 我估計,那是用來作時間間隔控制。while a 是迴圈50000次,當a 變0時,while 結束。為何定得如此大,是因為空迴圈速度很快,只有迴圈很多次才能獲得足夠長的時間間隔。a 50000 while a 第2個 while a 似乎有問題,死迴圈。是不是前面漏了另乙個 a 50000...
51微控制器c語言程式設計標頭檔案的問題
矮子根 不知你是怎麼弄的,我照你的樣式重複了一遍也沒有報錯,請照下圖認真檢查 另外注意 你在兩個檔案裡定義的beep 和 beep 是不一樣的,這才是錯誤的原因。 這個告警是告訴你沒有實現函式吧。你應該把這個函式的主體在.c裡實現。 微控制器的戰鬥機 你看看定義的函式名一樣嗎? 對於c語言的標頭檔案...