永发信息网

按下矩阵键盘第一行时以1200bps发送,1,2,3,4,第二行时以2400bps发送5,6,7,8, 第三行以4800bps发

答案:3  悬赏:80  手机版
解决时间 2021-11-25 07:11
按下矩阵键盘第一行时以1200bps发送,1,2,3,4,第二行时以2400bps发送5,6,7,8, 第三行以4800bps发
最佳答案

#include
#include
#define uint unsigned int
#define uchar unsigned char
uint temp;
uchar num,num1,num2,num3,num4;
//================================================================================
//====================子函数声明
void init();
uchar keyboard_scan();
void delay(uint z);

//================================================================================
//====================主函数
//================================================================================
void main()
{
init();
while(1)
{
keyboard_scan();//扫描按键,看那个按键按下
if(num>=1&&num<=4)
{
TH1=0xe8; //波特率1200bps
TL1=0xe8;
TR1=1; //打开串行口中断
delay(200);
SBUF=num; //发送数据
while(!TI); //扫描检查数据是否发送完
TI=0;
TR1=0; //关闭串行口中断
}
else if(num>=5&&num<=8)
{
TH1=0xf4; //波特率2400bps
TL1=0xf4;
TR1=1;
delay(200);
SBUF=num; //发送数据
while(!TI); //扫描检查数据是否发送完
TI=0;
TR1=0; //关闭串行口中断
}
else if(num>=9&&num<=12)
{
TH1=0xfa; //波特率4800bps
TL1=0xfa;
TR1=1;
delay(200);
SBUF=num; //发送数据
while(!TI); //扫描检查数据是否发送完
TI=0;
TR1=0; //关闭串行口中断
}
else if(num>=13&&num<=16)
{
TH1=0xfd; //波特率9600bps
TL1=0xfd;
TR1=1;
delay(200);
SBUF=num; //发送数据
while(!TI); //扫描检查数据是否发送完
TI=0;
TR1=0; //关闭串行口中断
}
// calculate();
// display();
}
}

//================================================================================
//====================init初始化函数
void init()
{
TMOD=0x20; //T1为工作方式2,10位异步收发(8位数据)
// TR1=1; //开T1中断
SM0=0; //SCON设置,串行口为工作方式1,10位异步收发(8位数据)
SM1=1;
REN=1; //允许串行口接收数据
EA=1; //开总中断
// ES=1; //开串行口中断

num=0;
}

