<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)與電腦的全雙工串口通信

          51單片機(jī)與電腦的全雙工串口通信

          作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
          程序功能:4*4鍵盤按鍵數(shù)值和電腦按鍵數(shù)值顯示在單片機(jī)數(shù)碼管上和串口大師上(0~F)全雙工

          本文引用地址:http://www.ex-cimer.com/article/201611/319681.htm

          說明:P2數(shù)碼管段選,只選一個數(shù)碼管,P1接鍵盤,P3.1=TXDP3.0=RXD 經(jīng)過max232轉(zhuǎn)換電平之后接電腦,打開串口大師9600bps 1位校驗(yàn)位 8位數(shù)據(jù)位。借用請留言! 作者QQ:305659935 超

          C文件包括兩個.h文件

          C語言程序如下:

          #include
          #include
          #include<uart9600.h>
          #include<44jianpan.h>

          void main()
          {

          uchar key=0;
          P2 = 0x7f;//數(shù)碼管顯示"-"
          inituart9600();

          TR1 = 1;// 啟動定時器1

          while(1)
          {
          receive_char();

          keydown();

          };

          }

          4*4鍵盤.h文件如下:

          /
          void delayms(uchar ms)
          {
          uchar t;
          while(ms--)
          {
          for(t = 0; t < 120; t++);
          }
          }


          void delay0(uchar x)
          {
          uchar i;
          while(x--)
          {
          for (i = 0; i<13; i++) {;}
          }
          }


          void beep()
          {
          uchar i;
          for (i=0;i<180;i++)
          {
          delay0(5);
          BEEP=!BEEP; //BEEP取反
          }
          BEEP=1; //關(guān)閉蜂鳴器
          delayms(250); //延時
          }


          uchar keyscan()
          {
          uchar scan1,scan2,keycode,j;

          JP=0xf0;
          scan1=JP;
          if((scan1&0xf0)!=0xf0) //判鍵是否按下
          {
          delayms(30); //延時30ms
          scan1=JP;
          if((scan1&0xf0)!=0xf0) //二次判鍵是否按下
          {
          JP=0x0f;
          scan2=JP;
          keycode=scan1|scan2; //組合成鍵編碼

          for(j=0;j<=15;j++)
          {
          if(keycode== key_code[j]) //查表得鍵值
          {
          key=j;

          return(key);

          }
          }
          }
          }
          else JP=0xff;

          return (16);
          }



          void keydown()
          {
          JP=0xf0;
          if((JP&0xf0)!=0xf0)
          {
          keyscan();
          P0=disp_code[key];
          send_char(key);
          beep();
          }
          }

          #endif

          uart(串口)協(xié)議程序如下:


          #ifndef __UART9600_H__
          #define __UART9600_H__
          unsigned char code disp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
          0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
          unsigned char tmp;
          void send_char(unsigned char txd);
          void inituart9600() //初始化計(jì)時器,裝入值,設(shè)定參數(shù) 9600bps 1位校驗(yàn)位
          {
          TMOD = 0x20;// 定時器1工作于8位自動重載模式, 用于產(chǎn)生波特率
          TH1 = 0xFD;// 波特率9600
          TL1 = 0xFD;

          SCON = 0x50;// 設(shè)定串行口工作方式
          PCON =0x00;// 波特率不倍增

          }

          void receive_char() //接受1個字符,8位
          {



          if(RI)// 是否有數(shù)據(jù)到來
          {
          RI = 0;
          tmp = SBUF;// 暫存接收到的數(shù)據(jù),保存數(shù)據(jù)
          P0=disp_code[tmp];
          send_char(tmp);////////////////////////////////發(fā)回?cái)?shù)據(jù)

          }

          }

          void send_char(unsigned char txd) //// 傳送一個字符,發(fā)射1byte,8位

          {
          SBUF = txd;
          while(!TI);// 等特?cái)?shù)據(jù)傳送
          TI = 0;// 清除數(shù)據(jù)傳送標(biāo)志
          }



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();