❶ 51單片機3鍵鍵盤電路圖[只有三個按鍵,鏈接pc的]
同學你好,我來幫你,你可以使用串口啊,比如:1:給你一個從PC發給單片機數據後,單片機再原樣發給PC的參考代碼:2:將51某一個(引腳)按鍵0,1狀態,發給PC;
1::::::::::::::
#include <REG52.H>
bit Flag;
unsigned int R_D,S_D;
unsigned char i;
void usart_init(void); ///串口初始化
void main (void) {
usart_init(void); ///串口初始化
while(1)
{
if (Flag==1)
{
SBUF = S_D; //SUBF接受/發送緩沖器(又叫串列通信特殊功能寄存器)
while(!TI);// 等特數據傳送(TI發送中斷標志)
TI = 0;// 清除數據傳送標志
Flag=0;
}
}
}
}
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中斷標志
{
RI = 0; //清除RI接受中斷標志
R_D = SBUF; //SUBF接受/發送緩沖器
S_D=R_D;///////返回PC發送
Flag=1;
}
}
void usart_init(void)///串口初始化
{
SCON = 0x50; //REN=1允許串列接受狀態,串口工作模式1
TMOD|= 0x20; //定時器工作方式2
PCON|= 0x80;
TH1 = 0xF3;// //baud*2 /* 波特率4800、數據位8、停止位1。效驗位無 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //開串口中斷
EA = 1; // 開總中斷
}
2:::::::::::::
#include <REG52.H>
sbit p34=P3^4;////////定義一個按鍵
bit Flag=1;
unsigned int S_D;
unsigned char i;
void usart_init(void); ///串口初始化
void delay (unsigned int Z) ; //延時程序 Z倍 MS
void key_p34(void) ; /////按鍵檢
void main (void) {
usart_init(void); ///串口初始化
key_p34(void) ; ////上電後檢測一次按鍵的狀態
if (Flag==1)//上電後發送一次按鍵的狀態
{
SBUF =1; //SUBF接受/發送緩沖器(又叫串列通信特殊功能寄存器)
while(!TI);// 等特數據傳送(TI發送中斷標志)
TI = 0;// 清除數據傳送標志
}
else
{
SBUF =0; //SUBF接受/發送緩沖器(又叫串列通信特殊功能寄存器)
while(!TI);// 等特數據傳送(TI發送中斷標志)
TI = 0;// 清除數據傳送標志
}
while(1)
{
key_p34(void) ;
if (Flag==1)
{
SBUF =1; //SUBF接受/發送緩沖器(又叫串列通信特殊功能寄存器)
while(!TI);// 等特數據傳送(TI發送中斷標志)
TI = 0;// 清除數據傳送標志
}
else
{
SBUF =0; //SUBF接受/發送緩沖器(又叫串列通信特殊功能寄存器)
while(!TI);// 等特數據傳送(TI發送中斷標志)
TI = 0;// 清除數據傳送標志
}
}
}
void usart_init(void)///串口初始化
{
SCON = 0x50; //REN=1允許串列接受狀態,串口工作模式1
TMOD|= 0x20; //定時器工作方式2
PCON|= 0x80;
TH1 = 0xF3;// //baud*2 /* 波特率4800、數據位8、停止位1。效驗位無 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //開串口中斷
EA = 1; // 開總中斷
}
void delay (unsigned int Z)//延時程序 Z倍 MS
{
unsigned int x,y;
for(x=Z;x>0;x--)
for(y=110;y>0;y--) ;
}
void key_p34(void) /////按鍵檢測
{
if(p34==0)
{ delay(10);
if(p34==0)
{
while(!p34) ;/////等待按鍵鬆手
Flag=0;
}
}
}
❷ C8051F330單片機設計按鍵檢測程序。。。急求大神指點!
P1MDIN是配置輸入模式的,置0為模擬輸入,置1位數字輸入,按鍵應銷梁選擇置1,單片機歲答復位後引腳的預設值是數字輸入,所以程序不需要更改.P0MOUT是配置輸出方式的,置0是開漏輸出,置1是推挽輸出,按鍵用不到所以不需要配置.C8051f330內部有弱上拉,按鍵不加上拉電阻也可以正虧雀運常使用
❸ 請教各位大神一個問題,電路圖如下,單片機3個IO口檢6個按鍵,還能檢到S1和S6同時按下狀態,IO內部上拉。
實際上就是通過電流方向來檢測的,為什麼這么說,請看下文
話不多說,先看原理圖,如下:
歡迎評論交流,也歡迎大家關注我:單片機嵌入式愛好者。會有源源不斷的干貨分享,能真正快速幫大家解決實際工作中遇到的問題哦!
❹ 單片機在檢測按鈕是否按下時,需要注意什麼問題如果要解決應如何處理
檢測按鍵是否按下,一要注意是」消抖「;二要注意按鍵的」抬起「和按下狀態。前者一般加幾十毫秒延時。後者看程序要求,是確定按下後,等待抬起才退出鍵盤檢測,還是直接退出。
❺ 單片機獨立按鍵的電路圖
可以,原理圖不是PCB布板,不是非得把器件用線連上才算連接的。原理圖上只要有同樣的網路編號原理上就是連通的。同樣的道理,這些電阻你都可以放到一邊,只要打上對應管腳一樣的網路標號就行
❻ 51單片機按鍵檢測問題
三個二極體、一個電阻,確實是一個與門。
電阻的計算公式,正確。
二極體的導通電壓、電流,選擇的基本合理。
可以進行實際電路的安裝、測試。
實際上,現在的二極體,發光效率,逐年的提高,已經不用 6mA,就很醒目了。
不同顏色的二極體,導通電壓,也有差異,選用較小的,才利於觸發中斷。
得進行反復實驗,才能完成設計。
在程序中,注意不要使 P3.2 輸出低電平,否則,會有較大的灌電流出現。
❼ 為51單片機設計一個上拉輸入和下拉輸入的按鍵電路並分析其工作原理
按鍵一般是上拉,單片機的IO通過電阻上拉高電平,按鍵正常高電平當按鍵按下短路,把IO變成低電平,單片機檢測到低電平表示有按鍵按下,按鍵下拉一般是把單片機IO通電阻接到GND,按鍵正常是低電平,當按鍵按下把IO拉高,單片機檢測到高電平表示有按鍵按下。
❽ AVR單片機獨立按鍵檢測
你的WHILE循環 temp!=0xff 這個條件永遠不會出現的
為什麼呢,猛肆你的PD口設置為輸出是不枝拿轎對的,要設置成輸入
初始化程序中敏帶的DDRD=0XFF 改為00就可以了
❾ 單片機按鍵檢測程序
P3=0xfe; //P3=0b1111 1110,令P3.0=0,同時令高四位為高電平,作好讀埠准備(51IO特點)
temp=P3; //讀回P3口的狀態
temp=temp&0xf0; //temp&1111 0000,0與任何數結果為0,把temp變數的低四位屏蔽了,高四位因為任何數與1等於它本身,所以把高四位對應的埠狀態讀進來。
while(temp!=0xf0) //上步處理後,高四為不全為1,說明有按鍵按下(結合矩陣鍵盤的電路結構才能理解,這里不方便上圖)
{
delay(5);
temp=P3;
temp=temp&0xf0;//這三句跟上面重復,功能是軟體消抖
while(temp!=0xf0) //延時一段時間後判斷還有按鍵按下,說明是真有按鍵按下,進入按鍵掃描與鍵值的判斷,否則可能是意外抖動引起的,就不進行按鍵掃描。
{
temp=P3;
switch(temp).....
我想注釋完應該能讀懂,關鍵是要理解矩陣鍵盤的掃描原理。
❿ 51單片機鍵盤電路的兩種方式,各自的優缺點
獨立按鍵優點:可以直接讀取,檢測佔用時間較少,不受其他因素影響
缺點:佔用IO口資源較多,每一個按鍵都獨佔一個IO口。
矩陣鍵盤優點:佔用IO口資源較少。
缺點:必須掃描檢測按鍵情況,程序復雜,佔用時間較多。