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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14030|回復: 17
打印 上一主題 下一主題
收起左側

單片機雙機通信程序與原理圖Proteus仿真-單片機與單片機通信

  [復制鏈接]
跳轉到指定樓層
樓主
8x8矩陣按鍵顯示,單片機1通過串口通信把矩陣按鍵的值發單片機2,在單片機2上的數碼管上進行顯示。

下面是仿真原理圖在附件中可下載Proteus仿真工程文件,里面可以看清晰的原理圖

單片機雙機通信第1個單片機的程序:
  1. /*--------------------------------------------------------------------------------------------------------------------------------
  2.                 說明:            發送端單片機1程序:
  3.                                                   8*8矩陣鍵盤讀取數碼管顯示,再由串口與單片機2進行通信;
  4.                                                       把單片機1讀取的按鍵值發送給單片機2進行顯示。

  5.                 MCU:            AT89S52
  6.                 晶振:            11.0592MHZ

  7.                             2015-12-30
  8. ---------------------------------------------------------------------------------------------------------------------------------*/
  9. #include<reg52.h>
  10. #include<intrins.h>
  11. #define uint unsigned int
  12. #define uchar unsigned char

  13. sbit D1=P3^6;   //數碼管十位com1
  14. sbit D2=P3^7;   //數碼管個位com2
  15. uchar shi,ge,num;
  16. uchar temp;
  17. uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

  18. void delay(uint z);//延時函數
  19. void display();                //顯示函數
  20. void keyscan();    //8*8_64矩陣鍵盤
  21. void InitUART  (void);  //串口初始化
  22. /*----------------------------------------------------------------------------------
  23.                                         main()_程序入口
  24. ----------------------------------------------------------------------------------*/
  25. void main()
  26. {
  27.         InitUART();//串口初始化
  28.          SBUF=0;
  29.         while(1)
  30.         {
  31.                 display();
  32.                 keyscan();
  33.         }
  34. }
  35. /*------------------------------------------------
  36.                     串口初始化
  37. ------------------------------------------------*/
  38. void InitUART  (void)
  39. {

  40.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  41.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  42.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
  43.     TR1   = 1;                  // TR1:  timer 1 打開                        
  44.     EA    = 1;                  //打開總中斷
  45.     ES    = 1;                  //打開串口中斷
  46. }
  47. /*------------------------------------------------
  48.                      串口中斷程序
  49. ------------------------------------------------*/
  50. void UART_SER (void) interrupt 4 //串行中斷服務程序
  51. {
  52. //   unsigned char Temp;          //定義臨時變量
  53.    
  54.    if(RI)                        //判斷是接收中斷產生
  55.      {
  56.           RI=0;                      //標志位清零
  57.           num=SBUF;                 //讀入緩沖區的值
  58.    //   SBUF=num;                 //把接收到的值再發回單片機2
  59.          }
  60.    if(TI)                        //如果是發送標志位,清零
  61.      TI=0;
  62.    
  63. }

  64. /*----------------------------------------------------------------------------------
  65.                                 延時        
  66. ----------------------------------------------------------------------------------*/
  67. void delay(uint z)
  68. {
  69.         uint i,j;
  70.         for(i=z;i>0;i--)
  71.         for(j=112;j>0;j--);
  72. }
  73. /*----------------------------------------------------------------------------------
  74.                                 顯示        
  75. ----------------------------------------------------------------------------------*/
  76. void display()
  77. {         //num=23;
  78.         shi=num/10;
  79.         ge=num%10;

  80.         P2=table[shi];//顯示十位
  81.         D1=0;
  82.         D2=1;
  83.         delay(5);
  84.         D1=1;

  85.         P2=table[ge];//顯示個位
  86.         D2=0;
  87.         delay(5);
  88.         D2=1;
  89. }
  90. /*----------------------------------------------------------------------------------
  91.                                 矩陣鍵盤        
  92. ----------------------------------------------------------------------------------*/
  93. void keyscan()
  94. {
  95.         uchar temp,n,k;
  96.         n=0x7f;
  97.         for(k=0;k<8;k++)
  98.         {
  99.         P0=n;
  100.         temp=P1&0xff;
  101.         if(temp!=0xff)
  102.         {
  103.                 delay(3);
  104.                 temp=P1&0xff;
  105.                 if(temp!=0xff)
  106.                 {
  107.                         temp=P1;
  108.                         if(n==0x7f)
  109.                         {
  110.                         switch(temp)
  111.                         {
  112.                                 case 0xfe:num=1;SBUF=1;break;
  113.                                 case 0xfd:num=9;SBUF=9;break;
  114.                                 case 0xfb:num=17;SBUF=17;break;
  115.                                 case 0xf7:num=25;SBUF=25;break;
  116.                                 case 0xef:num=33;SBUF=33;break;
  117.                                 case 0xdf:num=41;SBUF=41;break;
  118.                                 case 0xbf:num=49;SBUF=49;break;
  119.                                 case 0x7f:num=57;SBUF=57;break;
  120.                         }        
  121.                         }
  122.                                 
  123.                         if(n==0xbf)
  124.                         {
  125.                         switch(temp)
  126.                         {
  127.                                 case 0xfe:num=2; SBUF=2;break;
  128.                                 case 0xfd:num=10;SBUF=10;break;
  129.                                 case 0xfb:num=18;SBUF=18;break;
  130.                                 case 0xf7:num=26;SBUF=26;break;
  131.                                 case 0xef:num=34;SBUF=34;break;
  132.                                 case 0xdf:num=42;SBUF=42;break;
  133.                                 case 0xbf:num=50;SBUF=50;break;
  134.                                 case 0x7f:num=58;SBUF=58;break;
  135.                         }
  136.                         }
  137.                                 
  138.                         if(n==0xdf)
  139.                         {
  140.                         switch(temp)
  141.                         {
  142.                                 case 0xfe:num=3; SBUF=3;break;
  143.                                 case 0xfd:num=11;SBUF=11;break;
  144.                                 case 0xfb:num=19;SBUF=19;break;
  145.                                 case 0xf7:num=27;SBUF=27;break;
  146.                                 case 0xef:num=35;SBUF=35;break;
  147.                                 case 0xdf:num=43;SBUF=43;break;
  148.                                 case 0xbf:num=51;SBUF=51;break;
  149.                                 case 0x7f:num=59;SBUF=59;break;
  150.                         }
  151.                         }
  152.                                 
  153.                         if(n==0xef)
  154.                         {
  155.                         switch(temp)
  156.                         {
  157.                                 case 0xfe:num=4; SBUF=4;break;
  158.                                 case 0xfd:num=12;SBUF=12;break;
  159.                                 case 0xfb:num=20;SBUF=20;break;
  160.                                 case 0xf7:num=28;SBUF=28;break;
  161.                                 case 0xef:num=36;SBUF=36;break;
  162.                                 case 0xdf:num=44;SBUF=44;break;
  163.                                 case 0xbf:num=52;SBUF=52;break;
  164.                                 case 0x7f:num=60;SBUF=60;break;
  165.                         }
  166.                         }
  167.                                 
  168.                         if(n==0xf7)
  169.                         {
  170.                         switch(temp)
  171.                         {
  172.                                 case 0xfe:num=5;SBUF=5;break;
  173.                                 case 0xfd:num=13;SBUF=13;break;
  174.                                 case 0xfb:num=21;SBUF=21;break;
  175.                                 case 0xf7:num=29;SBUF=29;break;
  176.                                 case 0xef:num=37;SBUF=37;break;
  177.                                 case 0xdf:num=45;SBUF=45;break;
  178.                                 case 0xbf:num=53;SBUF=53;break;
  179.                                 case 0x7f:num=61;SBUF=61;break;
  180.                         }
  181.                         }                     
  182.                                 
  183.                         if(n==0xfb)
  184.                         {
  185.                         switch(temp)
  186.                         {
  187.                                 case 0xfe:num=6;SBUF=6;break;
  188.                                 case 0xfd:num=14;SBUF=14;break;
  189.                                 case 0xfb:num=22;SBUF=22;break;
  190.                                 case 0xf7:num=30;SBUF=30;break;
  191.                                 case 0xef:num=38;SBUF=38;break;
  192.                                 case 0xdf:num=46;SBUF=46;break;
  193.                                 case 0xbf:num=54;SBUF=54;break;
  194.                                 case 0x7f:num=62;SBUF=62;break;
  195.                         }                           
  196.                         }

  197.                         if(n==0xfd)
  198.                         {
  199.                                 switch(temp)
  200.                         {
  201.                                 case 0xfe:num=7;SBUF=7;break;
  202.                                 case 0xfd:num=15;SBUF=15;break;
  203.                                 case 0xfb:num=23;SBUF=23;break;
  204.                                 case 0xf7:num=31;SBUF=31;break;
  205.                                 case 0xef:num=39;SBUF=39;break;
  206.                                 case 0xdf:num=47;SBUF=47;break;
  207.                                 case 0xbf:num=55;SBUF=55;break;
  208.                                 case 0x7f:num=63;SBUF=64;break;
  209.                                 }
  210.                                 }

  211.                         if(n==0xfe)
  212.                         {
  213.                                 switch(temp)
  214.                         {
  215.                                 case 0xfe:num=8; SBUF=8;break;
  216.                                 case 0xfd:num=16;SBUF=16;break;
  217.                                 case 0xfb:num=24;SBUF=24;break;
  218.                                 case 0xf7:num=32;SBUF=32;break;
  219.                                 case 0xef:num=40;SBUF=40;break;
  220.                                 case 0xdf:num=48;SBUF=48;break;
  221.                                 case 0xbf:num=56;SBUF=56;break;
  222.                                 case 0x7f:num=64;SBUF=64;break;
  223.                                 }
  224.                         }
  225.                         while(temp!=0xff)
  226.                         {
  227.                                 temp=P1&0xff;
  228.                         }
  229.                         }
  230.                 }
  231.                 n=_cror_(n,1);
  232.         }
  233. }
