找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8857|回復(fù): 8
收起左側(cè)

單片機(jī)多機(jī)通信Proteus仿真圖+程序

  [復(fù)制鏈接]
ID:405624 發(fā)表于 2018-12-19 10:13 | 顯示全部樓層 |閱讀模式
單片機(jī)多機(jī)通信仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機(jī)源程序:
/**************************************/

#include "PMPDataT.h"

/* 延時(shí)t毫秒 */
void delay(uint t)
{
        uint i;
        while(t--)
        {
                /* 對(duì)于11.0592M時(shí)鐘,約延時(shí)1ms */
                for (i=0;i<125;i++)
                {}
        }
}
uchar keyscan(void)
{
        uchar scancode,tmpcode;
        P1 = 0xf0;                                                                 // 發(fā)全0行掃描碼
        if ((P1&0xf0)!=0xf0)                                        // 若有鍵按下
        {
                delay(10);                                                        // 延時(shí)去抖動(dòng)
                if ((P1&0xf0)!=0xf0)                                // 延時(shí)后再判斷一次,去除抖動(dòng)影響
                {
                        scancode = 0xfe;
                        while((scancode&0x10)!=0)                // 逐行掃描
                        {
                                P1 = scancode;                                // 輸出行掃描碼
                                if ((P1&0xf0)!=0xf0)                // 本行有鍵按下
                                {
                                        tmpcode = (P1&0xf0)|0x0f;

                                        /* 返回特征字節(jié)碼,為1的位即對(duì)應(yīng)于行和列 */
                                        return((~scancode)+(~tmpcode));
                                }
                                else scancode = (scancode<<1)|0x01;                // 行掃描碼左移一位
                        }
                }
        }
        return(0);                                                                // 無鍵按下,返回值為0         
}

/* 發(fā)送數(shù)據(jù)函數(shù) */
void senddata(uchar buf)
{

        /* 發(fā)送數(shù)據(jù) */
                TI = 0;
                TB8 = 0;                                // 發(fā)送數(shù)據(jù)幀
                SBUF =buf;        
                while(!TI);
                TI = 0;
}

/* 串口初始化函數(shù) */
void init_serial()
{
        TMOD = 0x20;                                // 定時(shí)器T1使用工作方式2
        TH1 = 250;
        TL1 = 250;
        TR1 = 1;                                        // 開始計(jì)時(shí)
        PCON = 0x80;                                // SMOD = 1
        SCON = 0xd0;                                // 工作方式,9位數(shù)據(jù)位,波特率9600kbit/s,允許接收
}
void Getkey()
{
    switch(get_key)
                   {
                      case 0x11:                                                // 1行1列,數(shù)字0
                              key=0xc0;
                                  break;
                        case 0x21:                                                // 1行2列,數(shù)字1
                 key=0xf9;
                                break;                        
                        case 0x41:                                                // 1行3列,數(shù)字2
                                key=0xa4;
                                break;
                     case 0x81:                                                // 1行4列,數(shù)字3
                                key=0xb0;
                                break;
                        case 0x12:                                                // 2行1列,數(shù)字4
                key=0x99;
                                break;
                        case 0x22:                                                // 2行2列,數(shù)字5
                                  key=0x92;
                                break;
                        case 0x42:                                                // 2行3列,數(shù)字6
                                   key=0x82;
                                break;
                        case 0x82:                                                // 2行4列,數(shù)字7
                                   key=0xf8;
                                break;
                        case 0x14:                                                // 3行1列,數(shù)字8
                                   key=0x80;
                                   break;
                        case 0x24:                                                // 3行2列,數(shù)字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();                                // 調(diào)用鍵盤掃描函數(shù)
             Getkey();
                 buf=key;

            /* 通過P0口讀要訪問的從機(jī)地址 */
          P0 = 0xff;
          addr = P0&0x0f;
          init_serial();                                // 串口初始化

          EA = 1;                                                // 關(guān)閉所有中斷
        
                     TI = 0;
                    TB8 = 1;                                // 發(fā)送地址幀        
                    SBUF = addr;
                    while(!TI);
                    TI = 0;
                 senddata(buf);                        // 發(fā)送數(shù)據(jù)
         
        }
        
}

全部資料51hei下載地址:
0039、多機(jī)通信.rar (196.39 KB, 下載次數(shù): 251)




評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:194625 發(fā)表于 2018-12-27 11:18 | 顯示全部樓層
好東西,不錯(cuò),收藏了
回復(fù)

使用道具 舉報(bào)

ID:456364 發(fā)表于 2018-12-27 13:34 來自手機(jī) | 顯示全部樓層
謝謝分享,收藏了
回復(fù)

使用道具 舉報(bào)

ID:494335 發(fā)表于 2019-6-10 10:30 | 顯示全部樓層
超棒 拿過來當(dāng)參考
回復(fù)

使用道具 舉報(bào)

ID:145038 發(fā)表于 2020-4-25 13:13 | 顯示全部樓層
你這個(gè)挺好的,點(diǎn)贊棒棒噠
回復(fù)

使用道具 舉報(bào)

ID:96381 發(fā)表于 2020-6-3 21:09 | 顯示全部樓層
學(xué)習(xí)了,謝謝共享。
回復(fù)

使用道具 舉報(bào)

ID:773349 發(fā)表于 2020-6-8 22:09 | 顯示全部樓層
這沒有復(fù)位部分嗎
回復(fù)

使用道具 舉報(bào)

ID:857362 發(fā)表于 2020-12-9 13:29 | 顯示全部樓層
很有用,也很精簡(jiǎn)
回復(fù)

使用道具 舉報(bào)

ID:1094371 發(fā)表于 2023-9-24 01:38 | 顯示全部樓層
大佬 能不能細(xì)說一下 系統(tǒng)設(shè)計(jì)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表