• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

吼吼吼!!!土匪出山了,蛋痛做了个35w反激+USB+bost_buck_单片机控制的遥控风扇系统。

好无聊的说www,,, 无聊么,就做点东西玩,以度过这个假大学的时光, 喏,夏天寝室热死了,感觉床头好像还差点什么东西www.总感觉缺了东西www. 吼吼,妈的,缺了个风扇用,热死我了。 于是_开始各种折腾,= 到处拆零件,穷逼就是这样练成的,渍渍渍 不说废话了,步入正题 1. 反激35w供电/充电✔ 2.太阳能稳压buck充电✔ 3.USBbost充电✔ 4.手动调风/自动调风✔ 先忙一会,广告之后,,,,,,图纸更精彩 5.
全部回复(27)
正序查看
倒序查看
2017-06-26 15:17
呦嘿~~~~~
0
回复
2017-06-27 19:17
@电源网-璐璐
呦嘿~~~~~
哈哈露露
0
回复
2017-06-27 19:17
持续更新了。。。。。。。。。。
0
回复
2017-06-27 19:18
@林浩7856
持续更新了。。。。。。。。。。

1.市电整流及EMI

图纸设计

 

 

 

                             仿真图1-1

©L1 L2 C1 C2构成EMI电路,消除干扰杂波信号,及降低电路信号对市电的干扰.提高抗干扰能力。  设计功率为45W 较小,因此L选用100uh-10mh左右(根据最大干扰来决定),C选用0.1uf-1uf左右.

 

如图1-1; 当电路涌出一个600V的尖峰干扰信号,这时 LC将信号阻止,防止勿扰市电。

 

©加入NTC,开机限浪涌,防止开机瞬间电流过大,对电路的冲击。

©整流管的选取.

功率在45W,按照效率80,输入电流在0.3A以下;选用2A的整流桥.;

 

©  C3的选取

窄电压输入的一般用1U/W,这里采用47U;R1用于C3快速放电(关机时)

 

 

 

2.振荡-反馈-输出

 

 

原理:使用UC3845作为pwm芯片,控制MOS, 驱动高频变压器工作.

 

设计图1-2

 

 

此图作为参考;实际使用3845;

 

RT和RW实际只用一个;作为启动电阻,给C5充电,提供给7脚启动电压;

这里保障启动时间在2S以下,RT设置为100K (RW去掉);

 

4-8脚频率控制;

由于使用磁芯体积较小,因此这里提高工作频率,弥补功率,设定为180K;

3845频率=1.8/(RTxCT)

因此R6 :1.2K;C:332;

 

3脚-电流保护端口,高于1V,3845限制输出;电源功率限制在60W,R10设置为0.68R;

加入C9,避免频繁保护,考虑到保护时间问题,这里设置为100P,保证保护及时;

 

VT1的选取:

市电整流电压在300v左右,功率45-60W,选择耐压高于600v(反激尖峰=电源1-2倍),耐流选择7A(国产标称7A,实际使用在1A以下较为合理);高压MOS,内阻大,发热大;因此必须加散热片;这里选取K4101;

 

R5 C6的计算;

1脚位补偿端口,2脚为电压比较端口,为了保障输出电压能自动连续可调,将R5设定为100K;C6设定为101;

0
回复
2017-06-27 19:22
@林浩7856
1.市电整流及EMI图纸设计[图片]                                仿真图1-1©L1L2C1C2构成EMI电路,消除干扰杂波信号,及降低电路信号对市电的干扰.提高抗干扰能力。 设计功率为45W较小,因此L选用100uh-10mh左右(根据最大干扰来决定),C选用0.1uf-1uf左右. 如图1-1;当电路涌出一个600V的尖峰干扰信号,这时LC将信号阻止,防止勿扰市电。 ©加入NTC,开机限浪涌,防止开机瞬间电流过大,对电路的冲击。©整流管的选取.功率在45W,按照效率80,输入电流在0.3A以下;选用2A的整流桥.; ©  C3的选取窄电压输入的一般用1U/W,这里采用47U;R1用于C3快速放电(关机时)   2.振荡-反馈-输出  原理:使用UC3845作为pwm芯片,控制MOS,驱动高频变压器工作. 设计图1-2 [图片] 此图作为参考;实际使用3845; RT和RW实际只用一个;作为启动电阻,给C5充电,提供给7脚启动电压;这里保障启动时间在2S以下,RT设置为100K(RW去掉); 4-8脚频率控制;由于使用磁芯体积较小,因此这里提高工作频率,弥补功率,设定为180K;3845频率=1.8/(RTxCT)因此R6:1.2K;C:332; 3脚-电流保护端口,高于1V,3845限制输出;电源功率限制在60W,R10设置为0.68R;加入C9,避免频繁保护,考虑到保护时间问题,这里设置为100P,保证保护及时; VT1的选取:市电整流电压在300v左右,功率45-60W,选择耐压高于600v(反激尖峰=电源1-2倍),耐流选择7A(国产标称7A,实际使用在1A以下较为合理);高压MOS,内阻大,发热大;因此必须加散热片;这里选取K4101; R5C6的计算;1脚位补偿端口,2脚为电压比较端口,为了保障输出电压能自动连续可调,将R5设定为100K;C6设定为101;