復制代碼

雙機通信單片機2程序:
  1. /*--------------------------------------------------------------------------------------------------------------------------------
  2.                 說明:            接收端單片機2程序:
  3.                                                   讀取數碼管顯示,由串口與單片機1進行通信;
  4.                                                       接收單片機1讀取的8*8矩陣鍵盤按鍵值并在數碼管上進行顯示。

  5.                 MCU:            AT89S52
  6.                 晶振:            11.0592MHZ

  7.                             2015-12-30
  8. ---------------------------------------------------------------------------------------------------------------------------------*/
  9. #include<reg52.h>                  
  10. #include<intrins.h>
  11. #define uint unsigned int
  12. #define uchar unsigned char

  13. uchar shi,ge,num;
  14. uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

  15. void delay(uint z);//延時函數
  16. void display();                //顯示函數
  17. void keyscan();    //8*8_64矩陣鍵盤
  18. void InitUART  (void);  //串口初始化
  19. /*----------------------------------------------------------------------------------
  20.                                         main()_程序入口
  21. ----------------------------------------------------------------------------------*/
  22. void main()
  23. {
  24.         InitUART();
  25.          SBUF=0;
  26.         while(1)
  27.         {
  28.                 display();
  29.         }
  30. }
  31. /*------------------------------------------------
  32.                     串口初始化
  33. ------------------------------------------------*/
  34. void InitUART  (void)
  35. {

  36.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  37.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  38.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
  39.     TR1   = 1;                  // TR1:  timer 1 打開                        
  40.     EA    = 1;                  //打開總中斷
  41.     ES    = 1;                  //打開串口中斷
  42. }
  43. /*------------------------------------------------
  44.                      串口中斷程序
  45. ------------------------------------------------*/
  46. void UART_SER (void) interrupt 4 //串行中斷服務程序
  47. {
  48.    
  49.    if(RI)                        //判斷是接收中斷產生
  50.      {
  51.           RI=0;                      //標志位清零
  52.           num=SBUF;                 //讀入緩沖區的值
  53.     //  SBUF=0;                 //把接收到的值再發回單片機1
  54.          }
  55.    if(TI)                        //如果是發送標志位,清零
  56.      TI=0;
  57.    
  58. }

  59. /*----------------------------------------------------------------------------------
  60.                                 延時        
  61. ----------------------------------------------------------------------------------*/
  62. void delay(uint z)
  63. {
  64.         uint i,j;
  65.         for(i=z;i>0;i--)
  66.         for(j=112;j>0;j--);
  67. }
  68. /*----------------------------------------------------------------------------------
  69.                                 顯示        
  70. ----------------------------------------------------------------------------------*/
  71. void display()
  72. {//         num=23;
  73.         shi=num/10;
  74.         ge=num%10;

  75.         P2=table[shi];//顯示十位
  76.         delay(5);

  77.         P1=table[ge];//顯示個位
  78.         delay(5);
  79. }
