急求微控制器課程設計電子秒錶,急求微控制器課程設計電子秒錶

時間 2022-03-25 13:17:12

1樓:萬幣侯

秒錶的設計程式用89c51,外接晶振,復位電路,二個數碼管,二個按鍵,做乙個電子秒錶,

具體要求為用按鍵起停電子錶,可用按鍵設計倒計時時間(如10s,20s,60s),

並啟動倒計時功能。能用按鍵選擇以上兩功能之一。

三、程式**:

a_bit equ 20h ;數碼管個位數存放記憶體位置

b_bit equ 21h ;數碼管十位數存放記憶體位置

temp equ 22h ;計數器數值存放記憶體位置

;開機初始化

mov p3,#0ffh;對p3口初始化,設定為高電平,用於按鍵輸入

mov p0,#0ffh;使顯示時間數碼管熄滅

clr f0

clr f1

mov dptr,#numtab ;指定查表啟始位址

;等待按鍵輸入

;根據按鍵的輸入判斷執行什麼功能

;按鍵1按下則執行功能1

mov p3,#0ffh;對p3口初始化,設定為高電平,用於按鍵輸入

mov p0,#0ffh;使顯示時間數碼管熄滅

start:jb p3.6,start1;迴圈判斷開始按鈕k1是否按下?

acall delay10;延時10毫秒觸點消抖

jb p3.6,start;如果是干擾就返回

jnb p3.6,$;等待按鍵鬆開

ljmp gn1

;按鍵2按下則執行功能2

start1: jb p3.7,start;迴圈判斷開始按鈕k2是否按下?

acall delay10;延時10毫秒觸點消抖

jb p3.7,start1;如果是干擾就返回

jnb p3.7,$

ljmp gn2

;數碼管顯示秒錶時間的程式

gn1: ;先初始化

s1:mov a,#0

mov temp,a

goon1: mov r2,#2

js1: mov r3,#250

time1: mov a,temp ;將temp中的十六進製制數轉換成10進製

mov b,#10 ;10進製/10=10進製

div ab

mov b_bit,a ;十位在a

mov a_bit,b ;個位在b

lcall dplop1

;插入一段判斷定時過程中是否有按鍵輸入的程式段

c1: jb p3.6,b1

acall delay10;延時10毫秒消抖

jb p3.6,c1

jnb p3.6,$;等待按鍵鬆開

cpl f0

zt1: ; mov p3,#0ffh;對p3口初始化,設定為高電平,用於按鍵輸入

jb p3.6,$;迴圈判斷開始按鈕k1是否按下?

acall delay10;延時10毫秒觸點消抖

jb p3.6,zt1;如果是干擾就返回

jnb p3.6,$;等待按鍵鬆開

lcall dplop1

b1: jb p3.7,loop1

acall delay10;延時10毫秒消抖

jb p3.7,b1

jnb p3.7,$;等待按鍵鬆開

ajmp over

loop1: djnz r3,time1 ;2毫秒迴圈執行250次,時間約0.5秒

djnz r2,js1 ;迴圈執行2次,時間為1 秒鐘

inc temp;滿一秒鐘對時間加1

mov a,temp

clr c

subb a,#60

jnz goon1;判斷temp的數值是否為60?不為60迴圈

acall over

retgn2: mov a,#14h ; 設定倒計時的時間20s

mov temp,a

;數碼管顯示倒計時時間的程式

;初始化

mov p3,#0ffh;對p3口初始化,設定為高電平,用於按鍵輸入

mov p0,#14h;使顯示時間為設定的倒計時時間

goon2: mov r2,#2

js2: mov r3,#250

time2: mov a,temp ;將temp中的十六進製制數轉換成10進製

mov b,#10 ;10進製/10=10進製

div ab

mov b_bit,a ;十位在a

mov a_bit,b ;個位在b

mov dptr,#numtab ;指定查表啟始位址

dplop2: mov a,a_bit ;取個位數