额  怎么看不到图片

无聊 弄的开关机电路

好吧 就一起上架了图片了嘛

0
回复
2017-06-27 19:22
@林浩7856
额 怎么看不到图片[图片]无聊弄的开关机电路好吧就一起上架了图片了嘛

哎哎哎哎 55调速了

0
回复
2017-06-27 19:23
@林浩7856
[图片]哎哎哎哎55调速了

保护电领域 电流保护

0
回复
2017-06-27 19:24
@林浩7856
[图片]保护电领域电流保护

反击变压器绕制

0
回复
林浩7856
LV.5
10
2017-06-27 19:25
@林浩7856
[图片]反击变压器绕制

哈哈  拆破烂的35W反激电源  话说MOS有些发烧。。。。

凑合用了  

最近太忙了 。。。。。将就了

0
回复
林浩7856
LV.5
11
2017-06-27 19:26
@林浩7856
[图片]哈哈 拆破烂的35W反激电源 话说MOS有些发烧。。。。凑合用了 最近太忙了。。。。。将就了

看到没 有电量显示功能  -----不过现在已经被单片机给取代了  哈哈哈哈  用的数码管显示电量 

0
回复
林浩7856
LV.5
12
2017-06-27 19:28
@林浩7856
[图片]看到没有电量显示功能 -----不过现在已经被单片机给取代了 哈哈哈哈 用的数码管显示电量 

看到没 两个220的管子 没错就是 4016---话说效率真的甩2596一丢丢;;

0
回复
林浩7856
LV.5
13
2017-06-27 19:29
@林浩7856
[图片]看到没两个220的管子没错就是4016---话说效率真的甩2596一丢丢;;

呵呵哒  效率测试呢一下    4016还是挺不错的  虽然是捡垃圾货

输入21.6---0.71A

输出13v 1.06A

0
回复
林浩7856
LV.5
14
2017-06-27 19:30
@林浩7856
[图片]呵呵哒 效率测试呢一下  4016还是挺不错的 虽然是捡垃圾货输入21.6---0.71A输出13v1.06A[图片]

吼吼 捡垃圾单片机玩玩=============用的mp3屏幕显示

0
回复
林浩7856
LV.5
15
2017-06-27 19:31
@林浩7856
[图片]吼吼捡垃圾单片机玩玩=============用的mp3屏幕显示

看到mp3的屏幕  显示还策和把   显示目前的温度 和功能档位-------啊   加的遥控=

0
回复
林浩7856
LV.5
16
2017-06-27 19:33
@林浩7856
[图片]看到mp3的屏幕 显示还策和把 显示目前的温度和功能档位-------啊 加的遥控=
		#include
#include			 //包含头文件
#define uchar unsigned char
#define uint unsigned int
unsigned char x=15;	
unsigned char y=1;
uchar z=22;
uchar m=0;

	 //宏定义 数模控制数
////////////////////
sbit dj=P1^0;//电机控制端接口
sbit DQ=P2^2;//温度传感器接口
//////////按键接口/////////////////////////////////
sbit key1=P3^2;//设置温度
sbit key2=P3^3;//温度加
sbit key3=P3^5;//温度减
sbit key4=P3^4;//档位控制
sbit key5=P3^7;//切换数模控制、、,
sbit w5=P2^3;//////////////////////////////////////////////////////
sbit w1=P2^4;  //数码管四个位
sbit w2=P2^5;
sbit w3=P2^6;
 sbit led2=P1^2;//呼吸灯
