導航:首頁 > 操作系統 > 單片機按鍵實驗

單片機按鍵實驗

發布時間:2022-01-21 23:00:55

A. 單片機應用:把獨立按鍵、靜態數碼管、矩陣鍵盤三個實驗程序合成一個程序(並注釋)請大神們幫助

100軟妹幣..

B. 單片機獨立按鍵實驗

能不能別發圖片,折怎麼調試

C. 單片機匯編矩陣鍵盤實驗(掃描法)

關於掃描按鍵的原理,可以看下面這篇文章。

本文以循序漸進的思路,引導大家思考如何用最少的IO驅動更多的按鍵,並依次給出5種方案原理圖提供參考。在實際項目中我們經常會遇到有按鍵輸入的需求,但有的時候為了節省資源成本,我們都會選擇在不增加硬體的情況下使用最少的控制器IO驅動更多的按鍵,那麼具體是怎麼做的呢,下面我們就以用5個IO引腳為例,講下怎麼設計可以實現更多的按鍵?共有5種設計思路,下面依次介紹。

思路一

首先通常想到的可能是下面這樣的設計:

這樣我們可以先識別K01、K02、K03、K04、K05,若沒有按鍵按下然後再和思路四的設計一樣去識別其他按鍵。但這樣存在一個問題,如果IO1配置為0,IO5讀到0,那麼怎麼知道是K51按下還是K05按下呢,這里只需要在程序里做下判斷,先判斷下是不是K05按下,若不是就是K51,因為按鍵K01、K02、K03、K04、K05在5個IO口都為讀取的情況下,就可以識別,不需要掃描識別處理,相當於這5個按鍵優先順序高與其他按鍵。

總結

綜合上述,5個IO口最多可以識別25個按鍵,思路五程序上處理比較麻煩,若實際中只按思路四設計,也可識別20個按鍵,那麼如果有N個IO口可識別多少按鍵呢?這里給出如下公式:

假設有N個IO口按照思路三可以識別N*(N-1)/2個;

按照思路四可識別N*(N-1)個;

按照思路5可以識別N*(N-1)+N個。

最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?

D. 單片機是ATmega48的,在設計一個簡單的按鍵實驗,但是不知道為什麼按鍵按下去始終沒有反應,求指教

汗 電路圖就有問題
硬體是 是按鍵跟電阻位置對調。電阻是上拉,按鍵是按下短路。
軟體上是 IO配置為帶上拉數字輸入。如DDRC &= ~0x02,PORTC |= 0x02;

E. 51單片機中獨立按鍵控制led燈的實驗當中按鍵的返回值怎麼設定

返回值,不需要設定。

對返回值,進行判斷,應該有個預定值。

這就要看你的獨立按鍵通過什麼介面晶元接入單片機了。

通常是某個位,為0。

F. 89C51單片機簡單鍵盤實驗利用keil uVision4模擬程序。利用簡單鍵盤模塊中提供的8個獨

#include<reg52.h>
sbit key = P1^0;//按鍵
void delay(unsigned int time)
{
unsigned int i,j;

for(i=0; i<time; i++)

for(j=0; j<1000; j++)

{;}
}
void mian()
{
unsigned int temp =0x00;
while(1)
{
if(key == 0)
{
delay(20);//適當延時,消除按鍵抖動,自己看實際情況修改時間
if(key == 0)

temp = ~temp;

}
P2 = temp;
}

}

G. 單片機實驗編程 按鍵聲光報警實驗 編寫程序.c

要同步就把揚聲器和指示燈用一個I/O控制就可以了,那就用定時器定時,0.5-1S取反一次就可以了,加一個觸發的引腳即可

H. 按鍵實驗

無論是矩陣鍵盤還是獨立鍵盤,單片機檢測其是否被按下的方法都是一樣的。也就是檢測與按鍵對應的 I/O 口的電平高低。

Ø 獨立按鍵有一端固定為低電平或高電平,單片機寫檢測程序時比較方便。

Ø 矩陣按鍵兩端都與單片機I/O口相連,因此檢測時需要人為地通過單片機 I/O 口送出低電平。先送一列為低電平,其餘幾列全為高電平(此時確定了列數),然後輪流檢測一次各行是否有低電平,若某一行為低電平(此時又確定了行數)。那麼我們就可以確定是哪一行哪一列的鍵被按下。 用同樣的方法,依次輪流送各列一次低電平,再輪流檢測一次各行中是否有低電平。這樣就可檢測完 所有的按鍵,也就能判斷出被按下的是哪一個鍵。 當然我們也可將各行線置低電平,然後掃描檢測各列線中是否出現低電平, 這就是矩陣鍵盤檢測的原理和方法。


#include <reg51.h>

#define uchr unsigned char

#define uint unsigned int


uchr code DSY_Table[]= //共陽極數碼管編碼

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, //0,1,2,3,4,5,6,7,8

0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF, //9,A,B,C,D,E,F,-

};


uchr key; //按鍵序號


void delayms(uchr x)

{

uchr i;

while(x--) for(i=0;i<120;i++);

}


void main()

{

uchr kp;

P0=0xff;


while(1)

{

P1=0xfd; //P1.1置 0

if(P1!=0xfd) //有鍵按下?

{

delayms(5); //延時消抖動

if(P1!=0xfd) //確認

{

kp=P1; //讀取埠鍵值

while(P1!=0xfd); //等待鍵松開

switch(kp&0xf0) //屏蔽低4位,判斷高4位

{

case 0xe0: //若高4位為e(即1鍵)

key=1; //賦鍵值

break;

case 0xd0: //若高4位為d(即5鍵)

key=5; //賦鍵值

break;

case 0xb0: //若高4位為b(即9鍵)

key=9; //賦鍵值

break;

case 0x70: //若高4位為7(即"9"鍵:num[9])

key=13; //賦鍵值

break;

}

}

}

P0 = DSY_Table[key]; //顯示按鍵值

delayms(5);

}

}

閱讀全文

與單片機按鍵實驗相關的資料

熱點內容
工作三年的大專程序員 瀏覽:728
java畢業設計文獻 瀏覽:143
籌碼集中度指標源碼 瀏覽:482
listsortjava 瀏覽:186
plc閃光電路編程實例 瀏覽:299
socket編程試題 瀏覽:206
華為的伺服器怎麼設置從光碟機啟動 瀏覽:871
程序員真的累嗎 瀏覽:328
學信網app為什麼刷臉不了 瀏覽:874
天蠍vs程序員 瀏覽:996
單片機下載口叫什麼 瀏覽:190
程序員的道 瀏覽:926
雲伺服器不實名違法嗎 瀏覽:558
怎樣查看文件夾圖片是否重復 瀏覽:995
文件怎麼導成pdf文件 瀏覽:808
打開sql表的命令 瀏覽:103
安卓手機如何面部支付 瀏覽:38
天元數學app為什麼登錄不上去 瀏覽:825
明日之後為什麼有些伺服器是四個字 瀏覽:104
安卓系統l1是什麼意思 瀏覽:26