movc a,@a+dptr ;查個位數的7段**

mov p0,a ;送出個位的7段**

clr p2.5 ;開個位顯示

acall dely1;顯示1毫秒

setb p2.5;關閉個位顯示,防止鬼影

mov a,b_bit ;取十位數

movc a,@a+dptr ;查十位數的7段**

mov p0,a ;送出十位的7段**

clr p2.6 ;開十位顯示

acall dely1;顯示1毫秒

setb p2.6;關閉十位顯示,防止鬼影

;插入一段判斷定時過程中是否有按鍵輸入的程式段

c2: jb p3.6,b2

acall delay10;延時10毫秒消抖

jb p3.6,c2

jnb p3.6,$;等待按鍵鬆開

zt2: mov p3,#0ffh;對p3口初始化,設定為高電平,用於按鍵輸入

jb p3.6,$;迴圈判斷開始按鈕k1是否按下?

acall delay10;延時10毫秒觸點消抖

jb p3.6,zt2;如果是干擾就返回

jnb p3.6,$;等待按鍵鬆開

b2: jb p3.7,loop2

acall delay10;延時10毫秒消抖

jb p3.7,b1

jnb p3.7,$;等待按鍵鬆開

ajmp over

loop2: djnz r3,time2 ;2毫秒迴圈執行250次,時間約0.5秒

djnz r2,js2 ;迴圈執行2次,時間為1 秒鐘

dec temp;滿一秒鐘對時間減1

mov a,temp

jnz goon2;判斷temp的數值是否為0?不為0迴圈

acall over

ret;結束定時

over: ajmp start;退到開機初始化狀態

;1毫秒延時子程式

dely1: mov r4,#2

d1:mov r5,#248

djnz r5,$

djnz r4,d1

ret;10毫秒延時子程式

delay10: mov r4,#20

d2:mov r5,#248

djnz r5,$

djnz r4,d2

ret;實驗板上的兩位一體的數碼管0~9各數字的顯示**

numtab: db 40h,79h,24h,30h,19h,12h,02h,78h,00h,10h

dplop1: mov a,a_bit ;取個位數

movc a,@a+dptr ;查個位數的7段**

mov p0,a ;送出個位的7段**

clr p2.5 ;開個位顯示

acall dely1;顯示1毫秒

setb p2.5;關閉個位顯示,防止鬼影

mov a,b_bit ;取十位數

movc a,@a+dptr ;查十位數的7段**

mov p0,a ;送出十位的7段**

clr p2.6 ;開十位顯示

acall dely1;顯示1毫秒

setb p2.6;關閉十位顯示,防止鬼影

retend

2樓:駿馳飛車族

程式功能:9分59。9秒 秒錶

備註:因數碼管各異,段碼表需要自己修改 如果覺得時間不準確,可以自己修改初值 沒有點顯示 可以直接複製使用

硬體連線:p0口接數碼管7段 p2.4至p2.7分別接毫秒位 秒各位 秒十位 分個位

p2.0為 秒錶開始鍵 p2.1為秒錶暫停鍵 復位鍵即為清0鍵

diyi equ 31h;定義毫秒位暫存器

dier equ 32h;秒個位

disan equ 33h;秒十位

disi equ 34h;分位

cou equ 35h;軟計數器

org 00h

ajmp start

org 0bh;定時器0中斷入口

ajmp time0;跳轉到定時器0的服務程式

org 30h

start: mov diyi,#0;清0

mov dier,#0;清0

mov disan,#0

mov disi,#0

mov cou,#0

mov tmod,#01h;設定時器模式為16位定時器

mov th0,#0c1h;裝初值

mov tl0,#5ch;裝初值

setb et0;開定時器0中斷允許

setb tr0;開定時器

clr ea;關總中斷

main: lcall anjian;呼叫按鍵檢測子程式

lcall xianshi;呼叫顯示子程式

ajmp main