unsigned char id=0;
sbit JD=P1^3;//kongzhi jidianqi 	 继电器控制
sbit w4=P2^7;
//附加显示			  //数码管的四个位
/////共阴数码管段选//////////////////////////////////////////////
uchar table[26]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,
0x40,0x38,0x76,0x00,0xff,0x37,0x26,0x25,0x27,0x65};//'-',L,H,灭,全亮,n	 16-21
uint wen_du;						//温度变量  
uint shang,xia; //对比温度暂存变量
uchar dang;//档位显示
uchar flag;
uchar d1,d2,d3,d4;
uchar i;//显示数据暂存变量
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(85); //第1位
	P0=0x00;w1=1;delay(1);
	 
	w2=0;P0=table[x];delay(85);//第2位
	P0=0x00;w2=1;delay(1);

	w3=0;P0=table[d2]; delay(85);//第3位
	P0=0x00;w3=1;delay(1);

	w4=0;P0=table[d3];delay(85);//第4位
	P0=0x00;w4=1;delay(1);

	w5=0;P0=table[d4];delay(85);//第5位
	P0=0x00;w5=1;delay(1);
}



void zi_keyscan()//自动模式按键扫描函数
{
	
/*	if(key1==0)							  //设置键按下
	{
		delay(10);						  //延时去抖
		if(key1==0)flag=1;				  //再次判断按键,按下的话进入设置状态
		while(key1==0);//松手检测		  //按键释放
	}

  */

   	  	if(key4==0)							  //设置键按下
	{
		delay(10);						  //延时去抖
		if(key4==0)
		
		{ id++;x=16;
		dang=id; 
		    
		  }		  //再次判断按键,按下的话进入设置状态
		while(key4==0);//松手检测		  //按键释放
	}




	   	  	if(key5==0)							  //设置键按下	设置数模控制。
	{
		delay(10);
								  //延时去抖
		if(key5==0)
		
		{ m++;x=16;
		dang=x;
		        
		  }		  //再次判断按键,按下的话进入设置状态
		while(key5==0);//松手检测		  //按键释放
	}
	  

	   if(id==0)
  {
  dj=0;	z=22;
  }

	  if(m==1)
	  {
	   
	  JD=1;z=25;x=16; dang=16;	
	   
	  }

	if(m==2)
	{
	
	m=0; JD=0;

	}


		
   if(id==6)
   {
   	  	x=16; dang=15;

   }
if (id==7)
  {	
	id=0;x=15; JD=0; z=22; dj=0;
  dang=id;
 
 
	
	}


	
 //


/*	while(flag==1)						  //进入设置上限状态
	{
		d1=18;d2=shang/10;d3=shang%10;d4=z;	  //显示字母H 和上限温度值
		display();						  //调用显示函数
		if(key1==0)						  //判断设置键是否按下
		{
			delay(10);					  //延时去抖
			if(key1==0)flag=2;			  //按键按下,进入设置下限模式
			while(key1==0);//松手检测
		}
		if(key2==0)						  //加键按下
		{
			delay(10);					  //延时去抖
			if(key2==0)					  //加键按下
			{
				shang+=5;				  //上限加5
				if(shang>=100)shang=100;  //上限最大加到100
			}while(key2==0);//松手检测
		}
		if(key3==0)						  //减键按下
		{
			delay(10);					  //延时去抖
			if(key3==0)					  //减键按下
			{
				shang-=1;				  //上限减1
				if(shang<=10)shang=10;	  //上限最小减到10
			}while(key3==0);//松手检测
		}		
	}

*/

/*	while(flag==2)						  //设置下限
	{
		d1=17;d2=xia/10;d3=xia%10;		  //显示字母L 显示下限温度值
		display();						  //以下注释同上
		if(key1==0)
		{
			delay(20);
			if(key1==0)flag=0;
			while(key1==0);//松手检测
		}
		if(key2==0)
		{
			delay(10);
			if(key2==0)
			{
				xia+=5;
				if(xia>=95)xia=95;	
			}while(key2==0);//松手检测
		}
		if(key3==0)
		{
			delay(10);
			if(key3==0)
			{
				xia-=1;
				if(xia<=0)xia=0;	
		
		
	}while(key3==0);//松手检测
	
		}		
	} */
}