//================================================================================
//====================keyscan键盘扫描函数
uchar keyboard_scan()
{
//--------------------第一行扫描==矩阵键盘
P3=0xfe; //给P3口赋初值 P3^0口给低电平
temp=P3; //读取P3口的值
temp=temp&0xf0;
if(temp!=0xf0) //有按键按下,temp不等于0xf0,表示式成立,执行这个if {} 的程序
{
delay(10); //延时消隐
if(temp!=0xf0); //再次判断
{
switch(temp) //temp这个值是temp=temp&0xf0的值,所以下方的case后面的语句也需要注意
{
case 0xe0:num=1;
break;
case 0xd0:num=2;
break;
case 0xb0:num=3;
break;
case 0x70:num=4;
break;
}
}
while(temp!=0xf0) //松手检测;若一直按着按键,temp!=0成立,一直运行{}内的语句
{ //如果无按键按下,P3=0xfe,temp=temp&0xf0=0xf0,那么while(假)跳出while语句
temp=P3;
temp=temp&0xf0;
}
}
//--------------------第二行扫描==矩阵键盘
P3=0xfd; //给P3口赋初值 P3^1口给低电平
temp=P3; //读取P3口的值
temp=temp&0xf0;
if(temp!=0xf0) //有按键按下,temp不等于0xf0,表示式成立,执行这个if {} 的程序
{
delay(10); //延时消隐
if(temp!=0xf0); //再次判断
{
switch(temp) //temp这个值是temp=temp&0xf0的值,所以下方的case后面的语句也需要注意
{
case 0xe0:num=5;
break;
case 0xd0:num=6;
break;
case 0xb0:num=7;
break;
case 0x70:num=8;
break;
}
}
while(temp!=0xf0) //松手检测;若一直按着按键,temp!=0成立,一直运行{}内的语句
{ //如果无按键按下,P3=0xfe,temp=temp&0xf0=0xf0,那么while(假)跳出while语句
temp=P3;
temp=temp&0xf0;
}
}
//--------------------第三行扫描==矩阵键盘
P3=0xfb; //给P3口赋初值 P3^2口给低电平
temp=P3; //读取P3口的值
temp=temp&0xf0;
if(temp!=0xf0) //有按键按下,temp不等于0xf0,表示式成立,执行这个if {} 的程序
{
delay(10); //延时消隐
if(temp!=0xf0); //再次判断
{
switch(temp) //temp这个值是temp=temp&0xf0的值,所以下方的case后面的语句也需要注意
{
case 0xe0:num=9;
break;
case 0xd0:num=10;
break;
case 0xb0:num=11;
break;
case 0x70:num=12;
break;
}
}
while(temp!=0xf0) //松手检测;若一直按着按键,temp!=0成立,一直运行{}内的语句
{ //如果无按键按下,P3=0xfe,temp=temp&0xf0=0xf0,那么while(假)跳出while语句
temp=P3;
temp=temp&0xf0;
}
}
//--------------------第四行扫描==矩阵键盘
P3=0xf7; //给P3口赋初值 P3^3口给低电平
temp=P3; //读取P3口的值
temp=temp&0xf0;
if(temp!=0xf0) //有按键按下,temp不等于0xf0,表示式成立,执行这个if {} 的程序
{
delay(10); //延时消隐
if(temp!=0xf0); //再次判断
{
switch(temp) //temp这个值是temp=temp&0xf0的值,所以下方的case后面的语句也需要注意
{
case 0xe0:num=13;
break;
case 0xd0:num=14;
break;
case 0xb0:num=15;
break;
case 0x70:num=16;
break;
}
}
while(temp!=0xf0) //松手检测;若一直按着按键,temp!=0成立,一直运行{}内的语句
{ //如果无按键按下,P3=0xfe,temp=temp&0xf0=0xf0,那么while(假)跳出while语句
temp=P3;
temp=temp&0xf0;
}
}
return num;
}


//================================================================================
//====================delay 延时函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
全部回答
。。追问??
百度一下,你就知道!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
从客村搭地铁到怎样到白云机场(要详细的)??
别人送了一袋猫屎咖啡,谁知道怎么冲泡?
我捡到一只信鸽 左脚环写的是:台湾真棒种鸽
中兴a5|o手机好不好
5.6乘13.1减5.6用简便方法计算
如何正确对待新车被别人试驾后的尴尬
所有百位数中不含6的百位数概率是?
tony和佑赫最近是不是有什么问题~?
请问电子狗跟云狗有什么区别
ndsi游戏好多游戏都玩不了 我都是从电玩巴士
菁英教育(宜山路校区)地址在什么地方,我要处
西宁当地有哪些大点的超市,和具体的地址
多2岁,小英与爸爸的年龄相差多少岁
155,00欧是多少人民币?
lg(2-x∧2)>0,,,求x
推荐资讯
经常有人跟我发木啊,是什么意思
谁能帮我查一下EMS EG761097466CN
现在荆棘谷的虎王绝版了?
盗窃手机两千多2300块钱最高获刑多久
摩托车配件有没有亿佳轮胎真空胎
喂奶能不能吃生姜
鱼线轮上的净钓重是什么意思
现在的女生怎么这么不爱惜自己身体,十九岁已
10年寿命,对于Windows 10支持时间够长吗
WOW耳光宏怎么做啊?
磁力吊起重器哪个厂家的品牌比较好
分宜共安网通缉犯
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?