怎樣用51微控制器實現累加計時和倒計時,並用共陰極數碼管顯

2021-03-22 08:08:44 字數 6433 閱讀 8066

1樓:匿名使用者

剛開始上電時, system_mode不是1 也不是2,不知你初始化時是否給它賦值?另外你的按鍵檢測程式沒加入到迴圈程式中,剛上電時若沒有按鍵按下,則很快跳過兩個按鍵檢測語句,然後進入迴圈顯示程式中,這是一個死迴圈,只有中斷才可打斷其執行,所以再按什麼鍵也沒反應了,建議把按鍵檢測放入顯示迴圈中,它對顯示效果不會有什麼影響,或在初始化後加一個迴圈,若兩個按鍵都沒有按下,一直檢測按鍵

想用51微控制器編個倒計時的c程式,要求用兩位數碼管顯示分鐘的,並用一個按鍵

2樓:手機使用者

並用一個按鍵啥? 51微控制器我沒設計過電路,用的學習板是現成的,對著電路圖。 那個學習板上沒有鎖存器啥的,只能靠掃描來顯示2個數字(就是兩個數碼管輪流顯示數字,因為輪流速度非常快人眼看不出來一次其實只有一個在顯示) 思路的話,按鍵和計時器都用中斷控制會比較方便, 1個全域性變數代表當前剩餘秒數,一個全域性變數代表當前剩餘分鐘數(或者你要一個16位變數代表秒數也行) 因為計時器無法定時1秒所以還要一個變數來輔助計時器實現每1秒引發一次事件的操作。

加上按鍵,這樣就有2個事件:一個是1秒引發一次,一個是按鈕引發 按鈕作用是什麼我不知道,你自己看著辦 計時器就是全域性變數的秒數減去1 這兩個事件實現以後,主程式邏輯就是一開始啟用中斷、啟用定時器、初始化全域性變數, 然後就開始死迴圈,迴圈裡的功能是把全域性變數裡的數字顯示到數碼管上,只管顯示不管別的的話還是很容易的,別的(計時、按鈕)全部交給中斷去完成,即可。

想用51微控制器編個倒計時的c程式,要求用兩位數碼管顯示分鐘的,並用一個按鍵

3樓:空雪夢見

並用一個按鍵啥?

51微控制器我沒設計過電路,用的學習板是現成的,對著電路圖。

那個學習板上沒有鎖存器啥的,只能靠掃描來顯示2個數字(就是兩個數碼管輪流顯示數字,因為輪流速度非常快人眼看不出來一次其實只有一個在顯示)

思路的話,按鍵和計時器都用中斷控制會比較方便,

1個全域性變數代表當前剩餘秒數,一個全域性變數代表當前剩餘分鐘數(或者你要一個16位變數代表秒數也行)

因為計時器無法定時1秒所以還要一個變數來輔助計時器實現每1秒引發一次事件的操作。

加上按鍵,這樣就有2個事件:一個是1秒引發一次,一個是按鈕引發

按鈕作用是什麼我不知道,你自己看著辦

計時器就是全域性變數的秒數減去1

這兩個事件實現以後,主程式邏輯就是一開始啟用中斷、啟用定時器、初始化全域性變數,

然後就開始死迴圈,迴圈裡的功能是把全域性變數裡的數字顯示到數碼管上,只管顯示不管別的的話還是很容易的,別的(計時、按鈕)全部交給中斷去完成,即可。

4樓:歪有小愛

你這數碼管的1、2口就這麼懸著或者接dp一起了真的沒問題嗎……

全域性變數2個用於表示個位和十位,顯示的時候可以省點力不用每次計算個位十位。

然後一個全域性變數代表秒

程式設計的話,首先是按鍵響應中斷,控制某個全域性變數flag的值,三種狀態:正常、暫停、到時間。按鍵可以在前兩種之間切換,如果已經是第三種狀態則沒反應(或者要重置什麼隨你)

然後定時器,一直開著就好,比如定10ms,每10ms就給一個全域性變數的值+1

這個變數到了100的時候就說明一秒過了,重設值,全域性變數的秒減一。如果到0了,就恢復60,然後給分鐘的個位減一。如果個位不夠減,就把十位減一然後個位設9。

如果十位和不夠減,就是時間到了,flag設定為第三種狀態

主函式在初始化各種狀態之後不斷迴圈給數碼管顯示數字,就ok了。

我想用51微控制器編個倒計時的c程式,要求用兩位數碼管顯示分鐘的,並用一個按鍵

5樓:空雪夢見

你這數碼管的1、2口就這麼懸著或者接dp一起了真的沒問題嗎……

全域性變數2個用於表示個位和十位,顯示的時候可以省點力不用每次計算個位十位。

然後一個全域性變數代表秒

程式設計的話,首先是按鍵響應中斷,控制某個全域性變數flag的值,三種狀態:正常、暫停、到時間。按鍵可以在前兩種之間切換,如果已經是第三種狀態則沒反應(或者要重置什麼隨你)

然後定時器,一直開著就好,比如定10ms,每10ms就給一個全域性變數的值+1

這個變數到了100的時候就說明一秒過了,重設值,全域性變數的秒減一。如果到0了,就恢復60,然後給分鐘的個位減一。如果個位不夠減,就把十位減一然後個位設9。

如果十位和不夠減,就是時間到了,flag設定為第三種狀態

主函式在初始化各種狀態之後不斷迴圈給數碼管顯示數字,就ok了。

6樓:匿名使用者

你這個圖有問題,兩數碼管只接了8個io口,也就是同時點亮兩個數碼管

7樓:小馬達

#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

利用51微控制器,4個數碼管設計一個計時器,要求在數碼管上顯示的資料從0開始每1秒鐘加1。 10

8樓: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。

9樓:匿名使用者

我剛剛寫好的 我的數碼管是共陽的 用中斷函式來寫#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()

10樓:匿名使用者

#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)

11樓:匿名使用者

這個不難的 你自己動手練習一下就會了的

利用51微控制器,通過兩位數碼管顯示秒,按鍵實現計時和停止計時 具體內容內詳

12樓:匿名使用者

*** 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

51微控制器,用外部中斷0和外部中斷1實現 七段LED數碼管顯示值加1和減1。程式怎麼編

給你講思路吧,先設定外部中段,開啟中斷開關。主程式可以利用一個for迴圈,每有一次中斷就操作一次陣列 陣列元素加一或減一 其中陣列對應的是數碼管1 9的顯示 簡單。51微控制器通過計數器中斷實現數字的加1 減1和外部中斷清0功能,在3位數碼管上顯示 看看這個 例項,彙編51微控制器接四個數碼管從00...

怎樣用微控制器控制大功率led燈珠亮度

要是控制bai1w或是3w的led,最du好是用cmos管驅動。cmos管的zhi dao柵極接微控制器的pwm脈衝輸 出腳。led單獨專供電時,要屬微控制器電源與led電源共地。微控制器 microcontrollers 是一種積體電路晶片,是採用超大規模積體電路技術把具有資料處理能力的 處理器c...

怎樣用微控制器控制可控矽導通角變化

首先要獲得交流電過零訊號,然後交流電半個週期10ms,根據控制要求,在過零後0到10ms之間送觸發脈衝,即可獲得不同的導通角,觸發脈衝寬度幾us到幾十us 電感性負載時觸發脈衝應寬一些 微控制器調整導通角,需要一個引數,那就是交流零點檢測。所謂導通角,是針對交流電而言的。這個角度是0 180。相信這...