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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

I2C控制xx+5檔調(diào)速直流電機(jī) 單片機(jī)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:636102 發(fā)表于 2019-11-5 16:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
直流電機(jī)控制

單片機(jī)源程序如下:
  1. /*            
  2.                程序功能
  3.    
  4.                 6檔調(diào)速直流電機(jī),oled(IIC接口)顯示占空比

  5. */

  6. #include "reg52.h"
  7. #include "i2c.h"         
  8. #include "SEEKFREE_OLED.h"
  9.          
  10. sbit PwmOut=P1^0;   
  11. sbit k1=P0^0;
  12. sbit k2=P0^1;

  13. unsigned int period=50000;    //設(shè)置周期為50000us
  14. unsigned int duty=0;          //設(shè)置起始占空比值為0


  15. void T0T1_Init(void)                //定時器/計數(shù)器T0,T1初始化函數(shù)
  16. {
  17.         EA=1;
  18.         ET0=1;
  19.         ET1=1;
  20.         TMOD|=0x11;
  21.         TR0=1;
  22.         TH0=(65536-period)>>8;
  23.         TL0=65536-period;
  24.         TH1=(65536-duty)>>8;
  25.         TL1=65536-duty;
  26. }

  27. void Delay10ms(void)   //誤差 0us
  28. {
  29.     unsigned char a,b,c;
  30.     for(c=1;c>0;c--)
  31.         for(b=38;b>0;b--)
  32.             for(a=130;a>0;a--);
  33. }


  34. void keypros()         //按鍵處理函數(shù),按K1加檔位,按K2減檔位,共6檔(0,1,2,3,4,5)
  35. {
  36.         void numpro();
  37.         if(duty!=50000)                //封邊,達(dá)到最5檔位不可再加
  38.         {
  39.                 if(k1==0)
  40.                 {
  41.                         Delay10ms();
  42.                         if(k1==0)
  43.                         {
  44.                                 duty+=10000;       
  45.                         }
  46.                         while(!k1);
  47.                         numpro();
  48.                 }
  49.         }

  50.         if(duty)           //封邊,為0檔時不可再減
  51.         {
  52.                 if(k2==0)                                       
  53.                 {                                                          
  54.                         Delay10ms();
  55.                         if(k2==0)
  56.                         {
  57.                                 duty-=10000;
  58.                         }
  59.                         while(!k2);
  60.                         numpro();
  61.                 }
  62.         }

  63. }

  64. void numpro()        //oled顯示處理函數(shù),顯示占空比
  65. {
  66.         switch(duty)
  67.         {
  68.                 case 0:OLED_P8x16Str(90,3,"0%  ");
  69.                        OLED_P6x8Str(90,5,"min");      break;
  70.                 case 10000:OLED_P8x16Str(90,3,"20% ");
  71.                            OLED_P6x8Str(90,5,"   ");  break;
  72.                 case 20000:OLED_P8x16Str(90,3,"40% ");
  73.                            OLED_P6x8Str(90,5,"   ");  break;
  74.                 case 30000:OLED_P8x16Str(90,3,"60% ");
  75.                            OLED_P6x8Str(90,5,"   ");  break;
  76.                 case 40000:OLED_P8x16Str(90,3,"80% ");
  77.                            OLED_P6x8Str(90,5,"   ");  break;
  78.                 case 50000:OLED_P8x16Str(90,3,"100%");
  79.                            OLED_P6x8Str(90,5,"max");  break;
  80.         }
  81. }


  82. void main()
  83. {
  84.         PwmOut=0;
  85.         T0T1_Init();
  86.         Delay10ms(); //等待oled上電完成
  87.         Initial_M096128x64_ssd1306();//oled初始化
  88.         OLED_P6x8Str(25,0,"hello world");//oled顯示"hello world"
  89.         OLED_P6x8Str(25,7,"---made by msonah");//oled顯示"made by msonah"
  90.         OLED_P8x16Str(0,3,"duty cycle:");
  91.         OLED_P8x16Str(90,3,"0%  ");
  92.         OLED_P6x8Str(90,5,"min");      //剛通電時顯示“duty cycle:0%”
  93.         while(1)
  94.   {
  95.                 keypros();
  96.         }
  97. }


  98. void T0_ISR(void) interrupt 1
  99. {
  100.         TH0=(65536-period)>>8;
  101.         TL0=65536-period;
  102.         if(duty<period&&(duty))
  103.         {
  104.                 PwmOut=1;
  105.                 TR1=1;       
  106.         }
  107.         else
  108.         {
  109.                 if(duty==0)
  110.                 {
  111.                         PwmOut=0;

  112.                 }
  113.                 else
  114.                 {
  115.                         PwmOut=1;
  116.                 }
  117.         }       
  118. }


  119. void T1_ISR(void) interrupt 3
  120. {
  121.         TH1=(65536-duty)>>8;
  122.         TL1=65536-duty;       
  123.         PwmOut=0;
  124.         TR1=0;       
  125. }
復(fù)制代碼

所有資料51hei提供下載:
實驗14:I2C控制xx+5檔調(diào)速電機(jī)3.0.zip (87.15 KB, 下載次數(shù): 8)


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产综合久久国产大片 | 欧美a区| 在线婷婷| 久久一区二区三区电影 | 中文字幕在线剧情 | 中文字幕亚洲一区二区三区 | 亚洲三区在线观看 | 美女精品一区 | 久久一级大片 | 色婷婷一区二区三区四区 | 手机在线不卡av | 久久久久久综合 | av一级毛片 | 超碰成人在线观看 | av 一区二区三区 | 成人免费观看视频 | 欧美黄色性生活视频 | 999精品视频 | 人人九九精 | 超碰地址 | 亚洲一区二区黄 | 91视频在线 | 天堂在线www | h片在线观看网站 | 欧美一级片在线观看 | 国产欧美综合在线 | 国产精品日韩 | 欧美男人亚洲天堂 | 国产精品美女久久久 | 日韩欧美高清 | 亚洲日韩欧美一区二区在线 | 亚洲欧美激情精品一区二区 | 亚洲精品久久久久久首妖 | 97视频在线观看免费 | 人人射人人插 | 一区二区精品电影 | 中文字幕成人av | 亚洲一区免费在线 | 五月天婷婷狠狠 | 久久电影一区 | 一区二区国产在线观看 |