找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3822|回复: 2
收起左侧

51单片机温度+pwm控制风扇转速,且温度在LCD1602上显示

  [复制链接]
ID:794590 发表于 2020-7-1 11:17 | 显示全部楼层 |阅读模式
原理图如下:
51hei.png A[@~I$}4H8X40K4BT9_85~F.png
源代码如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include"define.h"
  4. #include"delay.h"
  5. #include"LCD1602.h"
  6. #include"DS18B20.h"
  7. #include"HL_alarm.h"
  8. sbit KEY3 = P3^5;                //定义开始/停止
  9.   void zhuan();
  10.   unsigned char timer1;
  11. //***********************************************************************/

  12. void main()
  13. {  if(KEY3==0)            //第一次检测是否有键按下
  14.     {   
  15.     PWM=0;MA=~MA;MB=~MB;
  16.     delay(1);
  17.     return;   
  18. }
  19. else
  20.     {LCD_init();
  21.     set_alarm_HL();
  22.     DS_read_temperature();
  23.     TMOD=0x01;
  24.     TH0=-50000/256;
  25.     TL0=-50000%256;
  26.     EA=1;
  27.     ET0=1;
  28.     TR0=1;
  29.     while(1)
  30.     {}
  31. }
  32. }
  33. void timer0() interrupt 1
  34. { if(KEY3==0)            //第一次检测是否有键按下
  35.     {     TH0=-50000/256;
  36.     TL0=-50000%256;
  37.     DS_read_temperature();//读取温度
  38.     if((HI_alarm==1)||(LO_alarm==1))
  39.         alarm();
  40.     if(DS_OK==0)
  41.         return;//如果读取错误,返回从新再读
  42.     display_temperature();
  43.     buffer_line1[10]='S';//*********修改成STOP
  44.     buffer_line1[11]='T';
  45.     buffer_line1[12]='O';
  46.     buffer_line1[13]='P';
  47. PWM=0;MA=~MA;MB=~MB;
  48.     delay(1);
  49.     return;
  50. }
  51. else
  52. {
  53.     TH0=-50000/256;
  54.     TL0=-50000%256;
  55.     DS_read_temperature();//读取温度
  56.     if((HI_alarm==1)||(LO_alarm==1))
  57.         alarm();
  58.     if(DS_OK==0)
  59.         return;//如果读取失败,返回重新再读
  60.     display_temperature();
  61.     if(sign_temp<=50&&sign_temp>=15)
  62.     {
  63.         MA=1;
  64.         MB=0;
  65.         if(sign_temp<25) //等于45或65时停止转动,占空比0
  66.         {    buffer_line1[10]='S';//*********修改成STOP
  67.             buffer_line1[11]='T';
  68.             buffer_line1[12]='O';
  69.             buffer_line1[13]='P';
  70.             PWM=0;
  71.             delay(1);
  72.             return;
  73.         }
  74.           buffer_line1[10]='R';//*********修改成RUN
  75.         buffer_line1[11]='U';
  76.         buffer_line1[12]='N';
  77.         buffer_line1[13]=' ';
  78.          zhuan();
  79.     }
  80.         else
  81.         {
  82.             MA=0;
  83.             MB=0;
  84.         }
  85.     }
  86. }
  87.   void zhuan()
  88.   {
  89.     TMOD|= 0x10;   //设置定时计数器工作方式1为定时器
  90.     TH1 = 0xFE;
  91.     TL1 = 0x0C;             //--定时器赋初始值,12MHZ下定时0.5ms--//
  92.     ET1 = 1;      //开启定时器1中断
  93.     EA = 1;
  94.     TR1 = 1;     //开启定时器
  95.    
  96.         if(timer1>50)  //PWM周期为50*0.5ms
  97.         {
  98.             timer1=0;
  99.         }
  100.         if(timer1 < sign_temp)    //改变sign_temp这个值可以改变直流电机的速度
  101.         {
  102.             PWM=1;
  103.         }
  104.         else
  105.         {
  106.             PWM=0;
  107.         }
  108.     }

  109. void Time1(void) interrupt 3    //3为定时器1的中断号 1 定时器0的中断器 0外部中断 1 2外部中断 2 4串口中断
  110.     {
  111.     TH1 = 0xFE;  //重新赋初值
  112.     TL1 = 0x0C;
  113.     timer1++;   
  114.     }
复制代码
全部资料51hei下载地址:
温控风扇改进PWM.7z (91.23 KB, 下载次数: 106)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:585455 发表于 2020-9-2 13:35 | 显示全部楼层
剛剛看到另一個資料,兩個資料似乎是相近的,下載來研究。
回复

使用道具 举报

ID:471066 发表于 2020-9-2 15:08 | 显示全部楼层
这是个好东西啊!非常值得研究一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表