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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7182|回復(fù): 5
收起左側(cè)

51單片機按鍵與串口控制步進電機正反轉(zhuǎn)調(diào)速源碼

[復(fù)制鏈接]
ID:407324 發(fā)表于 2018-10-10 12:50 | 顯示全部樓層 |閱讀模式
關(guān)于51單片機按鍵與串口控制步進電機正反轉(zhuǎn)調(diào)速的編程語言

單片機源程序如下:
  1. #include<reg52.h>
  2. #define uint  unsigned int
  3. #define uchar unsigned char
  4. //------8拍-----
  5. uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};                        //正轉(zhuǎn)
  6. uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};                        //反轉(zhuǎn)

  7. sbit K1=P3^0;        //停止
  8. sbit K2=P3^1;        //正轉(zhuǎn)
  9. sbit K3=P3^2;        //反轉(zhuǎn)
  10. sbit K4=P3^3;        //加速
  11. sbit K5=P3^4;        //減速

  12. uchar state=0;        //狀態(tài)變量

  13. uint Time=60;         //延時時間,用于調(diào)速

  14. unsigned char receiveData='0';

  15. void UsartConfiguration();           //初始化串口

  16. void delay(uint ms)                           //延時,用于調(diào)速
  17. {
  18.         uint t;
  19.         while(ms--)
  20.                 for(t=0;t<120;t++);
  21. }

  22. void motor_zz()                  //正傳函數(shù)
  23. {
  24.         uint j;
  25.         for(j=0;j<8;j++)
  26.         {
  27.                 if(P3==0xfb)
  28.                         break;
  29.                 P1=zz[j];
  30.                 delay(Time);
  31.         }
  32. }

  33. void motor_fz()                  //反轉(zhuǎn)函數(shù)
  34. {
  35.         uint j;
  36.         for(j=0;j<8;j++)
  37.         {
  38.                 if(P3==0xfb)
  39.                         break;
  40.                 P1=fz[j];
  41.                 delay(Time);
  42.         }
  43. }

  44. void main()
  45. {
  46.         UsartConfiguration();
  47.         while(1)
  48.         {
  49.                 while(state==0)                        //狀態(tài)0,停止
  50.                 {
  51.                         if((K2==0)||(receiveData=='z'))           //按下K2或串口接收到'z',電機正轉(zhuǎn)
  52.                         {
  53.                                 state=1;
  54.                                 receiveData='0';
  55.                                 break;
  56.                         }
  57.                         if((K3==0)||(receiveData=='f'))           //按下K3或串口接收到'f',電機反轉(zhuǎn)
  58.                         {
  59.                                 state=2;
  60.                                 receiveData='0';
  61.                                 break;
  62.                         }
  63.                         P0=0xfb;
  64.                         P1=0x03;
  65.                 }

  66.                

  67.                 while(state==1)                        //狀態(tài)1,正轉(zhuǎn)
  68.                 {
  69.                         if((K1==0)||(receiveData=='t'))           //按下K1或串口接收到'f',電機反轉(zhuǎn)
  70.                         {
  71.                                 state=0;
  72.                                 receiveData='0';
  73.                                 break;
  74.                         }
  75.                         if((K2==0)||(receiveData=='z'))                //按下K2或串口接收到'z',電機正轉(zhuǎn)
  76.                         {
  77.                                 state=1;
  78.                                 receiveData='0';
  79.                                 break;
  80.                         }
  81.                         if((K3==0)||(receiveData=='f'))                //按下K3或串口接收到'f',電機反轉(zhuǎn)
  82.                         {
  83.                                 state=2;
  84.                                 receiveData='0';
  85.                                 break;
  86.                         }
  87.                         if((K4==0)||(receiveData=='+'))                //按下K4或串口接收到'+',電機加速
  88.                         {
  89.                                 Time=Time-5;
  90.                                 if(Time<20)
  91.                                 Time=20;
  92.                                 while(K4==0);
  93.                         }
  94.                         if((K5==0)||(receiveData=='-'))                //按下K5或串口接收到'-',電機減速
  95.                         {
  96.                                 Time=Time+5;
  97.                                 if(Time>100)
  98.                                 Time=100;
  99.                                 while(K5==0);
  100.                         }
  101.                         motor_zz();                 //狀態(tài)1,正轉(zhuǎn)
  102.                 }

  103.                 while(state==2)                   //狀態(tài)2,反轉(zhuǎn)
  104.                 {
  105.                         if((K1==0)||(receiveData=='t'))                 //按下K1或串口接收到'f',電機反轉(zhuǎn)
  106.                         {
  107.                                 state=0;
  108.                                 receiveData='0';
  109.                                 break;
  110.                         }
  111.                         if((K2==0)||(receiveData=='z'))                 //按下K2或串口接收到'z',電機正轉(zhuǎn)
  112.                         {
  113.                                 state=1;
  114.                                 receiveData='0';
  115.                                 break;
  116.                         }
  117.                         if((K3==0)||(receiveData=='f'))                  //按下K3或串口接收到'f',電機反轉(zhuǎn)
  118.                         {
  119.                                 state=2;
  120.                                 receiveData='0';
  121.                                 break;
  122.                         }
  123.                         if((K4==0)||(receiveData=='+'))                   //按下K4或串口接收到'+',電機加速
  124.                         {
  125.                                 Time=Time-5;
  126.                                 if(Time<20)
  127.                                 Time=20;
  128.                                 while(K4==0);
  129.                         }
  130.                         if((K5==0)||(receiveData=='-'))                   //按下K5或串口接收到'-',電機減速
  131.                         {
  132.                                 Time=Time+5;
  133.                                 if(Time>100)
  134.                                 Time=100;
  135.                                 while(K5==0);
  136.                         }
  137.                         motor_fz();                //狀態(tài)2,反轉(zhuǎn)
  138.                 }

  139.         }
  140. }

  141. /************************************************************************
  142. * 函數(shù)名         :UsartConfiguration()
  143. * 函數(shù)功能                   :設(shè)置串口
  144. * 輸入           : 無
  145. * 輸出                  : 無
  146. *************************************************************************/

  147. void UsartConfiguration()
  148. {
  149.         SCON=0X50;                        //設(shè)置為工作方式1
  150.         //TMOD=0X20;                        //設(shè)置計數(shù)器工作方式2
  151.         TMOD=0X21;                        //設(shè)置計數(shù)器工作方式2         和定時器0
  152.         PCON=0X80;                        //波特率加倍
  153.         //TH1=0XF4;                                //計數(shù)器初始值設(shè)置,注意波特率是4800的
  154.         //TL1=0XF4;
  155.         TH1=0XFA;                                //計數(shù)器初始值設(shè)置,注意波特率是9600的
  156.         TL1=0XFA;
  157.         ES=1;                                                //打開接收中斷
  158.         EA=1;                                                //打開總中斷
  159.         TR1=1;                                        //打開計數(shù)器
  160. }

  161. void Usart() interrupt 4
  162. {
  163.         receiveData=SBUF;//出去接收到的數(shù)據(jù)
  164.         RI = 0;//清除接收中斷標(biāo)志位
  165. }
