51单片机使用矩阵键盘发送数据到串口,然后再串口助手中显示。

2019-07-15 14:29发布

我的程序如下,有两个疑问。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//延时函数
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
  for(j = 110;j>0;j--);
}
//串口初始化函数
void init()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
REN = 1;
SM0 = 0;
SM1 = 1;
}
//键盘扫描函数
uchar KeyScan()
{
uchar crod_l= 0;
uchar crod_h= 0;
P3 = 0xf0;
if((P3 & 0xf0)!=0xf0)
{
  delayms(5);
  if((P3 & 0xf0)!=0xf0)
  {
   crod_l = P3 & 0xf0;
   P3 = crod_l | 0x0f;
   crod_h = P3 & 0x0f;
   while((P3 & 0x0f)!=0x0f);
  
  }
  }
  return(crod_l+crod_h);
}
//
uchar KeyPro()
{
uchar key_value = 0;
switch(KeyScan())
{
  case 0xee:key_value = 0;break;
}
return (key_value);

}

//主函数
void main(void)
{
init();
while(1)
{
  SBUF = KeyPro();
  while(!ti);
  TI=0;
}
}   
1.为什么在while循环里面一直循环,而串口不会一直发送00
2.在打开串口助手之后,会发送一个00H,或者两个00H,这是什么原因呢?百度了好久都没找到
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
360692218
1楼-- · 2019-07-15 18:59
求助攻啊,真的想不出来为什么。
零tot
2楼-- · 2019-07-15 21:27
感觉是ti的判断有问题
360692218
3楼-- · 2019-07-16 00:42
零tot 发表于 2016-4-10 18:19
感觉是ti的判断有问题

没有吧,那里等待发送完毕的
agdhun
4楼-- · 2019-07-16 02:21
建议按照这篇合理规划好代码,并用单元测试来寻找问题方案 Google_C 编码规范中文版.pdf (776.14 KB, 下载次数: 42)
360692218
5楼-- · 2019-07-16 07:27
 精彩回答 2  元偷偷看……
小小罗_468
6楼-- · 2019-07-16 07:28
这个SBUF控制是循环输出的,最好设置个标志flag来控制

一周热门 更多>