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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2884|回復: 0
打印 上一主題 下一主題
收起左側

c8051f410單片機步進電機控制系統

[復制鏈接]
跳轉到指定樓層
樓主
c8051f410單片機做的步進電機控制系統


源碼下載:
c8051f410.zip (33.63 KB, 下載次數: 14)


部分源碼預覽:
  1. /***********************************************
  2. 功能:定時器控制步進電機延時,定時器0控速
  3. 芯片C8051F410
  4. 晶振24.5MHz
  5. P0推挽控制步進電機
  6. L298N驅動
  7. 作者:JZ
  8. ***********************************************/
  9. #include"C8051F410.h"
  10. #include"stepping_motor410.h"
  11. // Peripheral specific initialization functions,
  12. // Called from the Init_Device() function
  13. #define uint unsigned int
  14. #define uchar unsigned char
  15. uchar code single_pos[4]={0xee,0xdd,0xbb,0x77};//單四拍驅動方式正轉表A-B-C-D
  16. uchar code single_rev[4]={0x77,0xbb,0xdd,0xee};//單四拍驅動方式反轉表D-C-B-A  

  17. uchar code double_pos[4]={0x99,0x33,0x66,0xcc};//雙四拍驅動方式正轉表AB-BC-CD-DA
  18. uchar code double_rev[4]={0xcc,0x66,0x33,0x99};//雙四拍驅動方式反轉表AD-DC-CB-BA
  19. uchar code eight_pos[8]={0xee,0xcc,0xdd,0x99,0xbb,0x33,0x77,0x66}; //八拍驅動方式正轉表A-AB-B-BC-C-CD-D-DA
  20. uchar code eight_rev[8]={0x66,0x77,0x33,0xbb,0x99,0xdd,0xcc,0xee}; //八拍驅動方式反轉表AD-D-DC-C-CB-B-BA-A
  21. uchar code eight_right_pos[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06}; //八拍驅動方式右輪正轉表A-AB-B-BC-C-CD-D-DA
  22. uchar code eight_right_rev[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e}; //八拍驅動方式右反輪轉表AD-D-DC-C-CB-B-BA-A  
  23. uchar code eight_left_pos[8]={0xe0,0xc0,0xd0,0x90,0xb0,0x30,0x70,0x60}; //八拍驅動方式左輪正轉表A-AB-B-BC-C-CD-D-DA
  24. uchar code eight_left_rev[8]={0x60,0x70,0x30,0xb0,0x90,0xd0,0xc0,0xe0}; //八拍驅動方式右輪反轉表AD-D-DC-C-CB-B-BA-A
  25. uint times;//時間次數記錄
  26. unsigned int step; //記錄脈沖數,即要走的步數
  27. uint beat; //步進電機每種驅動方式下的拍數
  28. char *p1,*p2;//存儲運行方式表
  29. void PCA_Init()
  30. {
  31.     PCA0MD    &= ~0x40;
  32.     PCA0MD    = 0x00;
  33. }

  34. void Timer_Init()
  35. {
  36.     TCON      = 0x10;
  37.     TMOD      = 0x02;
  38.     TL0       = 0x38;
  39.     TH0       = 0x38;
  40. }

  41. void Port_IO_Init()
  42. {


  43.     P0MDOUT   = 0xFF;
  44.     XBR1      = 0x40;
  45. }

  46. void Oscillator_Init()
  47. {
  48.     OSCICN    = 0x87;
  49. }

  50. void Interrupts_Init()
  51. {
  52.     IE        = 0x82;
  53. }

  54. // Initialization function for device,
  55. // Call Init_Device() from your main program
  56. void Init_Device(void)
  57. {
  58.     PCA_Init();
  59.     Timer_Init();
  60.     Port_IO_Init();
  61.     Oscillator_Init();
  62.     Interrupts_Init();
  63. }
  64. //單四拍驅動正轉(N*360/200)度
  65. void m_single_pos(unsigned int N)
  66. {
  67.         beat=4;        //拍數
  68.         p1=single_pos;
  69.         p2=single_pos+beat;
  70.         step=N;
  71.         TR0=1;//開定時器0,電機運行
  72.         while(1)
  73.         {
  74.                 P0=*p1;       
  75.                 if(step==0)
  76.                 {
  77.                 P0=0x00;
  78.                 TR0=0;//關定時器0
  79.                 break;
  80.                 }
  81.         }
  82. }
  83. //單四拍驅動反轉(N*360/200)度
  84. void m_single_rev(unsigned int N)
  85. {
  86.         beat=4;
  87.         p1=single_rev;
  88.         p2=single_rev+beat;
  89.         step=N;
  90.         TR0=1;//        開定時器0,電機運行
  91.         while(1)
  92.         {
  93.                 P0=*p1;       
  94.                
  95.                 if(step==0)
  96.                 {
  97.                 P0=0x00;
  98.                 TR0=0;//關定時器0
  99.                 break;
  100.                 }
  101.         }
  102. }
  103. //雙四拍驅動正轉(N*360/200)度
  104. void m_double_pos(unsigned int N)
  105. {
  106.         beat=4;
  107.         p1=double_pos;
  108.         p2=double_pos+beat;
  109.         step=N;
  110.         TR0=1;//        開定時器0,電機運行
  111.         while(1)
  112.         {
  113.                 P0=*p1;       
  114.                
  115.                 if(step==0)
  116.                 {
  117.                 P0=0x00;
  118.                 TR0=0;//關定時器0
  119.                 break;
  120.                 }
  121.         }
  122. }
  123. //雙四拍驅動反轉(N*360/200)度
  124. void m_double_rev(unsigned int N)
  125. {
  126.         beat=4;
  127.         p1=double_rev;
  128.         p2=double_rev+beat;
  129.         step=N;
  130.         TR0=1;//        開定時器0,電機運行
  131.         while(1)
  132.         {
  133.                 P0=*p1;       
  134.                
  135.                 if(step==0)
  136.                 {
  137.                 P0=0x00;
  138.                 TR0=0;//關定時器0
  139.                 break;
  140.                 }
  141.         }
  142. }
  143. //八拍驅動正轉(N*360/400)度
  144. void m_eight_pos(unsigned int N)
  145. {
  146.         beat=8;
  147.         p1=eight_pos;
  148.         p2=eight_pos+beat;
  149.         step=N;
  150.         TR0=1;//        開定時器0,電機運行
  151.         while(1)
  152.         {
  153.                 P0=*p1;       
  154.                
  155.                 if(step==0)
  156.                 {
  157.                 P0=0x00;
  158.                 TR0=0;//關定時器0
  159.                 break;
  160.                 }
  161.         }
  162. }
  163. //八拍驅動反轉(N*360/400)度
  164. void m_eight_rev(unsigned int N)
  165. {
  166.         beat=8;
  167.         p1=eight_rev;
  168.         p2=eight_rev+beat;
  169.         step=N;
  170.         TR0=1;//        開定時器0,電機運行
  171.         while(1)
  172.         {
  173.                 P0=*p1;       
  174.                
  175.                 if(step==0)
  176.                 {
  177.                 P0=0x00;
  178.                 TR0=0;//關定時器0
  179.                 break;
  180.                 }
  181.         }
  182. }
  183. //八拍驅動右輪正轉(N*360/400)度
  184. void m_eight_right_pos(unsigned int N)
  185. {
  186.         beat=8;
  187.         p1=eight_right_pos;
  188.         p2=eight_right_pos+beat;
  189.         step=N;
  190.         TR0=1;//        開定時器0,電機運行
  191.         while(1)
  192.         {
  193.                 P0=*p1;       
  194.                
  195.                 if(step==0)
  196.                 {
  197.                 P0=0x00;
  198.                 TR0=0;//關定時器0
  199.                 break;
  200.                 }
  201.         }
  202. }
  203. //八拍驅動右輪反轉(N*360/400)度
  204. void m_eight_right_rev(unsigned int N)
  205. {
  206.         beat=8;
  207.         p1=eight_right_rev;
  208.         p2=eight_right_rev+beat;
  209.         step=N;
  210.         TR0=1;//        開定時器0,電機運行
  211.         while(1)
  212.         {
  213.                 P0=*p1;       
  214.                
  215.                 if(step==0)
  216.                 {
  217.                 P0=0x00;
  218.                 TR0=0;//關定時器0
  219.                 break;
  220.                 }
  221.         }
  222. }
  223. //八拍驅動左輪正轉(N*360/400)度
  224. void m_eight_left_pos(unsigned int N)
  225. {
  226.         beat=8;
  227.         p1=eight_left_pos;
  228.         p2=eight_left_pos+beat;
  229.         step=N;
  230.         TR0=1;//        開定時器0,電機運行
  231.         while(1)
  232.         {
  233.                 P0=*p1;       
  234.                
  235.                 if(step==0)
  236.                 {
  237.                 P0=0x00;
  238.                 TR0=0;//關定時器0
  239.                 break;
  240.                 }
  241.         }
  242. }
  243. //八拍驅動左輪反轉(N*360/400)度
  244. void m_eight_left_rev(unsigned int N)
  245. {
  246.         beat=8;
  247.         p1=eight_left_rev;
  248.         p2=eight_left_rev+beat;
  249.         step=N;
  250.         TR0=1;//        開定時器0,電機運行
  251.         while(1)
  252.         {
  253.                 P0=*p1;       
  254.                
  255.                 if(step==0)
  256.                 {
  257.                 P0=0x00;
  258.                 TR0=0;//關定時器0
  259.                 break;
  260.                 }
  261.         }
  262. }
  263. void motor_timer0() interrupt 1  //定時器0中斷,產生電機驅動脈沖的延時
  264. {                                                                                                  
  265.         times++;
  266.         if(times==102)   //TH0=0x38時,times最小為5           tinmes=102延時10ms
  267.         {
  268.                 times=0;
  269.                 p1++;
  270.                 if(p1==p2)
  271.                 p1=p1-beat;
  272.                 step--;

  273.         }

  274. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 激情a| 免费黄色的视频 | 精精国产xxxx视频在线播放7 | 最新一级毛片 | 色综合视频在线 | 精品国产一区二区三区性色av | 日韩欧美在线不卡 | 日本黄色片免费在线观看 | 国产一区二区在线免费 | 欧美综合久久 | 久久精品亚洲精品国产欧美 | 91亚洲欧美| 亚洲三区在线 | 日韩超碰在线 | 精久久久 | 毛片一区二区 | 国产视频欧美 | 欧美日韩中文在线 | 亚洲成人在线免费 | 日韩一区欧美一区 | 国产高清在线精品一区二区三区 | 日韩中文字幕 | 欧洲一区二区三区 | 黄免费在线 | www.日韩欧美 | 国产伦精品一区二区三区精品视频 | 欧美日韩精品免费观看 | 四虎影院在线播放 | 日日爽| 一区二区三区四区在线 | 国产精品久久久久久久久久久免费看 | 久久久久欧美 | 黄色大片免费网站 | 日本久久久久久久久 | 99这里只有精品视频 | 日韩成人国产 | 男女在线网站 | 国产一区免费视频 | 一区二区三区免费网站 | 久久久久久亚洲精品 | 亚洲一区二区三区在线播放 |