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

標題: 單片機雙機通信程序與原理圖Proteus仿真-單片機與單片機通信 [打印本頁]

作者: GYY0529    時間: 2015-12-30 00:40
標題: 單片機雙機通信程序與原理圖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

單片機與單片機通信


作者: 永遠的王同學    時間: 2016-1-1 12:40
這單片機通訊硬件用交叉連接,以一控多
作者: smilefff    時間: 2016-1-6 20:49
請問你用這么多鍵有什么作用,
作者: liangqiubin    時間: 2016-3-28 15:46
黑金幣不足,只能頂一下了。
作者: 3到15字符    時間: 2017-5-11 22:24
黑幣不夠用 ...頂一頂
作者: ha147258369    時間: 2017-6-7 15:05
3到15字符 發表于 2017-5-11 22:24
黑幣不夠用 ...頂一頂

頂一下
作者: JNAN    時間: 2017-6-19 21:18
在嗎  為什么從機數碼管的十位跟各位一直是相同的
作者: 1184055621    時間: 2017-9-11 15:13
頂頂吧
作者: Jinxmas    時間: 2018-12-27 11:24
這個不錯,值得購買
作者: 微笑中的熱度    時間: 2018-12-28 09:34
有匯編的程序嗎?老哥
作者: vvvvvvtae    時間: 2019-4-26 11:03
頂一下
作者: fafaffa    時間: 2019-4-29 11:04
感謝分享
作者: liangjing    時間: 2019-5-3 19:54
正需要這個,謝謝
作者: 498283636    時間: 2019-6-17 11:57
感謝&#128591;&#128591;感謝樓主分享
作者: 精致男孩    時間: 2019-7-17 22:49
為什么我模擬出來的是一機顯示46,而二機顯示的是66,一機29,二機99.求解
作者: sumjess    時間: 2019-7-24 11:50
牛皮,請求引用
作者: Lprong    時間: 2019-12-3 11:01
做得挺好,點贊
作者: hxf1231    時間: 2020-6-10 17:59
感謝分享




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲天堂色 | 国产免费一区二区 | 亚洲欧美久久 | 91亚洲国产成人久久精品网站 | 国产91丝袜在线播放 | 成人免费观看男女羞羞视频 | 国产婷婷精品av在线 | 精品国产18久久久久久二百 | 国产男女精品 | 天天激情综合 | 成年人黄色小视频 | 欧洲亚洲视频 | 国产综合在线视频 | 欧美乱码精品一区二区三区 | 精品日韩一区二区三区av动图 | 午夜三级视频 | av一级毛片| 日韩精品一区二区三区免费观看 | 成人精品国产 | 每日在线更新av | 日本精品999 | 成人福利电影 | 天天成人综合网 | 极品粉嫩国产48尤物在线播放 | www.国产精 | 中文字幕一区二区三区四区不卡 | 一级免费毛片 | 天天操人人干 | 成人av网站在线观看 | 天天宗合网 | 中文字幕视频在线免费 | 欧美日韩网站 | 欧美日韩三级在线观看 | 91久久国产综合久久 | 日本精品一区二区在线观看 | 特黄毛片| 中文字幕av在线一二三区 | 欧美视频二区 | 免费在线观看成人 | 欧美久久电影 | 国产男女视频网站 |