标题:
51单片机温度控制风扇转速程序,且温度在LCD1602上显示
[打印本页]
作者:
dayuuuu
时间:
2020-4-26 16:37
标题:
51单片机温度控制风扇转速程序,且温度在LCD1602上显示
原理图如下所示:
51hei图片20200426163419.png
(78.45 KB, 下载次数: 47)
下载附件
2020-4-26 16:34 上传
源程序如下所示:
#ifndef _DS18B20_H_
#define _DS18B20_H_
/*****************************************************/
/************???????????************************/
uchar DS_init()
{
uchar state;
DQ=1;
delay_1us(8);
DQ=0;
delay_1us(80); //??????????4800US
DQ=1;
delay_1us(8);
state=DQ;
delay(100); //???
return state; //??????1???????????
}
void DS_write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
if((dat&0x01)==0) //д?
{
DQ=0;
delay_1us(5);
DQ=1; //?????????γ?????
}
else //д0
{
DQ=0;
delay_1us(1);
DQ=1;
delay_1us(4);
}
dat>>=1;
}
}
uchar DS_read_byte()
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ==1)
dat|=0x80;
else
dat|=0x00;
delay_1us(30);
DQ=1;
}
return dat;
}
void DS_read_temperature()
{
if(DS_init()==1) //??????1?
DS_OK=0; //DS_ok=0???????
else
{
DS_init();
DS_write_byte(0xcc);//???????к?
DS_write_byte(0x44); //?????????
DS_init();
DS_write_byte(0xcc);
DS_write_byte(0xbe);//?????????
temp_value[1]=DS_read_byte(); //??д??λ??д??λ
temp_value[0]=DS_read_byte();
alarm_HL[0]=DS_read_byte(); //??????д??λ??д??λ
alarm_HL[1]=DS_read_byte();
DS_OK=1;
}
}
void set_alarm_HL()
{
DS_init();
DS_write_byte(0xcc);
DS_write_byte(0x4e);//д??RAM
DS_write_byte(alarm_HL[0]); //??д??λ
DS_write_byte(alarm_HL[1]);
DS_write_byte(0x7f);
DS_init();
DS_write_byte(0xcc);
DS_write_byte(0x48);//????????ROM
}
void display_temperature()
{
uchar flag=0;
if((temp_value[0]&0xf8)==0xf8)
{
flag=1;
temp_value[0]=~temp_value[0];
temp_value[1]=~temp_value[1]+1;
if(temp_value[1]==0x00)
temp_value[0]++;
}
display_digit[3]=df_tab[temp_value[1]&0x0f];//?С??
//?????
current=((temp_value[0]&0x07)<<4)|((temp_value[1]&0xf0)>>4);
//?ж?????
sign_temp=flag?-current:current;
LO_alarm=sign_temp<=alarm_HL[1]?1:0;
HI_alarm=sign_temp>=alarm_HL[0]?1:0;
/*********???????*************************************/
display_digit[0]=current/100;
display_digit[1]=current%100/10;
display_digit[2]=current%10;
/****?????*********************************************/
buffer_line2[8]=display_digit[0]+'0';
buffer_line2[9]=display_digit[1]+'0';
buffer_line2[10]=display_digit[2]+'0';
buffer_line2[11]='.';
buffer_line2[12]=display_digit[3]+'0';
/*********???θ?λ?????*******************************/
if(display_digit[0]==0)
buffer_line2[8]=' ';
if(display_digit[0]==0&&display_digit[1]==0)
buffer_line2[9]=' ';
if(flag==1)
{
if(buffer_line2[9]==' ')
buffer_line2[9]='-';
else
{
if(buffer_line2[8]==' ')
buffer_line2[8]='-';
else
buffer_line2[7]='-';
}
}
LCD_display(0x00,buffer_line1);
LCD_display(0x40,buffer_line2);
LCD_write_cmd(0x80+0x4d);
LCD_write_data(0x00);
LCD_write_cmd(0x80+0x4e);
LCD_write_data('C');
}
#endif
复制代码
具体见压缩包,欢迎交流与批评指正
温控风扇改进PWM Proteus仿真程序.7z
(65.02 KB, 下载次数: 133)
2022-11-24 17:12 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
leoli
时间:
2020-6-7 21:37
不错哦不错,效果ok
作者:
wgj666
时间:
2022-11-24 16:07
有人能讲解一下程序吗?
作者:
lin-LING
时间:
2025-2-18 22:25
运行LED没有显示是为啥,请教一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1