请问各位大佬,我做的两个
单片机之间用蓝牙模块进行
通信时,在
proteus上
仿真(蓝牙我直接用导线代替)时很成功,但是用实物时就一点反应都没有。下面是代码,功能是控制主机的矩阵键盘,在从机上显示矩阵键盘上按下的按键号。
/**************************************************
主机部分
******************************************/
#include<reg52.h>
#define u8 unsigned char
#define u16 unsigned int
u8 res;//存储键盘扫描的结果,用来判断按下的是哪个按键
void Init_master()
{
TMOD=0X20;
TH1=0Xf9;
TL1=0Xf9;
PCON=0X80;
TR1=1;
SCON=0X50;
}
unsigned char scan_key()
{
P2 = 0xf0;
switch (P2)
{
case 0x70:
res = 0;
break;
case 0xb0:
res = 1;
break;
case 0xd0:
res = 2;
break;
case 0xe0:
res = 3;
break;
default:res=16;
}
P2 = 0x0f;
switch(P2)
{
case 0x07:
res = 0 + res;
break;
case 0x0b:
res = 4 + res;
break;
case 0x0d:
res = 8 + res;
break;
case 0x0e:
res = 12 + res;
break;
default:res=16;
}
return res;
}
void main()
{
while(1)
{
u16 i=500,j=500;
Init_master(); //调用串口初始化函数
scan_key();//调用键盘扫描函数
SBUF=res; //将扫描到的键值发送出去
while(!
ti); //检测是否发送完成,完成则讲TI清零
TI=0;
}
}
/***********************************************************
从机部分
************************************************************/
#include<reg52.h>
#define u8 unsigned char
#define u16 unsigned int
u8 res;
u8 seg[17]= {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00
};
void Init_slave()
{
TMOD=0X20; //设置定时器1工作在模式2
TH1=0Xf9; // 设定波特率为9600
TL1=0XF9;
PCON=0X80; //smod0=1;
TR1=1; //打开定时器1
SCON=0X50; //设置串口控制寄存器,使之工作在方式1
EA=1; //打开总中断
ES=1; //打开串口中断
}
void main()
{
Init_slave(); //调用串口初始化函数
while(1);
}
void slave()interrupt 4 //中断服务函数
{
RI=0; //将接收中断清零,等待下一次接收
res=SBUF; //将缓存区的值通过p1口输出
P1=seg[res];
}
一周热门 更多>