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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)串口控制步進(jìn)電機(jī)的源程序

[復(fù)制鏈接]
ID:366074 發(fā)表于 2018-7-6 09:30 | 顯示全部樓層 |閱讀模式
  1. #include <reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define LED P1
  6. //因為步進(jìn)電機(jī)是減速步進(jìn)電機(jī),減速比的1/64 ,
  7. //所以N=64時,步進(jìn)電機(jī)主軸轉(zhuǎn)一圈
  8. //使用前請短接J2跳線帽,串口助手設(shè)置為比特率9600,無校驗位,停止位1,發(fā)送數(shù)據(jù)為16進(jìn)制形式
  9. uchar code CCW[8]        ={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};                   //逆時鐘旋轉(zhuǎn)相序表
  10. uchar code CW[8]        ={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};                   //正時鐘旋轉(zhuǎn)相序表
  11. uchar code table[]        ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};        //數(shù)碼管顯示數(shù)字表
  12. sbit P2_0 = P2^0;
  13. sbit P2_1 = P2^1;
  14. sbit P2_2 = P2^2;
  15. sbit P2_3 = P2^3;
  16. sbit FMQ=P3^6;  //蜂鳴器

  17. uchar          flag_rec;
  18. uint        data_rec;
  19. /*********************************************************************
  20.         中斷服務(wù)特殊功能寄存器配置
  21. *********************************************************************/
  22. void init_interrupt()
  23. {
  24.         TMOD=0x20;                //用定時器1設(shè)置串口波特率         9600
  25.         TH1=0xfd;                //T1定時器裝初值
  26.         TL1=0xfd;                //T1定時器裝初值
  27.         TR1=1;                    //啟動T1定時器
  28.         REN=1;          //串口初始化
  29.         SM0=0;                        //設(shè)定串口工作方式1
  30.         SM1=1;                        //設(shè)定串口工作方式1
  31.         EA=1;           //開啟總中斷
  32.         ES=1;                        //開啟串口中斷

  33. }

  34. /*************************************************************
  35.                                 串口中斷函數(shù)
  36. **************************************************************/
  37. void receive() interrupt 4
  38. {
  39.         RI=0;                                        //RI清零;因為收到數(shù)據(jù)或者或者發(fā)送了數(shù)據(jù)會由硬件置1
  40.         data_rec=SBUF;                        //接收數(shù)據(jù)SBUF,將SBUF中的數(shù)據(jù)讀走給data_rec,即將計算機(jī)的數(shù)據(jù)接收。
  41.         //a=SBUF;
  42.         ES = 0;                                        //關(guān)閉串口中斷
  43.         flag_rec=1;                                //中斷標(biāo)志位置1
  44. }
  45. /*****************************************************************
  46.                                 設(shè)置延時
  47. ******************************************************************/
  48. void delaynms(uint aa)
  49. {
  50.   uchar bb;
  51.   while(aa--)
  52.   {   
  53.           for(bb=0;bb<115;bb++)     //1ms基準(zhǔn)延時程序
  54.         {    ;   }
  55.   }

  56. }
  57. void delay500us()
  58. {
  59.   int j;
  60.   for(j=0;j<57;j++)
  61.   {
  62.    ;
  63.   }
  64. }
  65. /*******************************************
  66.                                 蜂鳴器
  67. ******************************************/
  68. void beep()
  69. {
  70.           uchar t;
  71.           for(t=0;t<100;t++)
  72.           {
  73.                    delay500us();
  74.                  FMQ=!FMQ;   //產(chǎn)生脈沖
  75.           }
  76.           FMQ=1;    //關(guān)閉蜂鳴器
  77. }
  78. /***************************************
  79.                                 正反轉(zhuǎn)設(shè)計
  80. ****************************************/
  81. void motor_ccw_deta(uchar deta,uchar speed)        //電機(jī)逆時針轉(zhuǎn)deta度 deta=11時30度,deta=66d時180度
  82. {
  83.         uchar i;
  84.         while(deta--)
  85.         {
  86.                 for(i=0;i<8;i++)  //數(shù)組循環(huán)一周
  87.                 {
  88.                         P1=CCW[i];
  89.                         delaynms(speed);   //調(diào)節(jié)轉(zhuǎn)速
  90.                 }
  91.         }
  92. }

  93. void motor_cw_deta(uchar deta,uchar speed)        //電機(jī)順時針轉(zhuǎn)deta度 deta=11時30度,deta=66時180度
  94. {
  95.         uchar i;
  96.         while(deta--)
  97.         {
  98.                  for(i=0;i<8;i++)  //內(nèi)部循環(huán)一周
  99.                  {
  100.                            P1=CW[i];
  101.                            delaynms(speed);   //調(diào)節(jié)轉(zhuǎn)速
  102.                 }
  103.         }
  104. }
  105. void Digital_tube_display(uint num)
  106. {
  107.         //4位數(shù)碼管顯示控制
  108.         
  109.         uchar temp,count;
  110.         temp         = 0;
  111.         count         = 0;
  112.         if(num > 999 || num < 0) return;
  113.         while(num)
  114.         {
  115.                 temp         = num % 10;
  116.                 P0                 = table[temp];
  117.                 switch(count)    //判斷
  118.                 {
  119.                         case 0:P2_3=0;break;  //點亮第1個燈
  120.                         case 1:P2_2=0;break;  //點亮第2個燈
  121.                         case 2:P2_1=0;break;  //點亮第3個燈
  122.                         case 3:P2_0=0;break;  //點亮第4個燈
  123.                 }
  124.                 delaynms(5);
  125.                 switch(count)    //判斷
  126.                 {
  127.                         case 0:P2_3=1;break;  //點亮第1個燈
  128.                         case 1:P2_2=1;break;  //點亮第2個燈
  129.                         case 2:P2_1=1;break;  //點亮第3個燈
  130.                         case 3:P2_0=1;break;  //點亮第4個燈
  131.                 }
  132.                 num         = num / 10;
  133.                 count++;
  134.         }
  135. }

  136. /**************************************************************
  137.                                                            中斷處理函數(shù)
  138. ****************************************************************/
  139. void deal_interrupt_Date(uint dat)
  140. {

  141.         SBUF=dat;                         //發(fā)送數(shù)據(jù)dat_rec到SBUF,即將單片機(jī)的數(shù)據(jù)發(fā)送到計算機(jī)
  142.         while(!TI);
  143.         TI = 0;

  144.         beep();
  145.         motor_cw_deta(11,1);        //電機(jī)順轉(zhuǎn)deta度,deta=11時30度,deta=66時180度
  146.         delaynms(10*dat);                //由于目前還沒有找到如何傳輸255以上的數(shù)的方法,所以先乘以10
  147.         motor_ccw_deta(11,1);        //電機(jī)逆轉(zhuǎn)deta齲琩eta=11時30度,deta=66時180度                        
  148.         
  149.         ES=1;                 //打開串口中斷        
  150.         flag_rec=0;
  151. }

  152. /**************************************************************
  153.                                                         主程序
  154. ****************************************************************/
  155. void main()
  156. {        
  157.         init_interrupt();
  158.         Digital_tube_display(0);
  159.         while(1)
  160.         {
  161.                 Digital_tube_display(data_rec);
  162.                 P1=0xf0;
  163.                 if(flag_rec)        //收到串口數(shù)據(jù)時,處理
  164.                 {
  165.                         deal_interrupt_Date(data_rec);
  166.                 }
  167.                
  168.         }
  169. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:298008 發(fā)表于 2020-2-22 10:42 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久欧美久久一区 | 在线视频第一页 | 五月婷婷视频 | 成人福利网 | 中文字幕一区在线观看视频 | 欧美成人精品一区二区男人看 | 国产视频精品视频 | 激情91| 日韩性生活网 | 国产无人区一区二区三区 | 麻豆精品国产免费 | 成年人网站免费视频 | 一区二区不卡视频 | 国产资源在线视频 | 久草福利| 国产精品视频久久 | 亚洲欧美日韩电影 | 天天躁日日躁狠狠躁2018小说 | 99精品久久| 色必久久 | 欧美亚洲国产成人 | 久久精品亚洲欧美日韩久久 | 91av久久久| 欧美成人精品一区二区男人看 | 91久久国产综合久久91精品网站 | 久久6视频| 欧美精品在欧美一区二区 | 久久久亚洲一区 | 国产高清不卡 | 色网站在线免费观看 | 夫妻午夜影院 | 久久久精彩视频 | 欧美三区在线观看 | 免费精品 | 亚洲国产一区在线 | 久久久久国产一区二区三区 | 国产一区二区精品 | 日韩一区中文字幕 | 中文字幕高清 | 粉嫩av久久一区二区三区 | 午夜久久久久久久久久一区二区 |