復制代碼


8x8矩陣鍵盤-兩機串口通信.zip

80.25 KB, 下載次數: 191, 下載積分: 黑幣 -5

單片機與單片機通信

評分

參與人數 2黑幣 +85 收起 理由
暗光 + 35 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:99905 發表于 2016-1-1 12:40 | 只看該作者

回帖獎勵 +5

這單片機通訊硬件用交叉連接,以一控多
回復

使用道具 舉報

板凳
ID:99538 發表于 2016-1-6 20:49 | 只看該作者
請問你用這么多鍵有什么作用,
回復

使用道具 舉報

地板
ID:14181 發表于 2016-3-28 15:46 | 只看該作者
黑金幣不足,只能頂一下了。
回復

使用道具 舉報

5#
ID:169626 發表于 2017-5-11 22:24 | 只看該作者
黑幣不夠用 ...頂一頂
回復

使用道具 舉報

6#
ID:208802 發表于 2017-6-7 15:05 來自手機 | 只看該作者
3到15字符 發表于 2017-5-11 22:24
黑幣不夠用 ...頂一頂

頂一下
回復

使用道具 舉報

7#
ID:212355 發表于 2017-6-19 21:18 | 只看該作者
在嗎  為什么從機數碼管的十位跟各位一直是相同的
回復

