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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于藍牙模塊的代碼 單片機中斷能實現直流電機調速嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:202136 發表于 2017-5-31 11:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣

下面這塊是讀取溫度的 先不管他 上面的中斷能實現直流電機調速嗎?  我的是普中開發板 電機應該怎么接 是接步進電機上么?能幫我調通?有紅包感謝

  1. #include <reg51.h>
  2. #define  uchar  unsigned char
  3. #define  uint   unsigned int


  4. sbit PWM=P1^0;
  5. sbit DSPORT=P3^7;


  6. void Ds18b20ReadTemp();
  7. void UsartConfiguration();


  8. unsigned int temp=0;
  9. unsigned char zhuanshu=20;
  10. unsigned int cnt=0;
  11. unsigned char receiveData;
  12. unsigned int dingshi=0;
  13. unsigned char min=1;

  14. void main(void)
  15. {
  16.     unsigned int i=3000;
  17.     UsartConfiguration();
  18. while(1)
  19. {
  20. if(cnt>=3000)
  21. {
  22. cnt=0;
  23. Ds18b20ReadTemp(); //3s檢測一次溫度
  24. }
  25. switch(receiveData)
  26. {
  27. case 177:ET0=1;zhuanshu=20;receiveData=0;break;          // 數字1 風扇啟動
  28. case 178:zhuanshu=0;while(i--);ET0=0;receiveData=0;break;        //數字2 風扇停止 由于IO口默認高電平  所以要讓zhuanshu=0
  29. case 179:zhuanshu=30;break;//數字3 低擋
  30. case 180:zhuanshu=50;break;//數字4 中擋
  31. case 181:zhuanshu=70;break;// 數字5高擋
  32. case 182:                  // 數字6自動根據溫度調節轉速
  33. {
  34. if(temp<3200)
  35. {
  36.    zhuanshu=25;
  37. }
  38. if((temp>3200)&&(temp<3300))
  39. {
  40.    zhuanshu=30;
  41. }
  42. if((temp>3400)&&(temp<3600))
  43. {
  44.    zhuanshu=50;
  45. }
  46. if((temp>3200)&&(temp<3300))
  47. {
  48.   zhuanshu=60;
  49. }
  50. } break;                  
  51. case 183: //定時時間數字7
  52. {
  53.   static dingshi=0;
  54.    if(dingshi>=60000)  //1分鐘一個基準
  55.   {
  56.      min--;
  57. dingshi=0;
  58. if(min==0)
  59. {
  60. ET0=0;
  61. zhuanshu=0;
  62. }
  63.   }
  64.   break;
  65. case 184: receiveData=0;min++;break; //增加時間  數字8
  66. case 185: receiveData=0;min--;break; //減少時間  數字9
  67. }
  68. }
  69.   }
  70. }
  71.   void UsartConfiguration()
  72. {
  73. SCON=0X50; //設置為工作方式1
  74. TMOD=0X21; //設置計數器工作方式2
  75. PCON=0X80; //波特率加倍
  76. TH0 = 0xFC;
  77. TL0 = 0x66;
  78. TH1=0XF9;     //計數器初始值設置,注意波特率是9600的
  79. TL1=0XF9;
  80. ET0=1;
  81. ES=1; //打開接收中斷
  82. EA=1; //打開總中斷
  83. TR1=1;
  84. TR0=1;     //打開計數器
  85. }




  86.   void Usart() interrupt 4
  87. {
  88. receiveData=SBUF; //出去接收到的數據
  89. RI = 0;           //清除接收中斷標志位
  90. }


  91. void Time1(void) interrupt 1    //3 為定時器1的中斷號  1 定時器0的中斷號 0 外部中斷1 2 外部中斷2  4 串口中斷
  92. {
  93.     static unsigned char timer1=0;
  94. TH0 = 0xF6;  //重新賦初值
  95. TL0 = 0x66;
  96. timer1++;
  97.     cnt++;
  98. dingshi++;
  99. if(dingshi>=60050)
  100. {
  101. dingshi=0;
  102. }
  103. if(timer1>100)  //PWM周期為100*0.5ms
  104. {
  105. timer1=0;
  106. }
  107. if(timer1 <zhuanshu)//改變zhunashu這個值可以改變直流電機的速度這個值越大轉的越快
  108. {
  109.    PWM=1;
  110. }
  111. else
  112. {
  113.   PWM=0;
  114. }
  115. }


  116. void Delay1ms(uint y) //延時程序
  117. {
  118. uint x;
  119. for( ; y>0; y--)
  120. {
  121. for(x=110; x>0; x--);
  122. }
  123. }


  124. uchar Ds18b20Init() //溫度的子函數
  125. {
  126. uchar i;
  127. DSPORT = 0; //將總線拉低480us~960us
  128. i = 70;
  129. while(i--);//延時642us
  130. DSPORT = 1; //然后拉高總線,如果DS18B20做出反應會將在15us~60us后總線拉低
  131. i = 0;
  132. while(DSPORT) //等待DS18B20拉低總線
  133. {
  134. i++;
  135. if(i>5)//等待>5MS
  136. {
  137. return 0;//初始化失敗
  138. }
  139. Delay1ms(1);
  140. }
  141. return 1;//初始化成功
  142. }






  143. void Ds18b20WriteByte(uchar dat)
  144. {
  145. uint i, j;


  146. for(j=0; j<8; j++)
  147. {
  148. DSPORT = 0;       //每寫入一位數據之前先把總線拉低1us
  149. i++;
  150. DSPORT = dat & 0x01;  //然后寫入一個數據,從最低位開始
  151. i=6;
  152. while(i--); //延時68us,持續時間最少60us
  153. DSPORT = 1; //然后釋放總線,至少1us給總線恢復時間才能接著寫入第二個數值
  154. dat >>= 1;
  155. }
  156. }






  157. uchar Ds18b20ReadByte()
  158. {
  159. uchar byte, bi;
  160. uint i, j;
  161. for(j=8; j>0; j--)
  162. {
  163. DSPORT = 0;//先將總線拉低1us
  164. i++;
  165. DSPORT = 1;//然后釋放總線
  166. i++;
  167. i++;//延時6us等待數據穩定
  168. bi = DSPORT; //讀取數據,從最低位開始讀取
  169. /*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/
  170. byte = (byte >> 1) | (bi << 7);
  171. i = 4; //讀取完之后等待48us再接著讀取下一個數
  172. while(i--);
  173. }
  174. return byte;
  175. }


  176. void  Ds18b20ChangTemp()
  177. {
  178. Ds18b20Init();
  179. Delay1ms(1);
  180. Ds18b20WriteByte(0xcc);//跳過ROM操作命令
  181. Ds18b20WriteByte(0x44);   //溫度轉換命令
  182. // Delay1ms(100);//等待轉換成功,而如果你是一直刷著的話,就不用這個延時了
  183.    
  184. }




  185. void  Ds18b20ReadTempCom()
  186. {


  187. Ds18b20Init();
  188. Delay1ms(1);
  189. Ds18b20WriteByte(0xcc);//跳過ROM操作命令
  190. Ds18b20WriteByte(0xbe);//發送讀取溫度命令
  191. }




  192. void Ds18b20ReadTemp()
  193. {
  194.    float tp;
  195. int temp1 = 0;
  196. uchar tmh, tml;
  197. Ds18b20ChangTemp();//先寫入轉換命令
  198. Ds18b20ReadTempCom();//然后等待轉換完后發送讀取溫度命令
  199. tml = Ds18b20ReadByte();//讀取溫度值共16位,先讀低字節
  200. tmh = Ds18b20ReadByte();//再讀高字節
  201. temp1 = tmh;
  202. temp1 <<= 8;
  203. temp1 |= tml;
  204.    if(temp1< 0)
  205.   {
  206. temp1=temp1-1;
  207. temp1=~temp1;
  208. tp=temp1;
  209. temp1=tp*0.0625*100+0.5;
  210.   }
  211. else
  212.   {
  213. tp=temp1;
  214. temp1=tp*0.0625*100+0.5;
  215. }


  216.   temp=temp1%10000;
  217.    
  218. }

復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃视频在线观看www社区 | 男女下面一进一出网站 | 日韩高清一区二区 | 久久久久久久久久久久久九 | 欧美日韩a | www.亚洲精品 | 免费的色网站 | 亚洲人成网站777色婷婷 | 亚洲444kkkk在线观看最新 | 欧美一区二区三区在线观看 | 天天看天天操 | 精区3d动漫一品二品精区 | 男女深夜网站 | 久久久久免费观看 | 一区二区三区不卡视频 | 性做久久久久久免费观看欧美 | av手机在线播放 | 欧美一区二不卡视频 | 日韩一二三区视频 | 免费看91 | 日本久久久久久久久 | 玖玖视频| 在线欧美小视频 | 国产精品一区二区三区在线播放 | www.狠狠干 | 国精品一区二区 | 久久国产精品久久久久久 | 国产91丝袜在线18 | 国产精品日日做人人爱 | 一级黄色录像片子 | 在线啊v | av网站在线播放 | 天天插天天操 | 一区二区三区四区毛片 | 日本久久www成人免 成人久久久久 | 国产精品久久久久久久久婷婷 | 91精品国产91久久久久久密臀 | 一区二区在线免费观看 | 2020亚洲天堂| 神马久久久久久久久久 | 欧美一级黄视频 |