‘壹’ 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。