打印

串口发送数据异常

[复制链接]
2833|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hanshiwangzi|  楼主 | 2012-11-30 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近一直纠结串口发送数据请大神帮忙啊!
两单片机之间用串口通信,A机用数码管显示并串口发送矩阵键盘的键值;B机接收键值并用数码管显示。0--3正常,4--7全是0,8---F正常。代码如下:
#include <reg52.h>      //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
uchar key;
/*uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; */
uchar code table[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71};
void display(uchar num)
{
P0=table[num]; //显示函数只送段选数据
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)        //i=xms即延时约xms毫秒
  for(j=110;j>0;j--);
}
void send(uchar key_num)
{
SBUF=key_num;
while(!TI);
TI=0;
}
void matrixkeyscan()
{
uchar temp,a;
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delayms(10);
   temp=P3;
   temp=temp&0xf0;
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xee:
               key=0;
               break;
          case 0xde:
               key=1;
               break;
          case 0xbe:
               key=2;
               break;
          case 0x7e:
               key=3;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
         }     
   send(key);
      }
    }
    P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delayms(10);
      temp=P3;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xed:
               key=4;
               break;
          case 0xdd:
               key=5;
               break;
          case 0xbd:
               key=6;
               break;
          case 0x7d:
               key=7;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
         }   
   send(key);
               }
    }
    P3=0xfb;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delayms(10);
      temp=P3;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xeb:
               key=8;
               break;
          case 0xdb:
               key=9;
               break;
          case 0xbb:
               key=10;
               break;
          case 0x7b:
               key=11;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
         }     
   send(key);
      
      }
    }
    P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delayms(10);
      temp=P3;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xe7:
               key=12;
               break;
          case 0xd7:
               key=13;
               break;
          case 0xb7:
               key=14;
               break;
          case 0x77:
               key=15;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
         }      
          send(key);
         
      }
    }
}
void main()
{
        uchar i=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
                            matrixkeyscan();//不停调用键盘扫描程序
                             display(key);
  
}
}

相关帖子

沙发
uet_cache| | 2012-12-8 12:23 | 只看该作者
你不是双机通讯吗?另一个程序呢,还有,你的问题是什么?另外,串口中断函数在哪?楼主的程序还差很多啊。

使用特权

评论回复
板凳
hanshiwangzi|  楼主 | 2012-12-9 14:22 | 只看该作者
我才刚开始学,接收程序是正常的,就是发送键值的时候发送4~7时全部显示00,这个很是纠结,其他的键值完全正常啊!还望大哥帮小弟一把啊

使用特权

评论回复
地板
hanshiwangzi|  楼主 | 2012-12-9 14:28 | 只看该作者
不好意思,我这个没有用到中断,

使用特权

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

本版积分规则

2

主题

15

帖子

0

粉丝