1樓:匿名使用者
*** 0000h
ljmp main
*** 000bh
ljmp t0isr
*** 0030h
main:
mov tmod,#01h
mov th0,#high(65536-10000)mov tl0,#low(65536-10000)setb et0
setb ea
mov r0,#0
mov r1,#0
mov r2,#0
mov r3,#9
clr 00h
clr 01h
loop:
jb p1.0,lp01
jnb p1.0,$
setb tr0
clr 01h
sjmp loop0
lp01:
jb p1.1,lp02
jnb p1.1,$
setb 01h
sjmp loop0
lp02:
jb p1.2,loop0
jnb p1.1,$
clr tr0
mov p3,#0fdh
mov p2,#0
mov p3,#0feh
mov p2,#0
sjmp main
loop0:
jb 00h,loop1
mov a,r0
sjmp loop2
loop1:
mov a,r1
loop2:
mov dptr,#table
movc a,@a+dptr
mov r3,a
sjmp loop
t0isr:
clr tr0
mov th0,#high(65536-10000)mov tl0,#low(65536-10000)setb tr0
jb 01h,t0c
inc r2
t0c:
cpl 00h
mov a,r3
jb 00h,t001
mov p3,#0fdh
mov p2,a
sjmp t002
t001:
mov p3,#0feh
mov p2,a
t002:
mov a,r2
cjne a,#100,t0e
mov r2,#0
inc r0
cjne r0,#10,t0e
mov r0,#0
inc r1
cjne a,#10,t0e
mov r1,#0
t0e:
reti
t004:
clr tr0
reti
table: ; 共陰極數碼管顯示**表db 3fh,06h,5bh,4fh,66h ;01234db 6dh,7dh,07h,7fh,6fh ;56789end
2樓:匿名使用者
這個很簡單的 你**好友吧 我班全部的資料傳給你 我的是c語言 25502840 這樣 和你交談 有利於你的學習 照搬照抄 沒意思
3樓:做而論道
可以參考:
空間中,還有多種不同型別的時鐘、秒錶,正、倒計時的,都有。
想用51微控制器編個倒計時的c程式,要求用兩位數碼管顯示分鐘的,並用一個按鍵
4樓:手機使用者
並用一個按鍵啥? 51微控制器我沒設計過電路,用的學習板是現成的,對著電路圖。 那個學習板上沒有鎖存器啥的,只能靠掃描來顯示2個數字(就是兩個數碼管輪流顯示數字,因為輪流速度非常快人眼看不出來一次其實只有一個在顯示) 思路的話,按鍵和計時器都用中斷控制會比較方便, 1個全域性變數代表當前剩餘秒數,一個全域性變數代表當前剩餘分鐘數(或者你要一個16位變數代表秒數也行) 因為計時器無法定時1秒所以還要一個變數來輔助計時器實現每1秒引發一次事件的操作。
加上按鍵,這樣就有2個事件:一個是1秒引發一次,一個是按鈕引發 按鈕作用是什麼我不知道,你自己看著辦 計時器就是全域性變數的秒數減去1 這兩個事件實現以後,主程式邏輯就是一開始啟用中斷、啟用定時器、初始化全域性變數, 然後就開始死迴圈,迴圈裡的功能是把全域性變數裡的數字顯示到數碼管上,只管顯示不管別的的話還是很容易的,別的(計時、按鈕)全部交給中斷去完成,即可。
怎樣用51微控制器實現累加計時和倒計時,並用六個共陰極數碼管顯示出來。用兩個按鍵分別切換。
5樓:匿名使用者
剛開始上電時, system_mode不是1 也不是2,不知你初始化時是否給它賦值?另外你的按鍵檢測程式沒加入到迴圈程式中,剛上電時若沒有按鍵按下,則很快跳過兩個按鍵檢測語句,然後進入迴圈顯示程式中,這是一個死迴圈,只有中斷才可打斷其執行,所以再按什麼鍵也沒反應了,建議把按鍵檢測放入顯示迴圈中,它對顯示效果不會有什麼影響,或在初始化後加一個迴圈,若兩個按鍵都沒有按下,一直檢測按鍵
利用51微控制器,4個數碼管設計一個計時器,要求在數碼管上顯示的資料從0開始每1秒鐘加1。 10
6樓:anyway丶
共陽數碼管中斷程式:
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table=
;uint num,a;
uchar bai,shi,ge;
void init();
void delay(uint);
void display(ucharbai,ucharshi,ucharge);
uint fb();
uint fs();
uint fg();
void main()
}void init()
void display(ucharbai,ucharshi,ucharge)
void timeoff() interrupt 1}}
void delay(uint z)
uint fb()
uint fs()
uint fg()
擴充套件資料
2個可程式設計定時/計數器·5箇中斷源,2個優先順序(52有6個)
一個全雙工序列通訊口
外部資料儲存器定址空間為64kb
外部程式儲存器定址空間為64kb
邏輯操作位定址功能·雙列直插40pindip封裝
單一+5v電源供電
cpu:由運算和控制邏輯組成,同時還包括中斷系統和部分外部特殊功能暫存器;
ram:用以存放可以讀寫的資料,如運算的中間結果、最終結果以及欲顯示的資料;
rom:用以存放程式、一些原始資料和**;
i/o口:四個8位並行i/o口,既可用作輸入,也可用作輸出
t/c:兩個定時/記數器,既可以工作在定時模式,也可以工作在記數模式;
五個中斷源的中斷控制系統;
一個全雙工uart(通用非同步接收傳送器)的序列i/o口,用於實現微控制器之間或微控制器與微機之間的序列通訊;
片內振盪器和時鐘產生電路,石英晶體和微調電容需要外接。最佳振盪頻率為6m—12m。
7樓:匿名使用者
我剛剛寫好的 我的數碼管是共陽的 用中斷函式來寫#include
#define uint unsigned int#define uchar unsigned charuchar code table=
;uint num,a;
uchar bai,shi,ge;
void init();
void delay(uint);
void display(ucharbai,ucharshi,ucharge);
uint fb();
uint fs();
uint fg();
void main()
}void init()
void display(ucharbai,ucharshi,ucharge)
void timeoff() interrupt 1}}void delay(uint z)
uint fb()
uint fs()
uint fg()
8樓:匿名使用者
#include
#define uint unsigned int
uint qian,bai,shi,ge;
int a;
unsigned char code table=;
void chushihua(); //初始化函式
void delay(unsigned int i); //延時函式
void xianshi(uint qian,uint bai,uint shi,uint ge); //顯示函式
void main()
xianshi(qian,bai,shi,ge); } }
void exter1() interrupt 1
void chushihua()
void delay(unsigned int i)
void xianshi(uint qian,uint bai,uint shi,uint ge)
9樓:匿名使用者
這個不難的 你自己動手練習一下就會了的
我想用51微控制器編個倒計時的c程式,要求用兩位數碼管顯示分鐘的,並用一個按鍵
10樓:空雪夢見
你這數碼管的1、2口就這麼懸著或者接dp一起了真的沒問題嗎……
全域性變數2個用於表示個位和十位,顯示的時候可以省點力不用每次計算個位十位。
然後一個全域性變數代表秒
程式設計的話,首先是按鍵響應中斷,控制某個全域性變數flag的值,三種狀態:正常、暫停、到時間。按鍵可以在前兩種之間切換,如果已經是第三種狀態則沒反應(或者要重置什麼隨你)
然後定時器,一直開著就好,比如定10ms,每10ms就給一個全域性變數的值+1
這個變數到了100的時候就說明一秒過了,重設值,全域性變數的秒減一。如果到0了,就恢復60,然後給分鐘的個位減一。如果個位不夠減,就把十位減一然後個位設9。
如果十位和不夠減,就是時間到了,flag設定為第三種狀態
主函式在初始化各種狀態之後不斷迴圈給數碼管顯示數字,就ok了。
11樓:匿名使用者
你這個圖有問題,兩數碼管只接了8個io口,也就是同時點亮兩個數碼管
12樓:小馬達
#include
#define uchar unsigned charsbit p13=p3^0;
sbit p14=p3^1;
uchar c,i,a=60,z;
uchar code numcode=;
void delay(z)
void main()
/*if(a>=0)
*/if(a>=0)
else}}
void timer0() interrupt 1
微控制器兩位數碼管顯示數字,微控制器兩位數碼管顯示數字
include define uchar unsigned char uchar distab 0到fuchar number,dat 29 void t0isr interrupt 1 main 51微控制器數碼管怎樣才能同時在兩個數碼管上面顯示不同的數字?是因為人眼的視覺暫留效應,實際上兩個數碼...
微控制器串列埠控制數碼管顯示兩位數字時顯示不對
需提供你的硬體連線圖。微控制器串列埠控制數碼管顯示兩位數字時顯示不對 如果數碼管 驅動程式是 正確的,那麼可能的原因有 1.如果你驅動數碼管的程式是是在版main函式中呼叫的,請權修改程式使之以中斷的方式實現,否則需要優化程式使程式不能存在大延遲。2.如果是定時器中斷實現數碼管掃描的,請將該定時器中...
51微控制器接led數碼管,怎麼讓數碼管倒計時
先看看下面程式,看懂了,就知道咋編了 include define uchar unsigned char define uint unsigned intuchar a b 0 sbit wei1 p1.0 sbit wei2 p1.1 共陰數碼管七段碼 uchar code table void...