打印

单片机双机通信问题

[复制链接]
1015|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新手求关照|  楼主 | 2015-11-15 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
将两个单片机的TXD RXD交叉连接 GND共地后,按一个单片机的键盘,另一个单片机显示数字,下面是自己写的程序,实现不了这个功能,求大神指导
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^7;
sbit dula=P2^6;
uchar flag;
uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71
};
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void init()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        SCON=0x50;
        EA=1;
        ES=1;
}
void display(uchar num)
{
        P0=table[num];
        dula=1;
        dula=0;
}
void send(uchar key_num)
{
        while(1)
        {
                if(flag==1)
                {
                        flag=0;
                        ES=0;
                        TI=1;
                        SBUF=key_num;
                        while(!TI);
                        TI=0;
                        ES=1;
                }
        }
}
void keyscan()
{
        uchar key,temp;
        P3=0xfe;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(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)
        {
                delay(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)
        {
                delay(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)
        {
                delay(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()
{
        init();
        P0=0xc0;
        wela=1;
        wela=0;
        while(1)
        {
                keyscan();
        }
}
void ser() interrupt 4
{
        uchar a;
        RI=0;
        a=SBUF;
        flag=1;
        display(a);
}

相关帖子

沙发
cpu51| | 2015-11-15 11:55 | 只看该作者
你应该说出具体现象,这么多程序,谁会一行一行看?

使用特权

评论回复
板凳
新手求关照|  楼主 | 2015-11-15 14:46 | 只看该作者
cpu51 发表于 2015-11-15 11:55
你应该说出具体现象,这么多程序,谁会一行一行看?

在一个单片机上按键,另一个单片机上没反应

使用特权

评论回复
地板
NE5532| | 2015-11-15 20:20 | 只看该作者
程序分模块调,不要想一口吃成胖子,请读 程序调试黑宝书

使用特权

评论回复
5
airwill| | 2015-11-16 18:52 | 只看该作者
代码写得还是蛮规整的. 支持一下新人.
可惜一条注释都没有, 这不适合拿出来跟人家交流讨论, 你应该让大家尽快看明白你的代码. 节约大家的时间才对.
你可以借助串口调试工具, 单个程序先调, 然后再联调通信

使用特权

评论回复
6
新手求关照|  楼主 | 2015-11-16 19:24 | 只看该作者
airwill 发表于 2015-11-16 18:52
代码写得还是蛮规整的. 支持一下新人.
可惜一条注释都没有, 这不适合拿出来跟人家交流讨论, 你应该让大家尽 ...

谢谢

使用特权

评论回复
7
ningling_21| | 2015-11-17 17:56 | 只看该作者
先调试串口发送和接收,先用电脑发送/接收,单片机接收/发送 到且正确再调试单片机发送单片机接收

使用特权

评论回复
8
落叶情怀| | 2015-11-17 20:35 | 只看该作者
send key 函数有问题吧

使用特权

评论回复
9
mochou| | 2015-11-19 10:26 | 只看该作者
楼主有没有调试通呢?

使用特权

评论回复
10
sio4| | 2015-11-19 11:11 | 只看该作者
没空来看你的程序,先跟PC串口助手之类的调试吧

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