『壹』 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;
}
}
}
『貳』 銀行一米線的c程序 晶元AT89C52,語音模塊接單片機的P34,P35埠,激光模塊接單片機的P24,P25埠,語言是
//程序說明--------------------
//程序一直檢測激光模塊介面,
//如果先檢測到裡面的介面,延時一段 時間後,又檢測到外面的介面信號,說明有人往外走,啟動語音「謝謝光臨」
//如果先檢測到外面的介面信號,延時一段時間後,檢測到裡面的介面信號,說明有人走進來,啟動語音「某某銀行竭誠為你服務」
//當有人還在裡面的時候,後續的人進來,提示「請退到一米線外」
#include<AT89X52.H>
//埠定義------------------
sbit WELCOME =P3^4;
sbit BYE =P3^5;
sbit INSIDE =P2^4;
sbit OUTSIDE =P2^5;
// 語音(P3.4和P3.5)和激光模塊(P2.4和P2.5)
unsigned char someone; //有人 為1,無人0
//延時---------------------
void delay()
{
unsigned char i,j,k;
for(i=0;i<200;i++)
for(j=0;j<200;j++)
for(k=0;k<200;k++);
}
//主程序------------------
void main()
{
while(1)
{
if(INSIDE) //出去
{
delay();
if(OUTSIDE)
{
someone=0;
BYE=0;
}
}
if(OUTSIDE) //進來
{
delay();
if(INSIDE)
{
someone=1;
WELCOME=0;
}
}
if(someone)
{
if(OUTSIDE) //後面有人進來
{
delay();
if(INSIDE)
{
//請退到一米線外
}
}
}
}
}
具體還要按 實際 調整
『叄』 15單片機怎樣用p34口
是51單片機吧,P3.4是多功能口,一是標準的IO口,可以直接輸入輸出
第二個功能是T0的脈沖輸入口,當T0作為計數器時,可以作為T0的脈沖輸入口使用。
『肆』 為什麼stc89c52單片機的p34口高電平電壓只有0.8v
這個引腳你接大電流的負載了吧,可以把該引腳設置成推挽輸出,理論電流可達20ma。