微控制器C語言實驗電腦時鐘程式設計

時間 2021-09-06 09:15:33

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語言的標頭檔案...