单片机智能温控风扇Proteus仿真图芯片解密
单片机源程序如下:
- 芯片解密#include <reg52.h>
- 芯片解密#include <intrins.h> //包含头文件
- 芯片解密#define uchar unsigned char
- 芯片解密#define uint unsigned int //宏定义
- ////////////////////
- sbit dj=P2^3;//电机控制端接口
- sbit DQ=P2^1;//温度传感器接口
- //////////按键接口/////////////////////////////////
- sbit key1=P3^5;//设置温度
- sbit key2=P3^6;//温度加
- sbit key3=P3^7;//温度减
- sbit key4=P2^5;//自动模式
- sbit key5=P2^7;//手动模式
- sbit dp=P1^5; //蜂鸣器
- //////////////////////////////////////////////////////
- sbit w1=P2^6;
- sbit w2=P2^4;
- sbit w3=P2^2;
- sbit w4=P2^0; //数码管的四个位
- /////共阴数码管段选//////////////////////////////////////////////
- uchar table[22]=
- {0x3F,0x06,0x5B,0x4F,0x66,
- 0x6D,0x7D,0x07,0x7F,0x6F,
- 0x77,0x7C,0x39,0x5E,0x79,0x71,
- 0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,灭,全亮,n 16-21
- uint wen_du; //温度变量
- uint shang,xia; //对比温度暂存变量
- uchar dang;//档位显示
- uchar flag,flag1,flag2;
- uchar d1,d2,d3;//显示数据暂存变量
- void delay(uint ms) //延时函数,大约延时25us
- {
- uchar x;
- for(ms;ms>0;ms--)
- for(x=10;x>0;x--);
- }
- /***********ds18b20延迟子函数(晶振12MHz )*******/
- void delay_18B20(uint i)
- {
- while(i--);
- }
- /**********ds18b20初始化函数**********************/
- void Init_DS18B20()
- {
- uchar x=0;
- DQ=1; //DQ复位
- delay_18B20(8); //稍做延时
- DQ=0; //单片机将DQ拉低
- delay_18B20(80); //精确延时 大于 480us
- DQ=1; //拉高总线
- delay_18B20(14);
- x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
- delay_18B20(20);
- }
- /***********ds18b20读一个字节**************/
- uchar ReadOneChar()
- {
- uchar i=0;
- uchar dat=0;
- for (i=8;i>0;i--)
- {
- DQ=0; // 给脉冲信号
- dat>>=1;
- DQ=1; // 给脉冲信号
- if(DQ)
- dat|=0x80;
- delay_18B20(4);
- }
- return(dat);
- }
- /*************ds18b20写一个字节****************/
- void WriteOneChar(uchar dat)
- {
- uchar i=0;
- for (i=8;i>0;i--)
- {
- DQ=0;
- DQ=dat&0x01;
- delay_18B20(5);
- DQ=1;
- dat>>=1;
- }
- }
- /**************读取ds18b20当前温度************/
- void ReadTemperature()
- {
- uchar a=0;
- uchar b=0;
- uchar t=0;
- Init_DS18B20();
- WriteOneChar(0xCC); // 跳过读序号列号的操作
- WriteOneChar(0x44); // 启动温度转换
- delay_18B20(100); // this message is wery important
- Init_DS18B20();
- WriteOneChar(0xCC); //跳过读序号列号的操作
- WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
- delay_18B20(100);
- a=ReadOneChar(); //读取温度值低位
- b=ReadOneChar(); //读取温度值高位
- wen_du=((b*256+a)>>4); //当前采集温度值除16得实际温度值
- }
- void display()//显示温度
- {
- w1=0;P0=~table[d1];delay(10); //第1位
- P0=~0x00;w1=1;delay(1);
-
- w2=0;P0=~table[16];delay(10);//第2位
- P0=~0x00;w2=1;delay(1);
- w3=0;P0=~table[d2]; delay(10);//第3位
- P0=~0x00;w3=1;delay(1);
- w4=0;P0=~table[d3];delay(10);//第4位
- P0=~0x00;w4=1;delay(1);
- }

芯片解密