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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機pwm按鍵控制直流電機加減速源程序

  [復制鏈接]
跳轉到指定樓層
樓主



單片機源程序如下:
  1. #include<reg51.h>
  2. #define   DATAOUT P0

  3. #define TH0_TL0 (65536-1000)//設定中斷的間隔時長



  4. sbit Key_add=P1 ^ 0; //電機減速
  5. sbit Key_dec=P1 ^ 2; //電機加速
  6. sbit Key_turn=P1 ^ 1; //電機換向
  7. sbit PWM1=P2^6;//PWM 通道1,反轉脈沖
  8. sbit PWM2=P2^7;//PWM 通道2,正轉脈沖
  9. void LCD_write_char(unsigned char x,unsigned char y,char ch );

  10. sbit rs=P2^0;
  11. sbit rw=P2^1;  
  12. sbit e=P2^2;


  13. void LCD_Writecmd(unsigned char cmd);
  14. void LCD_Writedata(unsigned char dat);
  15. void LCD_write_str(unsigned char x,unsigned char y,char str[]);
  16. void LCD_clear(void);
  17. void LCD_Init(void);



  18. void delay_us(unsigned char y);
  19. void delay_ms(unsigned char z);
  20. void Delay(unsigned char x);
  21. void Motor_speed_high(void);
  22. void Motor_speed_low(void);
  23. void Motor_turn(void);
  24. void Timer0_init(void);

  25. unsigned char count0 = 50;//低電平的占空比

  26. unsigned char Time_delay;
  27. unsigned char count1 = 0;//高電平的占空比

  28. bit Flag = 1;//電機正反轉標志位,1正轉,0反轉



  29. void Delay(unsigned char x)
  30. {

  31. Time_delay = x;  

  32. while(Time_delay != 0);//等待中斷,可減少PWM輸出時間間隔
  33. }




  34. void Motor_speed_high(void)//
  35. {
  36. if(Key_add==0)
  37. {
  38.   
  39. Delay(10);  
  40. if(Key_add==0)  
  41. {
  42.   
  43.   count0 += 10;  
  44.   
  45.    
  46. if(count0 >= 100)  
  47.    {

  48.    count0 = 100;
  49.     }
  50.    }

  51. while(!Key_add);//等待鍵松開
  52. }
  53. }





  54. void Motor_speed_low(void)
  55. {

  56. if(Key_dec==0)
  57. {

  58. Delay(10);  
  59. if(Key_dec==0)
  60.   {
  61.   
  62.   count0 -= 10;  
  63.   
  64.     if(count0 <= 0)  
  65.    {
  66.   
  67.   count0 = 0;   
  68.   }  
  69.   }
  70.   
  71. while(!Key_dec );
  72. }
  73. }





  74. void Motor_turn(void)
  75. {

  76. if(Key_turn == 0)
  77. {

  78.   Delay(10);
  79.    if(Key_turn == 0)
  80.   {
  81.   
  82.   Flag = ~Flag;
  83.   }

  84.   while(!Key_turn);
  85. }
  86. }





  87. void Timer0_init(void)
  88. {

  89. TMOD=0x01; //定時器0工作于方式1
  90. TH0=TH0_TL0/256;
  91. TL0=TH0_TL0%256;
  92. TR0=1;
  93. ET0=1;
  94. EA=1;
  95. }











  96. void Timer0_int(void) interrupt 1 using 1
  97. {

  98. TR0 = 0;//設置定時器初值期間,關閉定時器
  99. TL0 = TH0_TL0 % 256;

  100. TH0 = TH0_TL0 / 256; //定時器裝初值
  101. TR0 = 1;
  102. if(Time_delay != 0)//延時函數用
  103. {

  104. Time_delay--;
  105. }

  106. if(Flag == 1)//電機正轉
  107. {
  108. PWM1 = 0;

  109.    
  110.   if(++count1 < count0)
  111.   {

  112.    PWM2 = 1;

  113.    }   
  114. else   
  115.    PWM2 = 0;  

  116.     if(count1 >= 100)  
  117.    {   
  118.   count1=0;
  119.     }
  120. }

  121. else //電機反轉
  122.    {
  123.    
  124. PWM2 = 0;
  125.    

  126.     if(++count1 < count0)  
  127.    {   
  128.   PWM1 = 1;  
  129.    }   
  130.   else   
  131.    PWM1 = 0;   
  132.   
  133.     if(count1 >= 100)  
  134.    {
  135.    
  136.    count1=0;  
  137.    }  
  138. }
  139. }





  140. void delay_us(unsigned char j)/* 簡易延時函數 */
  141. {
  142. unsigned char k,i;
  143. for(k=j;j>0;j--)
  144. for(i=100;i>0;i--);

  145. }




  146. void delay_ms(unsigned char j) /* 簡易延時函數 */
  147. {
  148. unsigned char k,i;
  149. for(k=j;j>0;j--)
  150. for(i=256;i>0;i--);

  151. }


  152. void LCD_Writecmd(unsigned char cmd)//寫指令到LCD1602
  153. {
  154.         rs=0;
  155.         delay_us(1);
  156.         rw=0;
  157.         delay_us(1);
  158.        
  159.         e=1;
  160.         DATAOUT=cmd;
  161.         delay_us(300);
  162.         e=0;
  163. }


  164. void LCD_Writedata(unsigned char dat)//寫數據到LCD1602
  165. {
  166.         rs=1;
  167.         delay_us(1);
  168.         rw=0;
  169.         delay_us(1);
  170.         e=1;
  171.         DATAOUT=dat;
  172.         delay_us(300);
  173.         e=0;
  174.        
  175. }


  176. void LCD_write_char(unsigned char x,unsigned char y,char ch )//在指定位置顯示一個字符
  177. {
  178.         if(y==0)
  179.                 LCD_Writecmd(0x80+x);
  180.         else
  181.                 LCD_Writecmd(0xc0+x);
  182.         LCD_Writedata(ch);

  183. }

  184. void LCD_write_str(unsigned char x,unsigned char y,char str[])//使LCD1602顯示一個字符串
  185. {
  186.         unsigned char i=0;
  187.         if(y==0)
  188.                 LCD_Writecmd(0x80+x);
  189.         else
  190.                 LCD_Writecmd(0xc0+x);
  191.         while(str[i]!='\0')
  192.         {
  193.                 LCD_Writedata(str[i]);
  194.                 ++i;
  195.         }
  196.        
  197. }

  198. void LCD_clear(void)//清屏函數
  199. {
  200.         LCD_Writecmd(0x01);
  201.         delay_ms(5);

  202. }

  203. void LCD_Init(void)//LCD初始化
  204. {
  205.         delay_ms(100);                  
  206.         LCD_Writecmd(0x38);  
  207.         delay_ms(10);  
  208.         LCD_Writecmd(0x38);   
  209.         delay_ms(10);  
  210.         LCD_Writecmd(0x38);   
  211.         delay_ms(10);   
  212.         LCD_Writecmd(0x38);  
  213. ……………………

  214. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:
直流電機.zip (13.13 KB, 下載次數: 217)


評分

參與人數 2黑幣 +55 收起 理由
HYF111 + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:211258 發表于 2017-6-15 17:45 | 只看該作者
非常好
回復

使用道具 舉報

板凳
ID:191299 發表于 2018-1-6 10:10 | 只看該作者
很好,謝謝。
回復

使用道具 舉報

地板
ID:191299 發表于 2018-1-6 16:53 | 只看該作者
請問為什么電機基本不轉呢?
回復

使用道具 舉報

5#
ID:272625 發表于 2018-1-7 13:45 | 只看該作者
HYF111 發表于 2018-1-6 16:53
請問為什么電機基本不轉呢?

要步進電機吧
回復

使用道具 舉報

6#
ID:248394 發表于 2018-1-13 16:57 | 只看該作者
mark 留著以后仔細看看
回復

使用道具 舉報

7#
ID:308395 發表于 2018-5-3 16:20 | 只看該作者
樓主的壓縮包里只有一張截圖(就是樓主上面發的),和一個程序
回復

使用道具 舉報

8#
ID:324655 發表于 2018-5-12 23:52 來自手機 | 只看該作者
宮商角徵羽smile 發表于 2018-5-3 16:20
樓主的壓縮包里只有一張截圖(就是樓主上面發的),和一個程序

能不能發給我一下,我需要,謝謝了
回復

使用道具 舉報

9#
ID:317900 發表于 2018-5-15 08:35 | 只看該作者
謝謝分享
回復

使用道具 舉報

10#
ID:334144 發表于 2018-5-20 13:05 | 只看該作者
宮商角徵羽smile 發表于 2018-5-3 16:20
樓主的壓縮包里只有一張截圖(就是樓主上面發的),和一個程序

能發給我看一下嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线免费 | 国产精品免费福利 | 91在线视频在线观看 | 国久久| 在线激情视频 | www四虎影视 | 中文字幕成人免费视频 | 久久99国产精一区二区三区 | 精品视频在线播放 | 亚洲一区视频在线播放 | 国产精品电影在线观看 | 久久久久久黄 | 午夜小电影 | 国产精品一区二区av | 国产.com| 午夜精品一区二区三区免费视频 | 在线观看免费av片 | 国产一伦一伦一伦 | 久久精品中文字幕 | www.狠狠干 | 午夜国产羞羞视频免费网站 | 91资源在线 | 欧美日韩在线不卡 | 伊人春色成人 | 免费成人在线网站 | 91在线视频免费观看 | 91免费视频观看 | 国产日韩精品一区 | 一区二区三区在线看 | 福利成人 | 精品国产一区二区三区免费 | 91在线第一页 | 国产综合精品 | 国产精品99久久免费观看 | 成人免费观看男女羞羞视频 | 久久精品亚洲精品国产欧美kt∨ | 毛片一区二区 | 国产精品视频免费看 | a在线免费观看视频 | 欧美久久一区二区三区 | 久久久高清 |