久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6357|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機多機通信proteus仿真原理圖及源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:137190 發(fā)表于 2016-10-9 22:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機多機通信原理圖:

單片機多機通信仿真工程文件及所有完整程序等資料下載地址:
http://www.zg4o1577.cn/bbs/dpj-56304-1.html

源程序:

  1. #include "PMPDataR.h"

  2. unsigned char zu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8d};
  3. /* 延時t毫秒 */
  4. void delay(uint t)
  5. {
  6.         uint i;
  7.         while(t--)
  8.         {
  9.                 /* 對于11.0592M時鐘,約延時1ms */
  10.                 for (i=0;i<125;i++)
  11.                 {}
  12.         }
  13. }

  14. /* 發(fā)送數(shù)據(jù)函數(shù) */
  15. uchar recvdata()
  16. {

  17.         /* 接收數(shù)據(jù) */
  18.                 while(!RI);
  19.                 if (RB8==1)
  20.                         return 0xee;                // 若接收的為地址幀,則返回0xee
  21.                 buf = SBUF;        
  22.                 RI = 0;        
  23.         return 0;                                        // 返回0
  24. }

  25. /* 串口初始化函數(shù) */
  26. void init_serial()
  27. {
  28.         TMOD = 0x20;                                // 定時器T1使用工作方式2
  29.         TH1 = 250;
  30.         TL1 = 250;
  31.         TR1 = 1;                                        // 開始計時
  32.         PCON = 0x80;                                // SMOD = 1
  33.         SCON = 0xd0;                                // 工作方式,9位數(shù)據(jù)位,波特率9600kbit/s,允許接收
  34. }

  35. /* 主程序 */
  36. void main()
  37. {
  38.         uchar i = 0;
  39.         uchar tmp = 0xff;
  40.         P1= 0xff;
  41.         addr = P1&0x0f;                                // 獲取本機地址
  42.         P23 = 1;                                        // 發(fā)光管不亮
  43.         
  44.         init_serial();                                // 串口初始化

  45.         EA = 1;                                                // 關(guān)閉所有中斷
  46.         
  47.         /* 進入設(shè)備應(yīng)答 */
  48.         while(1)
  49.         {
  50.                 SM2 = 1;                                // 只接收地址幀
  51.                
  52.                 /* 如果接收到的地址幀不是本機地址,則繼續(xù)等待 */
  53.                 while (tmp!=addr)
  54.                 {
  55.                         RI = 0;
  56.                         while(!RI)
  57.                         tmp = SBUF;
  58.                         RI = 0;
  59.                 }        
  60.                 SM2 = 0;                                // 允許接收數(shù)據(jù)

  61.                 /* 數(shù)據(jù)接收 */
  62.        tmp = recvdata();
  63.            //if(buf!=0x00)
  64.             
  65.                 if (tmp==0x00)        
  66.                 {                 
  67.                         P0=buf;
  68.                         /* 綠燈亮,持續(xù)500ms,表示接收數(shù)據(jù)成功 */
  69.                         P23 = 0;                        
  70.                         delay(30);
  71.                         P23 = 1;
  72.                         
  73.                 }            
  74.                 // 如果接收數(shù)據(jù)時發(fā)現(xiàn)地址幀,則重新開始整個接收過程
  75.         }
  76. }