使用道具 舉報

8#
ID:186455 發表于 2017-9-11 15:13 | 只看該作者
頂頂吧
回復

使用道具 舉報

9#
ID:194625 發表于 2018-12-27 11:24 | 只看該作者
這個不錯,值得購買
回復

使用道具 舉報

10#
ID:455344 發表于 2018-12-28 09:34 | 只看該作者
有匯編的程序嗎?老哥
回復

使用道具 舉報

11#
ID:426975 發表于 2019-4-26 11:03 | 只看該作者
頂一下
回復

使用道具 舉報

12#
ID:524294 發表于 2019-4-29 11:04 | 只看該作者
感謝分享
回復

使用道具 舉報

13#
ID:456878 發表于 2019-5-3 19:54 | 只看該作者
正需要這個,謝謝
回復

使用道具 舉報

14#
ID:564426 發表于 2019-6-17 11:57 | 只看該作者
感謝&#128591;&#128591;感謝樓主分享
回復

使用道具 舉報

15#
ID:389070 發表于 2019-7-17 22:49 | 只看該作者
為什么我模擬出來的是一機顯示46,而二機顯示的是66,一機29,二機99.求解
回復

使用道具 舉報

16#
ID:283606 發表于 2019-7-24 11:50 | 只看該作者
牛皮,請求引用
回復

使用道具 舉報

17#
ID:648072 發表于 2019-12-3 11:01 | 只看該作者
做得挺好,點贊
回復

使用道具 舉報

18#
ID:729340 發表于 2020-6-10 17:59 | 只看該作者
感謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费看 | 日本超碰| 国产精品欧美一区二区 | 日本黄色影片在线观看 | 亚洲精品黑人 | 国产欧美精品一区二区色综合 | 亚洲色图网址 | 精品国产伦一区二区三区观看体验 | 国产精品免费一区二区三区四区 | 国产成人亚洲精品 | 国产视频中文字幕 | 中文字字幕一区二区三区四区五区 | a在线免费观看视频 | 亚洲欧美日韩高清 | 久草视频2 | 在线免费观看黄a | 久久丁香 | 国产一区二区影院 | 天天操天天摸天天干 | 欧美亚洲国语精品一区二区 | 国产精品不卡 | 日本aa毛片a级毛片免费观看 | 国产成人精品一区二区三 | 精品欧美黑人一区二区三区 | 亚洲一区二区视频在线播放 | 老牛嫩草一区二区三区av | 国产精品福利在线 | 亚洲精品电影在线观看 | 紧缚调教一区二区三区视频 | 色欧美片视频在线观看 | 成人在线影视 | 成人在线免费 | 国产aaaaav久久久一区二区 | 黄色国产在线播放 | 欧美日韩电影一区二区 | 久久久久久久久99精品 | 久久久久久亚洲精品 | 欧美一区二区三区 | 日本成人毛片 | 亚洲iv一区二区三区 | 在线欧美小视频 |