1. 單片機的獨立按鍵
#include<reg51.h> // 4*4 按鍵+數碼管模擬,可以參考。
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表為 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char ledx[8];
bit s0,s1;
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() //要是按鍵了,掃描鍵盤編碼值
{
P1=0xF0;
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判斷是否按鍵
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
uchar i;
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
P0=0xff;
P2=LED7Code[ledx[0]];
P0=0xfe;
delay(5);
P0=0xff;
P2=LED7Code[ledx[1]];
P0=0xfd;
delay(5);
P0=0xff;
P2=LED7Code[ledx[2]];
P0=0xfb;
delay(5);
P0=0xff;
P2=LED7Code[ledx[3]];
P0=0xf7;
delay(5);
P0=0xff;
P2=LED7Code[ledx[4]];
P0=0xef;
delay(5);
P0=0xff;
P2=LED7Code[ledx[5]];
P0=0xdf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[6]];
P0=0xbf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[7]];
P0=0x7f;
delay(5);
}
}
2. 獨立式按鍵與行列式鍵盤各有什麼特點
獨立式按鍵是直接用I/O口線構成的單個按鍵電路,其特點是每個按鍵單獨佔用一根I/O口線,每個按鍵的工作不會影響其他I/O口線的狀態。適合於八鍵以下使用。
行列式鍵盤由行線和列線組成。其特點是在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。在按鍵數量較多時,行列式鍵盤較之獨立式按鍵鍵盤要節省很多I/O口,適合於八個鍵以上使用。
(2)單片機獨立式按鍵擴展閱讀:
獨立式按鍵電路配置靈活,軟體結構簡單,但每個按鍵必須佔用一個I/O口線,因此,在按鍵較多時,I/O口線浪費較大,不宜採用。單片機控制系統中,如果只需要幾個功能鍵,此時,可採用獨立式按鍵結構。
獨立按鍵的軟體常採用查詢式結構。先逐位查詢與I/O口線的輸入狀態,如某一根I/O口線輸入為低電平,則可確認該I/O口線所對應的按鍵已按下,然後,再轉向該鍵的功能處理程序。
行列式鍵盤的原理是當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。
3. 簡述單片機獨立按鍵的任務分為幾步,分別是什麼
5步。分別是判斷按鍵是否按下,延時消抖,再次判斷按鍵是否按下,等待按鍵抬起,執行預定語句。
一種是普通io口,一種是中彈的形式,普通io口是按下按鍵觸發按鍵子程序案件,指程序經過一段時間的,比如20~50毫秒的延時再次毒案件,如果按鍵值還是會按下,那麼就延時等待按鍵抬起按鍵,抬起後執行按鍵程序,然後返回中彈也是一樣的,按下按鍵之後進入中段讀按鍵狀態,是否還是為按一下是按一下等待延時再讀等待,然後等待案件採取後執行相應的代碼,然後退出總代。
4. 簡述獨立式按鍵使用場合
獨立式按鍵:直接由I / O線組成的單個按鈕電路,其特徵在於每個按鈕分別佔用一條I / O線,適用於八個按鍵。
我們在使用家用電器時經常需要通過按鍵給電器輸入指令,讓電器執行動作。比如電磁爐的開關、電飯煲定時時間設定等等。今天我們來講一下單片機怎麼識別按鍵操作指令的。
我們知道單片機只能識別高低電平,對於51單片機來說,0V為低電平,5V為高電平。按鍵就相當於一個開關,按下時導通,按鍵彈開時斷開。
在開始寫程序之前,我們需要了解一個實際應用的中知識點,按鍵在按下和釋放的時候並不是我們想像的是一個理想的方波脈沖,實際是在電平跳變的時候是有產生抖動的,這些抖動會導致單片機採集按鍵狀態時出現誤判的情況。
從實際波形我們可以看到在按鍵實際波形的中間有一段穩定的波形,我們可以採集這段波形進行判斷。也就是說在程序處理中,我們檢測到按鍵按下後延時3~5ms再次檢測按鍵是否處於按下狀態。
5. 單片機 按鍵(採用獨立式按鍵)按下一次,讓液晶第一位顯示的數碼加1,顯示範圍0~9
程序清單如下:
#include < reg51.h >// 51單片機頭文件
#define uchar unsigned char // 宏定義,用uchar替代無符號字元型
#define uint unsigned int // 宏定義,用uint 替代無符號整數型
sbit Key = P2 ^ 7;
uchar Count = 0;
uchar code DataChar[10] = // 定義數碼管的段碼 '0'~'9'、'-'、' ' 'P'
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
};//延時N毫秒
void DelayNms( uint N ) // 利用x、y作簡單的自減運算,消耗單片機指令周期,達到延時的目的
{
uint x,y;
for( x=N; x>0; x-- )
for( y=110; y>0; y-- );
}
//數碼管顯示 // 顯示方式為動態掃描,視覺暫留原理
void Display( uchar Num ) // *p指向Main函數中的數組ShowNum的首地址
{
P0 = DataChar[ Num ]; // 向P0賦段碼值
DelayNms(2); // 短暫的延時
P0 = 0x00; // 讓數碼管熄滅,否則會造成數字重疊
}
void main( void )
{
while(1)
{
if( Key == 0 )
{
DelayNms(30);
if( Key == 0 )
{
Count += 1;
Count = (Count>9)? 0 : Count;
}
while( !Key );
}
Display( Count );
}
}
6. 單片機應用中,獨立式按鍵操作的流程是什麼
一種是普通io口,一種是中彈的形式,普通io口是按下按鍵觸發按鍵子程序案件,指程序經過一段時間的,比如20~50毫秒的延時再次毒案件,如果按鍵值還是會按下,那麼就延時等待按鍵抬起按鍵,抬起後執行按鍵程序,然後返回中彈也是一樣的,按下按鍵之後進入中段讀按鍵狀態,是否還是為按一下是按一下等待延時再讀等待,然後等待案件採取後執行相應的代碼,然後退出總代。
7. 單片機獨立鍵盤和矩陣鍵盤的對比,他們的優缺點是什麼
獨立按鍵:
優點:可以直接讀取,檢測佔用時間較少,不受其它因素影響。
缺點:佔用IO口資源較多,每一個按鍵都獨佔一個IO口。
矩陣鍵盤:
優點:佔用IO口資源較少。
缺點:必須掃描檢測按鍵情況,程序復雜,佔用時間較多。
(7)單片機獨立式按鍵擴展閱讀:
在鍵盤中按鍵數量較多時,為了減少I/O口的佔用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個埠(如P1口)就可以構成4*4=16個按鍵,比之直接將埠線用於鍵盤多出了一倍,而且線數越多,區別越明顯。
8. 單片機一個獨立按鍵
#include<reg51.h> // 4*4 按鍵+數碼管模擬,可以參考。
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表為 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char ledx[8];
bit s0,s1;
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() //要是按鍵了,掃描鍵盤編碼值
{
P1=0xF0;
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判斷是否按鍵
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
uchar i;
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
P0=0xff;
P2=LED7Code[ledx[0]];
P0=0xfe;
delay(5);
P0=0xff;
P2=LED7Code[ledx[1]];
P0=0xfd;
delay(5);
P0=0xff;
P2=LED7Code[ledx[2]];
P0=0xfb;
delay(5);
P0=0xff;
P2=LED7Code[ledx[3]];
P0=0xf7;
delay(5);
P0=0xff;
P2=LED7Code[ledx[4]];
P0=0xef;
delay(5);
P0=0xff;
P2=LED7Code[ledx[5]];
P0=0xdf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[6]];
P0=0xbf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[7]];
P0=0x7f;
delay(5);
}
}
9. 51單片機為什麼要先按獨立按鍵才能正常工作
51(開發板)中的數碼管一次只能顯示一位數,屬於硬體限制,不能同時顯示兩位。在數碼管上顯示多位數只能靠高頻率的刷新顯示,在視覺上顯示多位。所以可以定義一個變數i,按鍵i自加,然後用循環顯示,循環次數為i。
根據提供的函數,表明你的板子LED是共陽極連接的,即LED陽極接到一起,每個LED陰極接IO口,這樣當IO口為低電平時燈就點亮了。所以,程序一開始是亮燈而不是滅燈。sbit BY1=P3^4是一個位定義,意思是把單片機的P3.4口定義為BY1,以後對BY1進行操作就是對P3.4進行操作。
單片機
也被稱為單片微控器,屬於一種集成式電路晶元。在單片機中主要包含CPU、只讀存儲器ROM和隨機存儲器RAM等,多樣化數據採集與控制系統能夠讓單片機完成各項復雜的運算,無論是對運算符號進行控制,還是對系統下達運算指令都能通過單片機完成。 由此可見,單片機憑借著強大的數據處理技術和計算功能可以在智能電子設備中充分應用。
10. 單片機獨立按鍵會相互影響嗎
不會
在單片機應用系統中,除了復位按鍵有專門的復位電路及專一的復位功能外,其他按鍵都是以開關狀態來設置控制功能或輸入數據的。當所設置的功能鍵或數字鍵按下時,計算機應用系統應完成該按鍵所設定的功能,鍵信息輸入時與軟體結構密切相關的過程。
對於一組鍵或一個鍵盤,總有一個介面電路與CPU相連。CPU可以採用查詢或中斷方式了解有無將按鍵輸入,並檢查是哪一個按鍵按下,將該鍵號送入累加器,然後通過跳轉指令轉入執行該鍵的功能程序,執行完成後再返回主程序。