anjian: mov a,p2;讀入p2口的值

jnb p2.0,kai;p2.0為0,轉到定時開

jnb p2.1,guan;p2.1為0轉到定時關

ret;子程式返回

kai: setb ea;開總中斷

ret;返回

guan: clr ea;關總中斷

ret;返回

xianshi: mov dptr,#table;獲得表資料

mov r1,#20

loop: mov a,diyi

movc a,@a+dptr;獲得相應位址

mov p2,#0efh;開第一位顯示

mov p0,a;送出段碼

lcall dely1ms;延時1毫秒

mov p2,#0ffh;關顯示,防止鬼影

mov a,dier

movc a,@a+dptr

mov p2,#0dfh

mov p0,a

lcall dely1ms

mov p2,#0ffh

mov a,disan

movc a,@a+dptr

mov p2,#0bfh

mov p0,a

lcall dely1ms

mov p2,#0ffh

mov a,disi

movc a,@a+dptr

mov p2,#7fh

mov p0,a

lcall dely1ms

mov p2,#0ffh

djnz r1,loop

rettime0: inc cou;軟計數器加一

mov a,cou;資料轉移

cjne a,#2,over;看cou內的值是否為2,是的話向下執行,不是的話,退出中斷。

mov cou,#0;清0

inc diyi;毫秒位加一

mov a,diyi;資料轉移

cjne a,#10,over;比較判斷

mov diyi,#0;清0

inc dier

mov a,dier

cjne a,#10,over

mov dier,#0

inc disan

mov a,disan

cjne a,#6,over

mov disan,#0

inc disi

mov a,disi

cjne a,#10,over

mov disi,#0

over: mov th0,#0c1h;裝初值

mov tl0,#5ch;裝初值

reti;中斷返回

dely1ms: mov r7,#250;賦值250

dl1: nop;空指令

nopdjnz r7,dl1;減一非0轉

ret;返回

table:db 28h,0ebh,032h,062h,0e1h,064h,024h,0eah,020h,060hend

急啊!微控制器高手幫幫忙啊!微控制器課程設計

你們老師要求的是用 外部的 按鈕控制 跑馬燈的速度啊!新設定了乙個變數speed,用來儲存跑馬燈的移動速度,其實也就是定時器的累計時間溢位次數。在程式中修改speed的數值,溢位的時間就會改變,跑馬燈的移動速度也就改變了。在每迴圈跑完一圈,就改變一次速度的。以下是摘抄的彙編的 p1口八個燈作跑馬燈。...

51微控制器課程設計,課程設計 用51微控制器設計乙個簡易計算器

org 0000h ljmp start org 0040h start mov sp,60h lcall status0 初始狀態 都是紅燈 circle lcall status1 南北綠燈,東西紅燈 lcall status2 南北綠燈閃轉黃燈,東西紅燈 lcall status3 南北紅燈,...

51微控制器組合語言問題,急求回答

如下即可 org 0000h jmp start org 000bh cpl p1.7 reti org 001bh cpl p1.0 reti start mov tmod,26h mov th0,251 mov tl0,251 mov th1,216 mov tl1,216 mov ie,100...

用微控制器發生方波 程式,求高手 用51微控制器輸出產生方波的程式

假設方波的週期為8微秒 如圖所示 由p1.0引腳產生方波 定時時間 方波週期 2 4 微秒 定時時間 t 2的8次方 x 12 12 1000000 256 x 1微秒 x 256 4 252 0fch 由於定時時間很短 工作在方式可以選擇方式2 為8位自動重裝載的 選擇定時器t1定時 參考程式 o...

微控制器彙編小題目,求高手解答,乙個微控制器彙編小題目,求高手解答

最簡單的程式如下 org 0000h ajmp main org 0030h main clr a mov 50h,a mov 51h,a mov 52h,a mov r0,60h loop mov a,r0 jz 0 jb acc.7,fu inc 50h sjmp next fu inc 51h...