#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define KeyPort_h P2//列线
#define KeyPort_l P1//行线
void DelayUs2x(uchar t);//us级延时函数声明
void DelayMs(uchar t); //ms级延时
uchar KeyScan(void);//键盘扫描
uchar KeyPro(void);
/*------------------------------------------------
串口发送
------------------------------------------------*/
void txd (uchar m)
{
SBUF=m;
while(!TI);TI=0;
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
SCON=0X40;//串口方式1/REN=0
PCON=0X80;// 波特率倍增
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1= 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TL1= 0xFD;
TR1= 1; // TR1: timer 1 打开
while (1) //主循环
{
uchar num;
num=KeyPro();
if(num!=0xff)
txd (num);
}
}
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(uchar t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(uchar t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
按键扫描函数,返回扫描键值
------------------------------------------------*/
uchar KeyScan(void) //键盘扫描函数,使用行列逐级扫描法
{
uchar Val;
KeyPort_h=0x0f;//高四位置高
KeyPort_l=0x00;//低四位拉低
if(KeyPort_h!=0x0f)//表示有按键按下
{
DelayMs(5); //去抖
if(KeyPort_h!=0x0f)
{ //表示有按键按下
KeyPort_l=0xf7; //检测第一行
if(KeyPort_h!=0x0f)
{
Val=0x70|(KeyPort_h&0x0f);
while(KeyPort_h!=0x0f);
DelayMs(5); //去抖
while(KeyPort_h!=0x0f);
return Val;
}
KeyPort_l=0xfb; //检测第二行
if(KeyPort_h!=0x0f)
{
Val=0xb0|(KeyPort_h&0x0f);
while(KeyPort_h!=0x0f);
DelayMs(5); //去抖
while(KeyPort_h!=0x0f);
return Val;
}
KeyPort_l=0xfd; //检测第三行
if(KeyPort_h!=0x0f)
{
Val=0xd0|(KeyPort_h&0x0f);
while(KeyPort_h!=0x0f);
DelayMs(5); //去抖
while(KeyPort_h!=0x0f);
return Val;
}
KeyPort_l=0xfe; //检测第四行
if(KeyPort_h!=0x0f)
{
Val=0xe0|(KeyPort_h&0x0f);
while(KeyPort_h!=0x0f);
DelayMs(5); //去抖
while(KeyPort_h!=0x0f);
return Val;
}
}
}
return 0xff;
}
/*------------------------------------------------
按键值处理函数,返回扫键值
------------------------------------------------*/
uchar KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值
case 0x7d:return 1;break;//1
case 0x7b:return 2;break;//2
case 0x77:return 3;break;//3
case 0xbe:return 4;break;//4
case 0xbd:return 5;break;//5
case 0xbb:return 6;break;//6
case 0xb7:return 7;break;//7
case 0xde:return 8;break;//8
case 0xdd:return 9;break;//9
case 0xdb:return 10;break;//a
case 0xd7:return 11;break;//b
case 0xee:return 12;break;//c
case 0xed:return 13;break;//d
case 0xeb:return 14;break;//e
case 0xe7:return 15;break;//f
default:return 0xff;break;
}
}
uart.zip_双单片机通信
版权申诉
53 浏览量
2022-09-19
22:28:50
上传
评论
收藏 110KB ZIP 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- 基于pytorch+Unet进行MRI肝脏图像分割源码+数据集+模型.zip
- 在Android Studio中开发一个Android App项目步骤
- 基于yolov8实现进行物体跟踪源码.zip
- Java多线程学习Java多线程学习Java多线程学习Java多线程学习.txt
- 算法数据结构-动态规划算法(Dynamic Programming)超详细总结加应用案例讲解.txt
- 2024最强秋招八股文(精简、纯手打)2024最强秋招八股文(精简、纯手打).txt
- 基于tensorflow多特征融合的微表情识别python源码.zip
- 基于yolov8实现人脸检测的python源码+运行说明.zip
- Micron Memory DDR3 SDRAM 全系列AD集成库(原理图库+PCB封装库).IntLib
- 基于tensorflow多特征融合的微表情识别python源码+详细使用说明.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