void zi_dong()//自动温控 模式选择
{
	uchar i;
	d1=dang;d2=wen_du/10;d3=wen_du%10;d4=z;	  	//显示档位,显示当前温度值
		display();    
	zi_keyscan();   //按键扫描函数
	
     if((id!=6)&&(wen_du>xia)&&(id!=7))//温度大于下限,小于上限  
	{	dang=id;z=23;											//档位置3
		for(i=0;i<3;i++)   {dj=0;display();	zi_keyscan(); }	//PWM通过延时得到
		for(i=0;ixia)&&(wen_du>xia))//温度大于下限,小于上限  1挡
	{	dang=6;	 z=24;										//档位置1
		for(i=0;i<3;i++)   {dj=0;display();	zi_keyscan(); }	//PWM通过延时得到
		for(i=0;i<1;i++)   {dj=1;display();zi_keyscan(); }		
	}	


   if(wen_du>=shang)				 //当温度高于下线20度  不启动风扇 当大于20度 小于28度  起中档  当大于28度 开全挡
   { 
   
   dj=1;led2=1;
   }
}	 
	 
	         //温度自动控制;

}



void main()		  //主函数
{

	uchar j;

	dj=0;JD=0;			  //风扇开
	shang=30;  //初始上线等于30度,大于三十 全7速转。
	xia=20;		  //初始上下限值
	for(j=0;j<80;j++)	  //先读取温度值,防止开机显示85
	ReadTemperature();
	   
	while(1)			  //进入while循环
	{	
	  
		ReadTemperature();	//读取温度值
		for(j=0;j<20;j++)
		
		zi_dong();		//自动/手动模式
	
	}
}










凑合着看吧  要考试了    闲人要去应付考试-----------
 
0
回复
林浩7856
LV.5
17
2017-06-27 19:34
@林浩7856
#include#include//包含头文件#defineucharunsignedchar#defineuintunsignedintunsignedcharx=15;unsignedchary=1;ucharz=22;ucharm=0;//宏定义数模控制数////////////////////sbitdj=P1^0;//电机控制端接口sbitDQ=P2^2;//温度传感器接口//////////按键接口/////////////////////////////////sbitkey1=P3^2;//设置温度sbitkey2=P3^3;//温度加sbitkey3=P3^5;//温度减sbitkey4=P3^4;//档位控制sbitkey5=P3^7;//切换数模控制、、,sbitw5=P2^3;//////////////////////////////////////////////////////sbitw1=P2^4;//数码管四个位sbitw2=P2^5;sbitw3=P2^6;sbitled2=P1^2;//呼吸灯unsignedcharid=0;sbitJD=P1^3;//kongzhijidianqi继电器控制sbitw4=P2^7;//附加显示//数码管的四个位/////共阴数码管段选//////////////////////////////////////////////uchartable[26]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x38,0x76,0x00,0xff,0x37,0x26,0x25,0x27,0x65};//'-',L,H,灭,全亮,n16-21uintwen_du;//温度变量uintshang,xia;//对比温度暂存变量uchardang;//档位显示ucharflag;uchard1,d2,d3,d4;uchari;//显示数据暂存变量voiddelay(uintms)//延时函数,大约延时25us{ucharx;for(ms;ms>0;ms--)for(x=10;x>0;x--);}/***********ds18b20延迟子函数(晶振12MHz)*******/voiddelay_18B20(uinti){while(i--);}/**********ds18b20初始化函数**********************/voidInit_DS18B20(){ucharx=0;DQ=1;//DQ复位delay_18B20(8);//稍做延时DQ=0;//单片机将DQ拉低delay_18B20(80);//精确延时大于480usDQ=1;//拉高总线delay_18B20(14);x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/*ds18b20读一个字节*/ucharReadOneChar(){uchari=0;uchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*ds18b20写一个字节***/voidWriteOneChar(uchardat){uchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay_18B20(5);DQ=1;dat>>=1;}}/**读取ds18b20当前温度**/voidReadTemperature(){uchara=0;ucharb=0;uchart=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换delay_18B20(100);//thismessageisweryimportantInit_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar();//读取温度值低位b=ReadOneChar();//读取温度值高位wen_du=((b*256+a)>>4);//当前采集温度值除16得实际温度值}voiddisplay()//显示温度{w1=0;P0=table[d1];delay(85);//第1位P0=0x00;w1=1;delay(1);w2=0;P0=table[x];delay(85);//第2位P0=0x00;w2=1;delay(1);w3=0;P0=table[d2];delay(85);//第3位P0=0x00;w3=1;delay(1);w4=0;P0=table[d3];delay(85);//第4位P0=0x00;w4=1;delay(1);w5=0;P0=table[d4];delay(85);//第5位P0=0x00;w5=1;delay(1);}voidzi_keyscan()//自动模式按键扫描函数{/*if(key1==0)//设置键按下{delay(10);//延时去抖if(key1==0)flag=1;//再次判断按键,按下的话进入设置状态while(key1==0);//松手检测//按键释放}*/if(key4==0)//设置键按下{delay(10);//延时去抖if(key4==0){id++;x=16;dang=id;}//再次判断按键,按下的话进入设置状态while(key4==0);//松手检测//按键释放}if(key5==0)//设置键按下设置数模控制。{delay(10);//延时去抖if(key5==0){m++;x=16;dang=x;}//再次判断按键,按下的话进入设置状态while(key5==0);//松手检测//按键释放}if(id==0){dj=0;z=22;}if(m==1){JD=1;z=25;x=16;dang=16;}if(m==2){m=0;JD=0;}if(id==6){x=16;dang=15;}if(id==7){id=0;x=15;JD=0;z=22;dj=0;dang=id;}///*while(flag==1)//进入设置上限状态{d1=18;d2=shang/10;d3=shang%10;d4=z;//显示字母H和上限温度值display();//调用显示函数if(key1==0)//判断设置键是否按下{delay(10);//延时去抖if(key1==0)flag=2;//按键按下,进入设置下限模式while(key1==0);//松手检测}if(key2==0)//加键按下{delay(10);//延时去抖if(key2==0)//加键按下{shang+=5;//上限加5if(shang>=100)shang=100;//上限最大加到100}while(key2==0);//松手检测}if(key3==0)//减键按下{delay(10);//延时去抖if(key3==0)//减键按下{shang-=1;//上限减1if(shang=95)xia=95;}while(key2==0);//松手检测}if(key3==0){delay(10);if(key3==0){xia-=1;if(xiaxia)&&(id!=7))//温度大于下限,小于上限{dang=id;z=23;//档位置3for(i=0;ixia))//温度大于下限,小于上限1挡{dang=6;z=24;//档位置1for(i=0;i
有USB功能   啊啊啊4016的强大输出
0
回复
林浩7856
LV.5
18
2017-06-27 19:37
@林浩7856
有USB功能 啊啊啊4016的强大输出

