|
程序效果:初始时发送端无任何显示,接受端显示8位的数字,当发送端的矩阵按键按下某一个时,
接受端就接受到对应的按键的操作,16个按键对应着对8位数字每个位的加减。
发送端代码:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define GPIO_KEY P1
uchar KeyValue; //存放键值
void delay(uint z); //延时函数
void send(uchar num1); //发送函数
void keyscan(); //矩阵键盘扫描函数
void UsartInit(); //串口初始化
void main()
{
UsartInit();
P0=0x00; //数码管初始消影
while(1)
{
keyscan(); //不断扫描键盘发送扫描结果
}
}
void UsartInit() //串口初始化,设置波特率
{
TMOD=0x20; //设置定时器1为工作方式2
TH1=0xfd; //装初值设置波特率
TL1=0xfd;
TR1=1; //打开定时器1
SCON=0X50;
PCON=0X00;
}
void delay(uint z) //延时函数
{
while(z--);
}
void send(uchar num1) //发送函数
{
SBUF=num1;
while(!TI);
TI=0;
}
void keyscan() //矩阵键盘扫描函数
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
delay(1000);//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
send(KeyValue); //传送键值
while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测
{
delay(1000);
a++;
}
}
}
}
所有资料在压缩包中。
|
评分
-
查看全部评分
|