锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

6-基于51单片机的智能温控风扇设计(程序+实物图+原理图+参考论文)

时间:2023-08-25 08:37:00 三极管cy

资料编号:006

硬件组成:单片机 最小系统 数字管显示模块 温度采集模块 风扇驱动模块 按键模块

  • 1.采用DS18B20温度传感器测温,三极管驱动数码管显示温度和风扇档位;

  • 2.三个按钮:设置、加减。按下设置可以设置上限,然后按下设置下限,按钮可以加减调整;

  • 3.利用PWM调速时,当温度低于下限时,风扇不旋转。当温度在上下限之间时,1档旋转(风扇50%旋转),当温度超过上限时,全速旋转。

  • #include                  ////调用单片机头文件 #define uchar unsigned char  ///无符号字符型 宏定义        变量范围0~255 #define uint  unsigned int         ///无符号整形 宏定义        变量范围0~65535 #include   #define RdCommand 0x01 //定义ISP的操作命令  #define PrgCommand 0x02  #define EraseCommand 0x03   #define Error 1  #define Ok 0  #define WaitTime 0x01 //定义CPU的等待时间  sfr ISP_DATA=0xe2;        //Flash数据寄存器地址(E2h) sfr ISP_ADDRH=0xe3;         //Flash高字节寄存器地址(E3h) sfr ISP_ADDRL=0xe4;        //Flash低字节寄存器地址(E4h) sfr ISP_CMD=0xe5;  //Flash命令模式寄存器地址(E5h) sfr ISP_TRIG=0xe6;        //Flash命令触发寄存器地址(E6h) sfr ISP_CONTR=0xe7;        //ISP/IAP控制寄存器地址(E2h) sbit dula=P2^6;//U定器的锁定端                   000001111111     显示函数   11111100000 sbit wela=P2^7;//申明U锁定锁存器 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,  0x39,0x5e,0x79,0x71};                                           uchar num;///使用定时器 void ISP_IAP_enable(void);        /* ================ 打开 ISP,IAP 功能 ================= */ void ISP_IAP_disable(void);        /* =============== 关闭 ISP,IAP 功能 ================== */  void ISPgoon(void);                        /* ================ 公共触发代码 ==================== */ uchar byte_read(unsigned int byte_addr);   /* ========= 字节读 ============= */  void SectorErase(unsigned int sector_addr);        /* =========== 扇区擦除 ============ */  void byte_write(unsigned int byte_addr, unsigned char original_data);  /* ==== 字节写 ==== */ void display(); //000033333    显示函数  3333300000//  //数码管段选定义      0     1    2    3    4    5        6         7          8           9         uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,                                            0x60,0x25,0x39,0x26,0x31,0x71,0xff};         //断码 ///数字管位选择定义 uchar code smg_we[]={0xef,0xdf,0xbf,0x7f}; uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};         uchar smg_i = 3;    ///显示数码管的个位数 sbit dq   = P2^4;        //18b20 IO口的定义 sbit pwm = P2^3;   //蜂鸣器IO口定义  bit flag_lj_en;                 //按钮连加使能 bit flag_lj_3_en;         ///按钮连续三次使用  加的数量越大  uchar key_time,key_value;      //用做连加的中间变量 bit key_500ms  ;   uchar f_pwm_l ;          //越小越暗 uint temperature ;  // bit flag_300ms ; uchar menu_1,a_a ;       //菜单设计的变量 uint t_high ,t_low;           ////温度上下限报警值   /***********************1ms延时函数*****************************/ void delay_1ms(uint q) {         uint i,j;         for(i=0;i= smg_i)                 i = 0;                 P1 = 0xff;                         //消隐          P3 = smg_we[i];                          //位选         P1 = dis_smg[i];                 //段选                  }   /***********************18b20初始化函数*****************************/ void init_18b20() {         bit q;         dq = 1;                                ///拿高总线         delay_uint(1);            //15us         dq = 0;                                //给复位脉冲         delay_uint(80);                //750us         dq = 1;                                ///拿高总线 等待         delay_uint(10);                //110us         q = dq;                                //读取18b20初始化信号         delay_uint(20);                //200us         dq = 1;                                ///拿高总线 释放总线 }  /*************写18b20内的数据***************/ void write_18b20(uchar dat) {         uchar i;         for(i=0;i<8;i  )         {                                         ////写数据从低位开始                 dq = 0;                         ///把总线低写开始                  dq = dat & 0x01; //向18b20总线写数据                 delay_uint(5);         // 60us                 dq = 1;                         ///释放总线                 dat >>= 1;         }         }  /*************读取18b20内的数据***************/ uchar read_18b20() {         uchar i,value;         for(i=0;i<8;i  )         {                 dq = 0;                         ///把总线低读时间间隙开始                  value >>= 1;         ////阅读数据从低位开始                 dq = 1;                         ///释放总线                 if(dq == 1)                 //开始读写数据                          value |= 0x80;                 delay_uint(5);         //60us        至少读60次us的时间         }         return value;                 //返回数据 }

 百度云盘下载链接:https://pan.baidu.com/s/1efAWBmGF8Cy17uUznvJsaQ?pwd=217h 

 更多资源下载链接: 资料合集

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章