打印
[疑难问答]

串口RS232发送的问题?

[复制链接]
2063|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Karlshen|  楼主 | 2009-11-21 22:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近学到了串口通信,于是自己动手写了个发送程序:

键盘是3*3的矩阵键盘,K1到K9以此对应要发送的A到I字符

#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char;
kbscan();键盘
rs232_into();
send(unsigned char sdata);
delay(uint t);
unsigned char key,dat;
main()
{
rs232_into();
while(1)
{
  key=kbscan();键盘扫描带回的返回值
  dat=key&0x3f;屏蔽高两位,保留六位
  switch(dat)
  {
   case(0x1e): //k1
   {
    send('A');
    break;
   }
   case(0x2e):   //k2
   {
    send('B');
    break;
   }
   case(0x36):    //k3
   {
    send('C');
    break;
   }
      case(0x1d):    //k4
   {
    send('D');
    break;
   }
   case(0x2d):    //k5
   {
    send('E');
    break;
   }
   case(0x35):   //k6
   {
    send('F');
    break;
   }
   case(0x1b):  //k7
   {
    send('G');
    break;
   }
   case(0x2b):    //k8
   {
    send('H');
    break;
   }
   case(0x33):  //k9
   {
    send('I');
    break;
   }
   default:
   break;
  }
}
}

rs232_into() //初始化232
{
SCON=0x50;//串口方式1,允许接收
TMOD=0x20;//启用定时器1
PCON=0x80;//SMOD=0不加倍
TH1=0XFD;
TL1=0XFD;
TR1=1;
}

kbscan()//键盘扫描
{
unsigned char sccode,recode;
P1=0XF0;
if((P1&0xf0)!=0xf0)
{
  delay(10000);
  if((P1&0XF0)!=0XF0)
  {
   sccode=0xfe;
   while((sccode&0x10)!=0)
   {
    P1=sccode;
    if((P1&0xf0)!=0xf0)
    {
     recode=P1&0XF0;
     sccode=sccode&0x0f;
     return(recode+sccode);
    }
   else
   sccode=sccode<<1|0x01;
   }
  }
}
return(0);
}
delay(uint t)
{
for(;t>0;t--);
}

send(unsigned char sdata)
{
SBUF=sdata;
while(!TI);
TI=0;
}
程序有些臃肿,

问题是下载到实验板上K3,K6,K9始终没有任何反应,更搞不懂的是在超级终端里显示接收到得都是乱码或者空格,用串口调试除了K1,K2,K5三个按键有反应外其他都没反应像没用一样,可以确定的是键盘的硬件上没有问题,程序部分的键盘扫描是调用以前做数字钟的部分程序返回值也是正确的,可是为什么会这样呢?百思不得其解??
沙发
lovelyegle| | 2009-11-29 22:36 | 只看该作者
程序太长了

使用特权

评论回复
板凳
huamunv| | 2009-12-1 13:03 | 只看该作者
接收程序的问题?

使用特权

评论回复
地板
Karlshen|  楼主 | 2009-12-11 22:42 | 只看该作者
:L

使用特权

评论回复
5
sz_n053| | 2009-12-12 16:59 | 只看该作者
超级终端里显示接收到得都是乱码或者空格---------> 波特率有设对吧..

使用特权

评论回复
6
lovelyegle| | 2009-12-12 21:25 | 只看该作者
顶!

使用特权

评论回复
7
suoma| | 2009-12-12 22:46 | 只看该作者
K3,K6,K9和K1,K2,K5按键不一样的地方在哪儿?一个比较菜的问题

使用特权

评论回复
8
Karlshen|  楼主 | 2009-12-14 21:31 | 只看该作者
5# sz_n053
怎么判断波特率设置对了没?

使用特权

评论回复
9
Karlshen|  楼主 | 2009-12-14 21:31 | 只看该作者
7# suoma
名字不一样:lol

使用特权

评论回复
10
Karlshen|  楼主 | 2009-12-29 22:55 | 只看该作者
找到了,波特率有计算公式的:$

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

81

主题

734

帖子

1

粉丝