找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7746|回复: 8
打印 上一主题 下一主题
收起左侧

单片机多机通信Proteus仿真图+程序

  [复制链接]
跳转到指定楼层
楼主
单片机多机通信仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序:
/**************************************/

#include "PMPDataT.h"

/* 延时t毫秒 */
void delay(uint t)
{
        uint i;
        while(t--)
        {
                /* 对于11.0592M时钟,约延时1ms */
                for (i=0;i<125;i++)
                {}
        }
}
uchar keyscan(void)
{
        uchar scancode,tmpcode;
        P1 = 0xf0;                                                                 // 发全0行扫描码
        if ((P1&0xf0)!=0xf0)                                        // 若有键按下
        {
                delay(10);                                                        // 延时去抖动
                if ((P1&0xf0)!=0xf0)                                // 延时后再判断一次,去除抖动影响
                {
                        scancode = 0xfe;
                        while((scancode&0x10)!=0)                // 逐行扫描
                        {
                                P1 = scancode;                                // 输出行扫描码
                                if ((P1&0xf0)!=0xf0)                // 本行有键按下
                                {
                                        tmpcode = (P1&0xf0)|0x0f;

                                        /* 返回特征字节码,为1的位即对应于行和列 */
                                        return((~scancode)+(~tmpcode));
                                }
                                else scancode = (scancode<<1)|0x01;                // 行扫描码左移一位
                        }
                }
        }
        return(0);                                                                // 无键按下,返回值为0         
}

/* 发送数据函数 */
void senddata(uchar buf)
{

        /* 发送数据 */
                TI = 0;
                TB8 = 0;                                // 发送数据帧
                SBUF =buf;        
                while(!TI);
                TI = 0;
}

/* 串口初始化函数 */
void init_serial()
{
        TMOD = 0x20;                                // 定时器T1使用工作方式2
        TH1 = 250;
        TL1 = 250;
        TR1 = 1;                                        // 开始计时
        PCON = 0x80;                                // SMOD = 1
        SCON = 0xd0;                                // 工作方式,9位数据位,波特率9600kbit/s,允许接收
}
void Getkey()
{
    switch(get_key)
                   {
                      case 0x11:                                                // 1行1列,数字0
                              key=0xc0;
                                  break;
                        case 0x21:                                                // 1行2列,数字1
                 key=0xf9;
                                break;                        
                        case 0x41:                                                // 1行3列,数字2
                                key=0xa4;
                                break;
                     case 0x81:                                                // 1行4列,数字3
                                key=0xb0;
                                break;
                        case 0x12:                                                // 2行1列,数字4
                key=0x99;
                                break;
                        case 0x22:                                                // 2行2列,数字5
                                  key=0x92;
                                break;
                        case 0x42:                                                // 2行3列,数字6
                                   key=0x82;
                                break;
                        case 0x82:                                                // 2行4列,数字7
                                   key=0xf8;
                                break;
                        case 0x14:                                                // 3行1列,数字8
                                   key=0x80;
                                   break;
                        case 0x24:                                                // 3行2列,数字9
                                 key=0x90;
                                break;
                        case 0x44:                                                // 3行3列,10
                                  key=0x20;
                                break;
                        case 0x84:                                                // 3行4列,11
                                 key=0x83;
                                break;
                        case 0x18:                                                // 4行1列,12
                                 key=0xc6;
                                break;
                        case 0x28:                                                // 4行2列,13
                                 key=0xa1;
                                break;
                        case 0x48:                                                // 4行3列,14
                                 key=0x04;
                                break;
                        case 0x88:                                                // 3行4列,15
                                 key=0x8e;
                                break;
                        default:break;
                }


}
/* 主程序 */
void main()
{
        uchar i = 0;
        key=0xc0;
        while(1)
    {
                  get_key = keyscan();                                // 调用键盘扫描函数
             Getkey();
                 buf=key;

            /* 通过P0口读要访问的从机地址 */
          P0 = 0xff;
          addr = P0&0x0f;
          init_serial();                                // 串口初始化

          EA = 1;                                                // 关闭所有中断
        
                     TI = 0;
                    TB8 = 1;                                // 发送地址帧        
                    SBUF = addr;
                    while(!TI);
                    TI = 0;
                 senddata(buf);                        // 发送数据
         
        }
        
}

全部资料51hei下载地址:
0039、多机通信.rar (196.39 KB, 下载次数: 250)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:194625 发表于 2018-12-27 11:18 | 只看该作者
好东西,不错,收藏了
回复

使用道具 举报

板凳
ID:456364 发表于 2018-12-27 13:34 来自手机 | 只看该作者
谢谢分享,收藏了
回复

使用道具 举报

地板
ID:494335 发表于 2019-6-10 10:30 | 只看该作者
超棒 拿过来当参考
回复

使用道具 举报

5#
ID:145038 发表于 2020-4-25 13:13 | 只看该作者
你这个挺好的,点赞棒棒哒
回复

使用道具 举报

6#
ID:96381 发表于 2020-6-3 21:09 | 只看该作者
学习了,谢谢共享。
回复

使用道具 举报

7#
ID:773349 发表于 2020-6-8 22:09 | 只看该作者
这没有复位部分吗
回复

使用道具 举报

8#
ID:857362 发表于 2020-12-9 13:29 | 只看该作者
很有用,也很精简
回复

使用道具 举报

9#
ID:1094371 发表于 2023-9-24 01:38 | 只看该作者
大佬 能不能细说一下 系统设计
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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