標(biāo)題: 單片機按鍵控制是成功的?怎么樣把按鍵控制,換為串口控制,求指導(dǎo) [打印本頁]

作者: qwettyuio    時間: 2021-5-6 16:41
標(biāo)題: 單片機按鍵控制是成功的?怎么樣把按鍵控制,換為串口控制,求指導(dǎo)
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. code tabup[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
  5. code tabdowm[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
  6. void delay(uint z);
  7. int i;
  8. sbit S2=P3^0;
  9. sbit S3=P3^1;
  10. sbit S4=P3^2;
  11. keyval=0;
  12. void moveup()                //正轉(zhuǎn)
  13. {
  14.         for(i=0;i<8;i++)
  15.         {
  16.                 P1=tabup[i];
  17.                 delay(1);
  18.         }
  19. }
  20. void movedowm()              //反轉(zhuǎn)
  21. {
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 P1=tabdowm[i];
  25.                 delay(1);
  26.         }
  27. }
  28. void delay (uint z)
  29. {
  30.         uint x,y;
  31.         for(x=z;x>0;x--)
  32.         for(y=110;y>0;y--);
  33. }
  34. void stop()
  35. {
  36.         P1=0xff;
  37. }
  38. void main(void)           
  39. {
  40.    TMOD=0x01;               //使用定時器T0的模式1
  41.    TR0=0;                   //給定時器T0賦初值并關(guān)閉T0
  42.    TH0=(65536-500)/256;     //定時器TH0賦初值為500
  43.    TL0=(65536-500)%256;     //定時器TL0賦初值為500
  44.    EA=1;                    //開總中斷
  45.    ET0=1;                   //定時器T0中斷允許
  46.    TR0=1;                   //啟動定時器T0,這里必須要啟動,因為大循環(huán)里                  
  47.    while(1)                 //要給keyval賦值,而賦值語句在中斷服務(wù)函數(shù)里
  48.    {                  
  49.        switch(keyval)           //根據(jù)按鍵值keyval選擇待執(zhí)行的功能
  50.        {
  51.             case 1:moveup();  break;  //按鍵S1按下,正轉(zhuǎn)                                          
  52.             case 2:movedowm(); break;  //按鍵S2按下,反轉(zhuǎn)                                          
  53.             case 3:stop();     break;  //按鍵S3按下,停轉(zhuǎn)                                                                                   
  54.        }                        
  55.    }
  56. }
  57. /*************************************************
  58. 函數(shù)功能:定時器T0的中斷服務(wù)子程序
  59. **************************************************/
  60. void Time0_serve(void) interrupt 1  
  61. {
  62.    TH0=(65536-200)/256;         //定時器T0的高8位賦初值
  63.    TL0=(65536-200)%256;         //定時器T0的低8位賦初值
  64.    if((P3&0xff)!=0xff)          //檢測是否有按鍵按下
  65.        {
  66.             delay(50);            //延時一段時間再去檢測
  67.             if((P3&0xff)!=0xff)   //再次檢測是否確實有按鍵按下
  68.             {
  69.                 if(S2==0)        //按鍵S1被按下
  70.                 keyval=1;        //給keyval賦值
  71.                 if(S3==0)        //按鍵S2被按下
  72.                 keyval=2;        //給keyval賦值
  73.                 if(S4==0)        //按鍵S3被按下
  74.                 keyval=3;        //給keyval賦值                                    
  75.             }
  76.        }
  77. }
復(fù)制代碼

作者: 51hei**1140    時間: 2021-5-6 18:05
你好!
增加串口部分的程序,串口接收的時候賦值;

       keyval = SBUF;

       switch(keyval)           //根據(jù)按鍵值keyval選擇待執(zhí)行的功能
       {
            case 1:moveup();  break;      //按鍵S1按下,正轉(zhuǎn)
            case 2:movedowm(); break;  //按鍵S2按下,反轉(zhuǎn)                                          
            case 3:stop();     break;        //按鍵S3按下,停轉(zhuǎn)
       }                        

作者: birdzhyli    時間: 2021-5-6 21:49
想要串口控制,首先要啟動串口,串口初始化,設(shè)置波特率,然后串口中斷處理函數(shù)中可以用樓上的這一句:   keyval = SBUF;
然后你需要有一個串口連接,串口發(fā)送的上位機或是其它單片機來發(fā)送你想要的控制指令




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1