㈠ 單片機定時器控制數碼管動態顯示程序
基本上不算消耗太多時間。
每個指令的消耗時間可以KEIL模擬模擬的時候可以大概算出時間。
if(++t!=350)return,這句是沒有達到350,就退出中斷函數,到了中斷時間載再進入就是另外一次了。
㈡ 單片機數碼管如何顯示數字
從電路圖來看,是需要數碼管共陽極的,哪一位的三極體導通,則該位的數碼管就有被點亮的機會。
那麼七段碼數據,低電平的位對應該筆畫的LED亮。
大致代碼:
P2=0xff;
P0=s_code[1]; //0xF9
P2=0xfe;// P2.0=0
delay_ms();
P2=0xff;
P0=s_code[2]; //0xA4
P2=0xfd;// P2.1=0
delay_ms();
P2=0xff;
P0=s_code[3]; //0xB0
P2=0xfb;// P2.2=0
delay_ms();
P2=0xff;
P0=s_code[4]; //0x99
P2=0xf7;// P2.3=0
delay_ms();
㈢ 單片機用一個按鍵控制數碼管顯示圖
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char //宏定義
sbit key1=P0^0; //定義鍵盤IO口
sbit key2=P0^1; //
sbit beep=P2^3;
sbit key3=P0^2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90}; //共陽數碼管編碼號
uchar num;
void keyscan();//鍵掃描函數
void display();
void delayms(uint);
void main() //主函數
{
while(1) //大循環
{
///display(); //顯示函數
keyscan(); //鍵掃描函數
display(); //顯示函數
}
}
void display()//顯示函數,使函數調回主函數
{
P1=table[num];//顯示數碼管編碼數
delayms(5);
}
void keyscan() //鍵掃描函數
{
if(key1==0) //判斷鍵一是否按下
{
if(key1==0)
{
delayms(10);
while(!key1);//未按下,鍵開路
num++;
beep=~beep;
delayms(50);
beep=~beep;
if(num==10)
{
num=0;
}
while(!key1);
}
}
if(key2==0)
{
if(key2==0)
{
delayms(10);
beep=~beep;
delayms(50);
beep=~beep;
while(!key2);
num--;
if(num==0)
{num=10;}
while(!key2);
}
}
if(key3==0)
{
if(key3==0)
{
delayms(50);
beep=~beep;
num=0;
while(!key3);
}
}
}
void delayms(uint xms) //延時函數
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
㈣ 51單片機怎麼用按鍵控制一個數碼管,按一下顯示一個數字,順序顯示
1、首先,要把代碼寫好,點亮數碼管。
㈤ 怎樣用單片機驅動LED數碼管顯示
數碼管是由若干個LED發光欄位組成,當不同欄位點亮時可形成不同的數字或字元。所有欄位的LED陽極接在一起,點亮欄位靠控制LED陰極的稱共陽極數碼管,反之為共陰極數碼管。單片機就是通過輸出埠控制數碼管不同欄位的亮暗完成字元顯示的(有時要加電流驅動電路)。對於多位數碼管顯示器在顯示方式上分為靜態顯示(多位同時顯示)和動態顯示(掃描各位依次顯示)。
如果你有單片機學習板的話最好,自己看教程學習,這方面你可以看吳鑒鷹單片機開發板,教程和板子功能做得全面
㈥ 用51單片機控制4位led數碼管,使其顯示出想要的數字,程序怎樣寫,謝謝
模擬串口方式0:
#include"reg52.h"
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
P3_2=P3^2;
//模擬接受
sbit
P3_3=P3^3;
//模擬發送
uchar
code
smg[11]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//數碼管編碼0~
9
void
display(uchar
z);
main()
{
display(5);
display(0);
display(4);
while(1);
}
/************模擬串口顯示**************/
void
display(uchar
z)
{
uchar
i;
uchar
temp;
temp
=
smg[z];
for(i=0;i<8;i++)
{
P3_3=
0;
if(temp
&
0x01)
P3_2=1;
else
P3_2
=
0;
P3_3=
1;
temp
=
temp>>1
;
}
}
串口}方式0:
void
display()
{
SM0=0;
SM1=0;
//方式0
for(i=0;i<3;i++)
{
SBUF=smg[snum[2-i]];
while(!TI)
;
TI=0;
delay(1000);
}
}
還有並行口方式
佔用I/O不推薦
不過程序很簡單
㈦ 單片機驅動數碼管顯示程序
這樣寫:動態掃描的方法,送段碼,開位,延時,關位(關本位就可以了)。再下一位。。。。
MAIN:MOV P0,#0F9H
SETB P2.0
ACALL DELAY
MOV P0,#0FFH
MOV P2,#0FFH
MOV P0,#0A4H
SETB P2.1
ACALL DELAY
;MOV P0,#0FFH
clr p2.1 ;MOV P2,#0FFH
MOV P0,#0B0H
SETB P2.2
ACALL DELAY
;MOV P0,#0FFH
clr p2.2 ;MOV P2,#0FFH
MOV P0,#99H
SETB P2.3
ACALL DELAY
;MOV P0,#0FFH
clr p2.3 ;MOV P2,#0FFH
AJMP MAIN
DELAY:MOV R1,#10
Y1:MOV R2,#100
DJNZ R2,$
DJNZ R1,Y1
RET
END
㈧ 單片機按鍵控制數碼管顯示
你有原理圖沒?
設置三個標志位,全局變數,需要在倒計時中斷里改變狀態的。
程序流程是:
主程序流程:
上電初始化(設置LED狀態,設置定時器相關寄存器參數,設置三個標志位狀態)--->
死循環(判斷標志位是否容許按鍵有效,然後判斷是否有按鍵按下,轉入響應的子程序處理段)
定時器中斷任務:
判斷是否到15秒,到了就置位標志位。
㈨ 51單片機控制8個數碼管並顯示1-8
數碼管段選連接到單片機P0口,位選連接到P2口
ORG0000h
MAIN:
CALLDISPLAY
AJMPMAIN
DISPLAY:
MOVR0,#0
MOVR1,#0x01
MOVDPTR,#TAB
LOOP:
INCR0
MOVA,R0
MOVCA,@A+DPTR
MOVP0,#0;消隱
MOVP0,A;送段碼
CALLDELAY
MOVA,R1;送位碼
RLA;移位
MOVP2,A
MOVR1,A
CALLDELAY
CJNER0,#8,LOOP;判斷8次是否循環完成
RET
DELAY:
MOVR6,#25
DD:MOVR7,#50
DJNZR7,$
DJNZR6,DD
RET
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
㈩ 用51單片機控制數碼管顯示
1. 接電源:VCC(PIN40)、GND(PIN20)。加接退耦電容0.1uF
2. 接晶體:X1(PIN18)、X2(PIN19)。注意標出晶體頻率(選用12MHz),還有輔助電容30pF
3. 接復位:RES(PIN9)。接上電復位電路,以及手動復位電路,分析復位工作原理
4. 接配置:EA(PIN31)。說明原因。
發光二極的控制:單片機I/O輸出
將一發光二極體LED的正極(陽極)接P1.1,LED的負極(陰極)接地GND。只要P1.1輸出高電平VCC,LED就正向導通(導通時LED上的壓降大於1V),有電流流過LED,至發LED發亮。實際上由於P1.1高電平輸出電阻為10K,起到輸出限流的作用,所以流過LED的電流小於(5V-1V)/10K = 0.4mA。只要P1.1輸出低電平GND,實際小於0.3V,LED就不能導通,結果LED不亮。
開關雙鍵的輸入:輸入先輸出高
一個按鍵KEY_ON接在P1.6與GND之間,另一個按鍵KEY_OFF接P1.7與GND之間,按KEY_ON後LED亮,按KEY_OFF後LED滅。同時按下LED半亮,LED保持後松開鍵的狀態,即ON亮OFF滅。
代碼
1. #include <at89x52.h>
2. #define LED P1^1 //用符號LED代替P1_1
3. #define KEY_ON P1^6 //用符號KEY_ON代替P1_6
4. #define KEY_OFF P1^7 //用符號KEY_OFF代替P1_7
5. void main( void ) //單片機復位後的執行入口,void表示空,無輸入參數,無返回值
6. {
7. KEY_ON = 1; //作為輸入,首先輸出高,接下KEY_ON,P1.6則接地為0,否則輸入為1
8. KEY_OFF = 1; //作為輸入,首先輸出高,接下KEY_OFF,P1.7則接地為0,否則輸入為1
9. While( 1 ) //永遠為真,所以永遠循環執行如下括弧內所有語句
10. {
11. if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1輸出高,LED亮
12. if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1輸出低,LED滅
13. } //松開鍵後,都不給LED賦值,所以LED保持最後按鍵狀態。
14. //同時按下時,LED不斷亮滅,各佔一半時間,交替頻率很快,由於人眼慣性,看上去為半亮態
15. }
數碼管的接法和驅動原理
一支七段數碼管實際由8個發光二極體構成,其中7個組形構成數字8的七段筆畫,所以稱為七段數碼管,而餘下的1個發光二極體作為小數點。作為習慣,分別給8個發光二極體標上記號:a,b,c,d,e,f,g,h。對應8的頂上一畫,按順時針方向排,中間一畫為g,小數點為h。
我們通常又將各二極與一個位元組的8位對應,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相應8個發光二極體正好與單片機一個埠Pn的8個引腳連接,這樣單片機就可以通過引腳輸出高低電平控制8個發光二極的亮與滅,從而顯示各種數字和符號;對應位元組,引腳接法為:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。
如果將8個發光二極體的負極(陰極)內接在一起,作為數碼管的一個引腳,這種數碼管則被稱為共陰數碼管,共同的引腳則稱為共陰極,8個正極則為段極。否則,如果是將正極(陽極)內接在一起引出的,則稱為共陽數碼管,共同的引腳則稱為共陽極,8個負極則為段極。
以單支共陰數碼管為例,可將段極接到某埠Pn,共陰極接GND,則可編寫出對應十六進制碼的七段碼表位元組數據如右圖:
16鍵碼顯示的程序
我們在P1埠接一支共陰數碼管SLED,在P2、P3埠接16個按鍵,分別編號為KEY_0、KEY_1到KEY_F,操作時只能按一個鍵,按鍵後SLED顯示對應鍵編號。
代碼
1. #include <at89x52.h>
2. #define SLED P1
3. #define KEY_0 P2^0
4. #define KEY_1 P2^1
5. #define KEY_2 P2^2
6. #define KEY_3 P2^3
7. #define KEY_4 P2^4
8. #define KEY_5 P2^5
9. #define KEY_6 P2^6
10. #define KEY_7 P2^7
11. #define KEY_8 P3^0
12. #define KEY_9 P3^1
13. #define KEY_A P3^2
14. #define KEY_B P3^3
15. #define KEY_C P3^4
16. #define KEY_D P3^5
17. #define KEY_E P3^6
18. #define KEY_F P3^7
19. Code unsigned char Seg7Code[16]= //用十六進數作為數組下標,可直接取得對應的七段編碼位元組
20. // 0 1 2 3 4 5 6 7 8 9 A b C d E F
21. {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
22. void main( void )
23. {
24. unsigned char i=0; //作為數組下標
25. P2 = 0xff; //P2作為輸入,初始化輸出高
26. P3 = 0xff; //P3作為輸入,初始化輸出高
27. While( 1 )
28. {
29. if( KEY_0 == 0 ) i=0; if( KEY_1 == 0 ) i=1;
30. if( KEY_2 == 0 ) i=2; if( KEY_3 == 0 ) i=3;
31. if( KEY_4 == 0 ) i=4; if( KEY_5 == 0 ) i=5;
32. if( KEY_6 == 0 ) i=6; if( KEY_7 == 0 ) i=7;
33. if( KEY_8 == 0 ) i=8; if( KEY_9 == 0 ) i=9;
34. if( KEY_A == 0 ) i=0xA; if( KEY_B == 0 ) i=0xB;
35. if( KEY_C == 0 ) i=0xC; if( KEY_D == 0 ) i=0xD;
36. if( KEY_E == 0 ) i=0xE; if( KEY_F == 0 ) i=0xF;
37. SLED = Seg7Code[ i ]; //開始時顯示0,根據i取應七段編碼
38. }
39. }