導航:首頁 > 操作系統 > 單片機按鍵數碼管顯示

單片機按鍵數碼管顯示

發布時間:2022-10-05 17:39:01

⑴ 51單片機怎樣用鍵盤控制數碼管顯示

51單片機怎樣用鍵盤控制數碼管顯示的方法。

如下參考:

1.首先,編寫代碼並點亮數碼管。

⑵ 單片機 按鍵控制8位數碼管顯示問題

關於數碼管的顯示,是顯示完一個位的是數字後,在顯示下一個位時要先把上一個位顯示徹底關閉掉,通常可以是把全部數碼管位全部顯示為空的狀態,談後在開下一個位的顯示(有延時),這樣在開下一個位的鎖存時上一個位的數據就不會跑到該位顯示,不然會在下一位顯示時會與上一個位的數字出現重影現象。。。
還有對於數碼管的顯示,最好是一次性顯示完全部數碼管,還沒有得位就顯示0ff(要記得初始化你的數組)。我個人不建議你這種顯示按位數變化方式。。。
for(i=0;i<j;i=i+1)
//每次都顯示完8個數碼管比較好。。。
{
/*
在此增加把所有數碼管顯示為0FF狀態,全部位都打開顯示
*/
display=weima_table[i];
//數碼管需要顯示的位
weima_latch=1;
//鎖存器(位碼)打開
weima_latch=0;
//鎖存器(位碼)關閉
display=cunchudisplay[i];
//數碼管需要顯示的段
anma_latch=1;
//鎖存器(段碼)打開
anma_latch=0;
//鎖存器(段碼)關閉
Delay(100);
}
判斷歸零一個變數,最好緊跟在修改該值的後面,不用放在主循環里每次循環都要判斷,雖然你那沒多大問題但可讀性不夠好。。。
j=j+1;
if(j==8)
{j=0;}

⑶ 單片機中數碼管無論數碼管顯示多少,按鍵按下時數碼管就顯示零程序怎麼寫呀

1、寫個按鍵掃描程序:監視某個IO口的電平(如按鍵按下IO口低電平),延時消抖,確認按鍵按下。
2、寫個數碼管顯示子程序
3、在主程序中調用按鍵掃描了程序,確認按鍵按下後調用數碼管顯示程序把「0」送顯即可

⑷ 51單片機怎樣用鍵盤控制數碼管顯示

51單片機怎樣用鍵盤控制數碼管顯示的方法。

如下參考:

1.首先,編寫代碼並點亮數碼管。

⑸ 51單片機6位數碼管顯示時間

C51單片機六位數碼管時鍾
用數碼管dot分隔時分秒
用三個按鍵設置時間:
SET鍵:小時設定->分鍾設定->結束設定,小時設定狀態時表示小時的兩位數碼管閃爍,分鍾設定時表示分鍾的兩位數碼管閃爍
CHANGE鍵:在小時設定狀態和分鍾設定狀態改變數值
SET S鍵:秒置零

C語言代碼:
//main.c

#include <REGX52.H>
typedef unsigned int UINT ;
typedef unsigned char UCHAR ;
#define KEY P2
#define KEYMASK 0x07
sbit LE1 = P2^6; //定義位控口
sbit LE2 = P2^7; //定義段控口
UCHAR KeyPressDown = 0x00;
UCHAR KeyRelease = 0x00;
UCHAR LastKey = 0x00;
UCHAR MODE ;
extern UCHAR HH;
extern UCHAR MM;
extern UCHAR SS;
extern bit T_CYCLE ;
extern void T0_Init(void); //初始化定時器,函數定義在Timer.c
UCHAR code NUM[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(UINT t) //延時t時鍾周期
{
while (t--) ;
}

void H_Increase(void) //小時增1
{
if(HH<23) HH++;
else
{
HH = 0;
}
}

void M_Increase(void) //分鍾增1
{
if(MM<59) MM++;
else
{
MM = 0;
H_Increase();
}
}

void S_Increase(void) //秒增1
{
if(SS<59) SS++;
else
{
SS = 0;
M_Increase();
}
}

void display(UCHAR SEG,UCHAR Digi) //顯示一位數碼管,SEG = 0-9數字,Digi = 第0-6位
{
LE2 = 1;
P0 = (0x01<<Digi) ;
LE2 = 0;
P0 = 0x00;
LE1 = 1;
P0 = NUM[SEG];
if (Digi==1||Digi==3) P0 &= 0x7f ; //顯示分隔符
delay(50);
P0 = 0xff;
LE1 = 0;
}

void main(void)
{
P0 = 0xff;
LE1 = 0;
LE2 = 0;
T0_Init();
while(1)
{
if(MODE != 1 || T_CYCLE)
{
display(HH/10,0); //顯示小時十位數
display(HH%10,1); //顯示小時個位數
}
if(MODE != 2 || T_CYCLE)
{
display(MM/10,2); //顯示分鍾十位數
display(MM%10,3); //顯示分鍾個位數
}
display(SS/10,4); //顯示秒十位數
display(SS%10,5); //顯示秒個位數
}
}

void key_Process(void) //按鍵處理程序
{
UCHAR CurrKey;
KEY |= KEYMASK; //將按鍵對應的IO設置為輸入狀態
CurrKey = (~KEY) & KEYMASK;

KeyPressDown = (~LastKey) & CurrKey;
KeyRelease = LastKey & (~CurrKey);

LastKey = CurrKey;
switch(KeyRelease)
{
case 1:
if(MODE == 2) MODE = 0;
else MODE ++;
break;
case 2:
if(MODE == 1) H_Increase() ;
if(MODE == 2) M_Increase() ;
break;
case 4:
SS = 0;
break;
default: break;
}
}

//Timer.c

#include <reg52.h>
typedef unsigned int UINT ;
typedef unsigned char UCHAR ;
UCHAR HH = 14; //小時初始值
UCHAR MM = 2; //分鍾初始值
UCHAR SS = 55; //秒初始值
UINT u_10ms = 0; //10ms計數
bit T_CYCLE = 0;
extern void key_Process(void);
extern void S_Increase(void);

void T0_Init(void)
{
TMOD &= 0xf0;
TMOD |= 0x01;
//定時器賦初始值,定時時間為10ms。
TH0 = 0xd8;
TL0 = 0xf0;
TR0 = 1;
IE = 0x82;

}

void T0_INTSrv(void) interrupt 1
{
//定時器重新開始計時。
TH0 = 0xd8;
TL0 = 0xf0;
u_10ms ++;
if (u_10ms%20==0) // 200 ms
{
T_CYCLE = ! T_CYCLE; //閃爍循環
}
if (u_10ms>99) // 1000 ms = 1 second
{
u_10ms = 0;
S_Increase();
}
key_Process(); //SET按鍵處理
}

Proreus模擬電路:

⑹ 51單片機怎麼讓數碼管動態顯示1234動態顯示後通過按鍵變成靜態顯示

數碼管動態顯示就是按順序分配給每一個數碼管顯示一定時間(如10ms等),如此循環;
對於時間間隔的設定,常採用定時器中斷方式來得到,可以首先讓定時器1ms中斷,然後在中斷函數里對全局變數m計數,即10次中斷就是10ms,同理,計數800次就是8秒了;

要想讓顯示變成靜態顯示,那麼就只有一位數碼管在顯示了;
這個可以在想顯示的位中,停止定時器計數,或者在 m 未達到設定值前清0 即可;
另外,不要再採用delay()這樣的代碼延時函數;

⑺ 51單片機怎麼用按鍵控制一個數碼管,按一下顯示一個數字,順序顯示

1、首先,要把代碼寫好,點亮數碼管。

⑻ 51單片機c語言設計,按鍵控制數碼管,依次按下顯示0到9循環

假設你的是共陽極數碼管,P0接數碼。按鍵接P2^0;

#include<reg52.h>
typedef unsinged int uint;
sbit key=P2^0;
unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void denay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--)

}

