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

2021-09-06 09:16:08 字數 7130 閱讀 9728

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語言異或操作 你是打算對數字進行異或,需要將字元變成數字,異或完後再變回字元我只簡單寫了一下,沒有異常處...