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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3939|回復: 4
收起左側

單片機紅外感應的溫控轉速型風扇設計電路+源程序

[復制鏈接]
ID:806027 發(fā)表于 2020-7-20 21:28 | 顯示全部樓層 |閱讀模式
51hei.png

單片機源程序如下:
  1. #include<reg52.h>

  2. sbit IN1=P2^7;
  3. sbit IN2=P2^6;
  4. sbit ENA=P2^5;

  5. bit flag1s=0;//1s定時標志
  6. unsigned char T0RH=0;
  7. unsigned char T0RL=0;

  8. int temp;//讀取到的當前溫度值
  9. unsigned char len;
  10. int intT,decT;//溫度值的整數(shù)和小數(shù)部分
  11. unsigned char str[12];

  12. void Compare();
  13. void GetTemp();
  14. void ConfigTimer0(unsigned int ms);
  15. unsigned char IntToString(unsigned char *str,int dat);
  16. extern bit Start18B20();
  17. extern bit Get18B20Temp(int *temp);
  18. extern void InitLcd1602();
  19. extern void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);

  20. void main()
  21. {
  22.         bit res;

  23.         EA=1;
  24.         ConfigTimer0(10);//T0定時10ms
  25.         Start18B20();//啟動DS18B20
  26.         InitLcd1602();//初始化液晶

  27.         while(1)
  28.         {               
  29.                 if(flag1s)//每秒更新一次溫度
  30.                 {
  31.                         flag1s=0;
  32.                         res=Get18B20Temp(&temp);//讀取當前溫度
  33.                         if(res)//讀取成功時,刷新當前溫度顯示
  34.                         {
  35.                                 GetTemp();
  36.                         
  37.                                 LcdShowStr(0,0,"Welcome to use");//顯示字符及溫度值
  38.                                 LcdShowStr(0,1,"Current T:");
  39.                                 LcdShowStr(10,1,str);
  40.                                         Compare();
  41.                         }
  42.                         else //讀取失敗時,提示錯誤信息
  43.                         {
  44.                                 LcdShowStr(0,0,"error!");

  45.                         }
  46.                         Start18B20();//重新啟動下一次轉換                                         
  47.                 }
  48.         }
  49. }
  50. /*溫度獲取函數(shù),獲取當前環(huán)境溫度值并保存在str數(shù)組中*/
  51. void GetTemp()
  52. {

  53.         intT=temp>>4;//分離出溫度值整數(shù)部分
  54.         decT=temp &0x0F;//分離出溫度值小數(shù)部分
  55.                         
  56.         len=IntToString(str,intT);//整數(shù)部分轉換成字符串
  57.                         
  58.         str[len++]='.';
  59.         decT=(decT*10)/16;//二進制的小數(shù)部分轉換為1位十進制位
  60.         str[len++]=decT+'0';//十進制小數(shù)位再轉換為ASCII字符
  61.         while(len<6)//用空格補齊到6個字符長度
  62.         {
  63.                 str[len++]=' ';
  64.         }
  65.         str[len++]='\0';
  66. }
  67. /*延時函數(shù),用于PWM控制*/
  68. void delay(unsigned int z)
  69. {
  70.         unsigned int x,y;
  71.         for(x=z;x>0;x--)
  72.                 for(y=110;y>0;y--);
  73. }
  74. /*比較函數(shù),通過溫度值的比較設置電機的轉速*/
  75. void Compare()
  76. {
  77.         unsigned int i=0;
  78.         unsigned char j;

  79.         if((intT>= 24) && (intT<26))   //以兩度為一個溫差范圍,并設溫度范圍索引
  80.         {
  81.                 j=0;        
  82.         }
  83.         else if((intT>=26) &&(intT<28))
  84.         {
  85.                 j=1;
  86.         }
  87.         else if((intT>=28) &&(intT<30))
  88.         {
  89.                 j=2;
  90.         }
  91.         else if(intT>=30)
  92.         {
  93.                 j=3;
  94.         }
  95.         switch(j)                  //根據(jù)溫度索引設置電機轉速
  96.         {
  97.                 case 0:        IN1=1;
  98.                                 IN2=0;
  99.                                   for(i=0;i<200;i++)
  100.                               {
  101.                                         ENA=1;
  102.                                      delay(20);
  103.                                   ENA=0;
  104.                                         delay(30);
  105.                                 }
  106.                                 break;
  107.         
  108.                 case 1:        IN1=1;
  109.                                 IN2=0;
  110.                                   for(i=0;i<200;i++)
  111.                               {
  112.                                         ENA=1;
  113.                                      delay(30);
  114.                                   ENA=0;
  115.                                         delay(30);
  116.                                 }
  117.                                 break;         
  118.         
  119.                 case 2:        IN1=1;
  120.                                 IN2=0;
  121.                                   for(i=0;i<200;i++)
  122.                               {
  123.                                         ENA=1;
  124.                                      delay(55);                        
  125.                                   ENA=0;
  126.                                         delay(30);
  127.                                 }
  128.                                 break;         
  129.                                                         
  130.                 case 3:        IN1=1;
  131.                                 IN2=0;
  132.                               ENA=1;
  133.                                 break;

  134.                 default:break;                  
  135.         }
  136. }  

  137. /*整型數(shù)轉換為字符串,str-字符串指針,dat-待轉換數(shù),返回值-字符串長度*/
  138. unsigned char IntToString(unsigned char *str,int dat)
  139. {
  140.         signed char i=0;
  141.         unsigned char len=0;
  142.         unsigned char buf[6];

  143.         if(dat<0)//如果為負數(shù),首先取絕對值,并在指針上添加負號
  144.         {
  145.                  dat=-dat;
  146.                 *str++='-';
  147.                 len++;
  148.         }
  149.         do{           //先轉換為低位在前的十進制數(shù)組
  150.                 buf[i++]=dat%10;
  151.                 dat /=10;
  152.         }while(dat>0);
  153.         len += i;//i最后的值就是有效字符的個數(shù)
  154.         while(i-->0)//將數(shù)組值轉換為ASCII碼反向拷貝到接收指針上
  155.         {
  156.                 *str++=buf[i]+'0';
  157.         }
  158.         *str='\0';
  159.         return len;
  160. }
  161. void ConfigTimer0(unsigned int ms)
  162. {
  163.         unsigned long tmp;

  164.         tmp=11059200/12;
  165.         tmp=(tmp*ms)/1000;
  166.         tmp=65536-tmp;
  167.         tmp=tmp+12;
  168. ……………………

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

所有資料51hei提供下載:
基于紅外感應的溫控轉速型風扇設計資料.7z (72.26 KB, 下載次數(shù): 62)


評分

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

查看全部評分

回復

使用道具 舉報

ID:585455 發(fā)表于 2020-9-2 13:31 | 顯示全部樓層
正在找L298N控制風扇的資料,非常詳細,感謝了。
回復

使用道具 舉報

ID:817695 發(fā)表于 2020-9-11 19:48 | 顯示全部樓層
PWM控制的嗎?
回復

使用道具 舉報

ID:869719 發(fā)表于 2020-12-28 21:09 | 顯示全部樓層
有大神能根據(jù)這個電路畫個proteus電路仿真來學習下嗎?
回復

使用道具 舉報

ID:869719 發(fā)表于 2020-12-28 21:23 | 顯示全部樓層
有proteus仿真嘛??.
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区视频在线播放 | av色在线| 天天操天天插天天干 | 国产成人精品福利 | 国产在线视频在线观看 | 一区二区在线 | 亚洲欧美中文日韩在线 | 91久久国产综合久久91精品网站 | 极品销魂美女一区二区 | 国产精品视频专区 | 久久精品国产久精国产 | 极情综合网 | 亚洲永久精品国产 | 一级做a| 欧美一级α片 | 成人看片在线观看 | 国产成人一区在线 | 全免一级毛片 | 免费在线色 | 青久草视频| 手机看黄av免费网址 | 最新超碰 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 国产乱码精品一区二区三区中文 | 日韩在线观看 | 视频一区二区三区四区五区 | www.久久.com | 欧洲一区在线观看 | 国产ts人妖一区二区三区 | 日本不卡在线视频 | 国产成人在线视频 | 国产欧美精品一区二区色综合 | 日一区二区 | 人人精品 | 国产不卡在线观看 | 一本一道久久a久久精品综合蜜臀 | 日韩免费一区二区 | 国产精品久久久久久网站 | 国产成人福利在线观看 | 国内自拍偷拍视频 | 一区二区视频 |