专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
遇到了一个单片机的问题,觉得很奇葩,进来看看什么原因
2020-01-26 12:50
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
5026
1
1
#include <reg52.h>
#include <stdio.h>
#include "sys.h"
#define KEY_BOARD P2
u8 SenData,Flag;
u8 key_scan()
{
u8 KEY_VALUE;
u8 KEY;
u8 mark = 1;
KEY_BOARD = 0xf7;
if(0xf0 != (KEY = KEY_BOARD&0xf0) && mark)
{
put_s("key1 is ok!");
put_char(' ');
mark = 0;
switch (KEY)
{
case 0x70:
KEY_VALUE = 0x10; //一行一列
break;
case 0xb0:
KEY_VALUE = 0x11; //二行一列
break;
case 0xd0:
KEY_VALUE = 0x12; //三行一列
break;
case 0xe0:
KEY_VALUE = 0x13; //四行一列
break;
}
return KEY_VALUE;
}
KEY_BOARD = 0xfb;
if(0xf0 != (KEY = KEY_BOARD&0xf0) && mark)
{
put_s("key2 is ok!");
put_char(' ');
mark = 0;
switch (KEY)
{
case 0x70:
KEY_VALUE = 0x14; //一行二列
break;
case 0xb0:
KEY_VALUE = 0x15; //二行二列
break;
case 0xd0:
KEY_VALUE = 0x16; //三行二列
break;
case 0xe0:
KEY_VALUE = 0x17; //四行二列
break;
}
return KEY_VALUE;
}
KEY_BOARD = 0xfd;
if(0xf0 != (KEY = KEY_BOARD&0xf0) && mark)
{
put_s("key3 is ok!");
put_char(' ');
mark = 0;
switch (KEY)
{
case 0x70:
KEY_VALUE = 0x18; //一行二列
break;
case 0xb0:
KEY_VALUE = 0x19; //二行二列
break;
case 0xd0:
KEY_VALUE = 0x1a; //三行二列
break;
case 0xe0:
KEY_VALUE = 0x1b; //四行二列
break;
}
return KEY_VALUE;
}
KEY_BOARD = 0xfe;
if((0xf0 != (KEY = KEY_BOARD&0xf0)) && mark)
{
put_s("key4 is ok!");
put_char(' ');
mark = 0;
switch (KEY)
{
case 0x70:
KEY_VALUE = 0x1c; //一行二列
break;
case 0xb0:
KEY_VALUE = 0x1d; //二行二列
break;
case 0xd0:
KEY_VALUE = 0x1e; //三行二列
break;
case 0xe0:
KEY_VALUE = 0x1f; //四行二列
break;
}
return KEY_VALUE;
}
return KEY_VALUE;
}
void delay()
{
u16 i,j;
for(i=0;i<2000;i++)
{
for(j=0;j<100;j++);
}
}
/*********************************
*函数名:tranlate
*函数功能:将十进制转换成
*
*********************************/
void tranlate(int a,char *ftable)
{
char table[5],num=5,fnum=0,hh=0;
while(num--)
{
table[num]=a%10+'0';
a=a/10;
}
for (num=0;num<5;num++)
{
if((table[num]!='0')||hh)
{
*(ftable+fnum)=table[num];
fnum++;
hh=1;
}
}
*(ftable+fnum)=' ';
}
void main()
{
u8 key_pan;
char fuck[20];
Bps_Init(9600); //设置串口为9600波特率
EA = 1; //开启总中断
while(1)
{
key_pan = key_scan();
if(( key_pan &0xf0) != 0)
{
delay();
key_pan = key_scan();
if(0 != (key_pan & 0xf0))
{
tranlate(key_pan,fuck);
put_s(fuck);
put_char(' ');
put_s("key is ok!");
put_char(' ');
}
}
delay();
put_s("keyjj is ok!");
put_char(' ');
}
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
u8 ReData;
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
SenData=ReData;
Flag=1;
}
}
复制代码
在
if(0 != (key_pan & 0xf0))
{
tranlate(key_pan,fuck);
put_s(fuck);
put_char(' ');
put_s("key is ok!");
put_char(' ');
}
复制代码
中,如果不写tranlate(key_pan,fuck);这个函数,程序就一直输出key is ok! 不知道原因啊。。。。。
发送
看不清?
0条回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
东软载波ESF0654 PDS开发板串口USART0代码分享
1 个回答
普通32位单片机使用linux的应用代码
5 个回答
东软载波ESF0654 PDS开发板AT24C04的调试
9 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
一周热门 更多>