復(fù)制代碼

所有資料51hei提供下載:
51單片機按鍵與串口控制步進電機正反轉(zhuǎn)調(diào)速.zip (1.5 KB, 下載次數(shù): 96)
回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2018-10-10 15:02 | 顯示全部樓層
補全原理圖或者詳細(xì)說明一下電路連接即可獲得100+黑幣
回復(fù)

使用道具 舉報

ID:407324 發(fā)表于 2018-10-10 22:33 | 顯示全部樓層
我現(xiàn)在正在用STM32F030P4F6來嘗試,后續(xù)補上
回復(fù)

使用道具 舉報

ID:404794 發(fā)表于 2018-10-12 07:38 | 顯示全部樓層
正轉(zhuǎn)和反轉(zhuǎn)函數(shù)可以寫成一個函數(shù),直接傳入一個參數(shù)就行。
回復(fù)

使用道具 舉報

ID:297824 發(fā)表于 2018-10-12 11:12 | 顯示全部樓層
思路不錯, 但是按鍵沒去抖動,串口控制命令只是一個字符,太簡單,容易誤動作,不太實用。
回復(fù)

使用道具 舉報

ID:515720 發(fā)表于 2020-1-9 20:17 | 顯示全部樓層
dadiao 發(fā)表于 2018-10-12 11:12
思路不錯, 但是按鍵沒去抖動,串口控制命令只是一個字符,太簡單,容易誤動作,不太實用。

在中斷力的SBUF有啥作用啊,一直沒想明白?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕精品一区二区三区在线 | 国产乱码精品一品二品 | 一区二区三区久久 | a级性视频 | 成人3d动漫一区二区三区91 | 综合一区二区三区 | 精品视频一区二区 | 天天综合干| 天堂网avav | 超碰在线久 | 国产探花在线精品一区二区 | 夜夜夜久久久 | 男人阁久久 | 美女福利视频一区 | 欧美在线一区二区三区 | 日韩成人免费视频 | 一区二区视频 | 国产精品视频免费 | 午夜精品一区二区三区在线观看 | 成人精品免费视频 | 玖玖精品视频 | 国产精品美女久久久久久久网站 | 欧美国产一区二区三区 | 国产精品久久久久久久久久免费 | 欧美一级片在线看 | 免费精品久久久久久中文字幕 | 国产精品久久久久久久久久尿 | 欧美激情精品久久久久久变态 | 在线一区二区三区 | 天天弄 | 久久国产精品99久久久大便 | 亚洲成人自拍 | 2018国产大陆天天弄 | 中文字幕在线一区二区三区 | 成人18亚洲xxoo | 国产精品日产欧美久久久久 | 成人av免费 | 精品成人一区二区 | 日本精品一区二区三区在线观看视频 | 亚洲精品91| 成人久久久 |