void main()
{
uchar a;

while(1)
{
P0=tab[a];

if (key1==0)
{delay(10);
if(key==0)
{
while(!key1);

a++;
if(a==10) a=0;

}

}

}

⑼ 51單片機按鍵時,數碼管會閃爍一下.原因是什麼

原因很簡單,這是代碼和數碼管驅動的問題
按鍵會影響數碼管顯示,這是單片機直接驅動數碼管會出現的問題,而數碼管則是工作在動態掃描方式的,若是採用帶有鎖存器件的數碼管驅動,則不會出現此類現象,因為單片機是周期性的掃描工作方式,單片機直接驅動數碼管的電路,當單片機掃描到按鍵的時候,數碼管部分就停止了(一般的代碼都這樣,除非數碼管是工作在靜態掃描方式)
直接驅動數碼管,按鍵的代碼一般都會寫一些延時,用來軟體消除按鍵的抖動,若延時的時間太長,就會影響數碼管的顯示效果,另外有些還會增加等待按鍵松開的語句,這種語句一般都是一個死循環,除非按鍵被松開
解決辦法是,減少按鍵消抖動延時的時間,在等待按鍵松開的死循環語句中調用數碼管顯示函數,這樣基本上就可以解決此類問題

⑽ 單片機檢測和處理按鍵時怎樣不幹擾數碼管的顯示

程序亂了一點,重新調整一下結構吧,你可以試一下這樣:你的4位數碼管還是用動態掃描,4個以內的按鍵也還是用掃描,不過你要把幾個按鍵的掃描時間安排在4個數碼管的顯示時間內,即是顯示第一位數碼管後就掃描第一個按鍵狀態,判斷按鍵的不同狀態(開或合)給予不同的標志(這個標志用來後面程序統一處理按鍵的動作的);當顯示第二位數碼管後就掃描第二個按鍵的狀態,判斷按鍵的不同狀態(開或合)給予不同的標志...以此類推,當4個數碼管都顯示完後就放一段按鍵的處理程序(根據不同的標志作出不同的處理),到此再返回開始處循環.

閱讀全文

與單片機按鍵數碼管顯示相關的資料

熱點內容
程序員用得到數字區嗎 瀏覽:174
python求商 瀏覽:477
ipad能用c語言編譯器嗎 瀏覽:561
軟泥解壓球最新版 瀏覽:998
4萬程序員辭職創業 瀏覽:759
thinkingphp 瀏覽:597
安卓相冊移動文件夾 瀏覽:6
耳朵清潔解壓聲控99的人都睡得著 瀏覽:205
叉車出租網站源碼 瀏覽:874
共享單車的app是什麼 瀏覽:408
不帶gui的伺服器什麼意思 瀏覽:373
金剛經及PDF 瀏覽:102
php中冒號 瀏覽:358
php5432 瀏覽:352
命令在哪使用 瀏覽:172
php獲取網頁元素 瀏覽:708
為什麼需要硬體驅動編譯 瀏覽:885
pm編程怎樣看導柱孔對不對稱 瀏覽:138
農業大學選課找不到伺服器怎麼辦 瀏覽:659
路由配置網關命令 瀏覽:935