復(fù)制代碼

  1. /*****************************************/
  2. /* Copyright (c) 2005, 通信工程學(xué)院      */
  3. /* All rights reserved.                  */
  4. /* 作    者:戴 佳                                                 */
  5. /*****************************************/

  6. #include "PMPDataT.h"

  7. /* 延時t毫秒 */
  8. void delay(uint t)
  9. {
  10.         uint i;
  11.         while(t--)
  12.         {
  13.                 /* 對于11.0592M時鐘,約延時1ms */
  14.                 for (i=0;i<125;i++)
  15.                 {}
  16.         }
  17. }
  18. uchar keyscan(void)
  19. {
  20.         uchar scancode,tmpcode;
  21.         P1 = 0xf0;                                                                 // 發(fā)全0行掃描碼
  22.         if ((P1&0xf0)!=0xf0)                                        // 若有鍵按下
  23.         {
  24.                 delay(10);                                                        // 延時去抖動
  25.                 if ((P1&0xf0)!=0xf0)                                // 延時后再判斷一次,去除抖動影響
  26.                 {
  27.                         scancode = 0xfe;
  28.                         while((scancode&0x10)!=0)                // 逐行掃描
  29.                         {
  30.                                 P1 = scancode;                                // 輸出行掃描碼
  31.                                 if ((P1&0xf0)!=0xf0)                // 本行有鍵按下
  32.                                 {
  33.                                         tmpcode = (P1&0xf0)|0x0f;

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

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

  46.         /* 發(fā)送數(shù)據(jù) */
  47.                 TI = 0;
  48.                 TB8 = 0;                                // 發(fā)送數(shù)據(jù)幀
  49.                 SBUF =buf;        
  50.                 while(!TI);
  51.                 TI = 0;
  52. }

  53. /* 串口初始化函數(shù) */
  54. void init_serial()
  55. {
  56.         TMOD = 0x20;                                // 定時器T1使用工作方式2
  57.         TH1 = 250;
  58.         TL1 = 250;
  59.         TR1 = 1;                                        // 開始計時
  60.         PCON = 0x80;                                // SMOD = 1
  61.         SCON = 0xd0;                                // 工作方式,9位數(shù)據(jù)位,波特率9600kbit/s,允許接收
  62. }
  63. void Getkey()
  64. {
  65.     switch(get_key)
  66.                    {
  67.                       case 0x11:                                                // 1行1列,數(shù)字0
  68.                               key=0xc0;
  69.                                   break;
  70.                         case 0x21:                                                // 1行2列,數(shù)字1
  71.                  key=0xf9;
  72.                                 break;                        
  73.                         case 0x41:                                                // 1行3列,數(shù)字2
  74.                                 key=0xa4;
  75.                                 break;
  76.                      case 0x81:                                                // 1行4列,數(shù)字3
  77.                                 key=0xb0;
  78.                                 break;
  79.                         case 0x12:                                                // 2行1列,數(shù)字4
  80.                 key=0x99;
  81.                                 break;
  82.                         case 0x22:                                                // 2行2列,數(shù)字5
  83.                                   key=0x92;
  84.                                 break;
  85.                         case 0x42:                                                // 2行3列,數(shù)字6
  86.                                    key=0x82;
  87.                                 break;
  88.                         case 0x82:                                                // 2行4列,數(shù)字7
  89.                                    key=0xf8;
  90.                                 break;
  91.                         case 0x14:                                                // 3行1列,數(shù)字8
  92.                                    key=0x80;
  93.                                    break;
  94.                         case 0x24:                                                // 3行2列,數(shù)字9
  95.                                  key=0x90;
  96.                                 break;
  97.                         case 0x44:                                                // 3行3列,10
  98.                                   key=0x88;
  99.                                 break;
  100.                         case 0x84:                                                // 3行4列,11
  101.                                  key=0x83;
  102.                                 break;
  103.                         case 0x18:                                                // 4行1列,12
  104.                                  key=0xc6;
  105.                                 break;
  106.                         case 0x28:                                                // 4行2列,13
  107.                                  key=0xa1;
  108.                                 break;
  109.                         case 0x48:                                                // 4行3列,14
  110.                                  key=0x86;
  111.                                 break;
  112.                         case 0x88:                                                // 3行4列,15
  113.                                  key=0x8e;
  114.                                 break;
  115.                         default:break;
  116.                 }


  117. }
  118. /* 主程序 */
  119. void main()
  120. {
  121.         uchar i = 0;
  122.         key=0xc0;
  123.         while(1)
  124.     {
  125.                   get_key = keyscan();                                // 調(diào)用鍵盤掃描函數(shù)
  126.              Getkey();
  127.                  buf=key;

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

  132.           EA = 1;                                                // 關(guān)閉所有中斷
  133.         
  134.                      TI = 0;
  135.                     TB8 = 1;                                // 發(fā)送地址幀        
  136.                     SBUF = addr;
  137.                     while(!TI);
  138.                     TI = 0;
  139.                  senddata(buf);                        // 發(fā)送數(shù)據(jù)
  140.          
  141.         }
  142.         
  143. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:306025 發(fā)表于 2018-4-11 17:33 | 只看該作者
這代碼不對呀
回復(fù)

使用道具 舉報

板凳
ID:117850 發(fā)表于 2018-4-29 08:44 | 只看該作者
代碼不對
回復(fù)

使用道具 舉報

地板
ID:322999 發(fā)表于 2018-5-5 18:51 | 只看該作者
大佬們,我是基于單片機的無線點餐畢業(yè)設(shè)計,但是仿真是采用多機通信的方式,所以,求助各位大佬們,
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级黄色短片 | 日韩精品久久 | 成人小视频在线 | 精品免费国产一区二区三区四区 | 中文字幕第一页在线 | 91久久精品一区二区二区 | 成年人免费在线视频 | 国产精品国产精品国产专区不卡 | 超碰8 | 亚洲成人一区二区三区 | 欧美精品在线免费观看 | 日本一区二区三区视频在线 | 亚洲一区二区三区四区av | 日日操日日干 | 久久久久国产一区二区三区四区 | 神马久久香蕉 | 狠狠干av| 中文字幕电影在线观看 | 日韩欧美国产一区二区 | 国产亚洲精品综合一区 | 精品1区| 婷婷久久网 | 午夜一区 | 日韩精品一区二区三区四区 | 老牛嫩草一区二区三区av | 激情婷婷| 亚洲一区免费在线 | 天天综合久久网 | 涩爱av一区二区三区 | 中文字幕一区二区三区在线观看 | 日本高清中文字幕 | 国产精品国产a级 | 午夜精品久久久久久久 | 一区二区三区四区不卡视频 | 中文字幕视频在线看 | 精品精品视频 | 久久久久免费 | 成人免费视屏 | 99re热精品视频国产免费 | www.99精品| 色综合久久久 |