找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)按鍵控制是成功的?怎么樣把按鍵控制,換為串口控制,求指導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:858009 發(fā)表于 2021-5-6 16:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
  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;               //使用定時(shí)器T0的模式1
  41.    TR0=0;                   //給定時(shí)器T0賦初值并關(guān)閉T0
  42.    TH0=(65536-500)/256;     //定時(shí)器TH0賦初值為500
  43.    TL0=(65536-500)%256;     //定時(shí)器TL0賦初值為500
  44.    EA=1;                    //開總中斷
  45.    ET0=1;                   //定時(shí)器T0中斷允許
  46.    TR0=1;                   //啟動(dòng)定時(shí)器T0,這里必須要啟動(dòng),因?yàn)榇笱h(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ù)功能:定時(shí)器T0的中斷服務(wù)子程序
  59. **************************************************/
  60. void Time0_serve(void) interrupt 1  
  61. {
  62.    TH0=(65536-200)/256;         //定時(shí)器T0的高8位賦初值
  63.    TL0=(65536-200)%256;         //定時(shí)器T0的低8位賦初值
  64.    if((P3&0xff)!=0xff)          //檢測是否有按鍵按下
  65.        {
  66.             delay(50);            //延時(shí)一段時(shí)間再去檢測
  67.             if((P3&0xff)!=0xff)   //再次檢測是否確實(shí)有按鍵按下
  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ù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

板凳
ID:889094 發(fā)表于 2021-5-6 21:49 | 只看該作者
想要串口控制,首先要啟動(dòng)串口,串口初始化,設(shè)置波特率,然后串口中斷處理函數(shù)中可以用樓上的這一句:   keyval = SBUF;
然后你需要有一個(gè)串口連接,串口發(fā)送的上位機(jī)或是其它單片機(jī)來發(fā)送你想要的控制指令
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:648281 發(fā)表于 2021-5-6 18:05 | 只看該作者
你好!
增加串口部分的程序,串口接收的時(shí)候賦值;

       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)
       }                        
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表