整机了 单晶硅和主板 

风扇在一个角落里 哈哈  应为今天不热

0
回复
林浩7856
LV.5
19
2017-06-27 19:38
@林浩7856
[图片]整机了单晶硅和主板 风扇在一个角落里哈哈 应为今天不热

哎哎哎  -------发图发的好乱的说-----------应为马上要考试了 我考试去了 拜拜了   大家先凑合看吧--------考试完我就就可以回家了

0
回复
林浩7856
LV.5
20
2017-06-28 21:25
@林浩7856
哎哎哎 -------发图发的好乱的说-----------应为马上要考试了我考试去了拜拜了 大家先凑合看吧--------考试完我就就可以回家了

0
回复
2017-07-06 11:51
@林浩7856
[图片]
能发源程序的我都顶
0
回复
林浩7856
LV.5
22
2017-07-06 15:43
@心如刀割
能发源程序的我都顶
哈哈
0
回复
lxgmvp
LV.7
23
2017-07-10 14:54
动手能力不错,顶一个
0
回复
林浩7856
LV.5
24
2017-07-10 16:54
@lxgmvp
动手能力不错,顶一个
啊   好无聊的说  还好是一等奖 
0
回复
悟今生
LV.5
25
2017-07-15 13:56
@林浩7856
啊  好无聊的说 还好是一等奖 
看着感觉是兴趣爱好,能做出来真不错
0
回复
林浩7856
LV.5
26
2017-07-15 14:01
@悟今生
看着感觉是兴趣爱好,能做出来真不错
哈哈   无聊 拆点破家电的零件 做点东西玩
0
回复
dxsmail
LV.11
27
2017-07-21 16:29
@林浩7856
#include#include//包含头文件#defineucharunsignedchar#defineuintunsignedintunsignedcharx=15;unsignedchary=1;ucharz=22;ucharm=0;//宏定义数模控制数////////////////////sbitdj=P1^0;//电机控制端接口sbitDQ=P2^2;//温度传感器接口//////////按键接口/////////////////////////////////sbitkey1=P3^2;//设置温度sbitkey2=P3^3;//温度加sbitkey3=P3^5;//温度减sbitkey4=P3^4;//档位控制sbitkey5=P3^7;//切换数模控制、、,sbitw5=P2^3;//////////////////////////////////////////////////////sbitw1=P2^4;//数码管四个位sbitw2=P2^5;sbitw3=P2^6;sbitled2=P1^2;//呼吸灯unsignedcharid=0;sbitJD=P1^3;//kongzhijidianqi继电器控制sbitw4=P2^7;//附加显示//数码管的四个位/////共阴数码管段选//////////////////////////////////////////////uchartable[26]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x38,0x76,0x00,0xff,0x37,0x26,0x25,0x27,0x65};//'-',L,H,灭,全亮,n16-21uintwen_du;//温度变量uintshang,xia;//对比温度暂存变量uchardang;//档位显示ucharflag;uchard1,d2,d3,d4;uchari;//显示数据暂存变量voiddelay(uintms)//延时函数,大约延时25us{ucharx;for(ms;ms>0;ms--)for(x=10;x>0;x--);}/***********ds18b20延迟子函数(晶振12MHz)*******/voiddelay_18B20(uinti){while(i--);}/**********ds18b20初始化函数**********************/voidInit_DS18B20(){ucharx=0;DQ=1;//DQ复位delay_18B20(8);//稍做延时DQ=0;//单片机将DQ拉低delay_18B20(80);//精确延时大于480usDQ=1;//拉高总线delay_18B20(14);x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/*ds18b20读一个字节*/ucharReadOneChar(){uchari=0;uchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*ds18b20写一个字节***/voidWriteOneChar(uchardat){uchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay_18B20(5);DQ=1;dat>>=1;}}/**读取ds18b20当前温度**/voidReadTemperature(){uchara=0;ucharb=0;uchart=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换delay_18B20(100);//thismessageisweryimportantInit_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar();//读取温度值低位b=ReadOneChar();//读取温度值高位wen_du=((b*256+a)>>4);//当前采集温度值除16得实际温度值}voiddisplay()//显示温度{w1=0;P0=table[d1];delay(85);//第1位P0=0x00;w1=1;delay(1);w2=0;P0=table[x];delay(85);//第2位P0=0x00;w2=1;delay(1);w3=0;P0=table[d2];delay(85);//第3位P0=0x00;w3=1;delay(1);w4=0;P0=table[d3];delay(85);//第4位P0=0x00;w4=1;delay(1);w5=0;P0=table[d4];delay(85);//第5位P0=0x00;w5=1;delay(1);}voidzi_keyscan()//自动模式按键扫描函数{/*if(key1==0)//设置键按下{delay(10);//延时去抖if(key1==0)flag=1;//再次判断按键,按下的话进入设置状态while(key1==0);//松手检测//按键释放}*/if(key4==0)//设置键按下{delay(10);//延时去抖if(key4==0){id++;x=16;dang=id;}//再次判断按键,按下的话进入设置状态while(key4==0);//松手检测//按键释放}if(key5==0)//设置键按下设置数模控制。{delay(10);//延时去抖if(key5==0){m++;x=16;dang=x;}//再次判断按键,按下的话进入设置状态while(key5==0);//松手检测//按键释放}if(id==0){dj=0;z=22;}if(m==1){JD=1;z=25;x=16;dang=16;}if(m==2){m=0;JD=0;}if(id==6){x=16;dang=15;}if(id==7){id=0;x=15;JD=0;z=22;dj=0;dang=id;}///*while(flag==1)//进入设置上限状态{d1=18;d2=shang/10;d3=shang%10;d4=z;//显示字母H和上限温度值display();//调用显示函数if(key1==0)//判断设置键是否按下{delay(10);//延时去抖if(key1==0)flag=2;//按键按下,进入设置下限模式while(key1==0);//松手检测}if(key2==0)//加键按下{delay(10);//延时去抖if(key2==0)//加键按下{shang+=5;//上限加5if(shang>=100)shang=100;//上限最大加到100}while(key2==0);//松手检测}if(key3==0)//减键按下{delay(10);//延时去抖if(key3==0)//减键按下{shang-=1;//上限减1if(shang=95)xia=95;}while(key2==0);//松手检测}if(key3==0){delay(10);if(key3==0){xia-=1;if(xiaxia)&&(id!=7))//温度大于下限,小于上限{dang=id;z=23;//档位置3for(i=0;ixia))//温度大于下限,小于上限1挡{dang=6;z=24;//档位置1for(i=0;i
居然还有程序。。。很不错。。。。
0
回复
2017-07-28 10:00
膜拜膜拜
0
回复