找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4910|回复: 0
收起左侧

[原创][求助]串口RS232发送的问题?

[复制链接]
ID:6799 发表于 2009-11-8 00:22 | 显示全部楼层 |阅读模式

小弟最近学到了串口通信,于是自己动手写了个发送程序:

 

键盘是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三个按键有反应外其他都没反应像没用一样,可以确定的是键盘的硬件上没有问题,程序部分的键盘扫描是调用以前做数字钟的部分程序返回值也是正确的,可是为什么会这样呢?百思不得其解??

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表