×
单片机 > 单片机程序设计 > 详情

单片机红外感应的温控转速型风扇设计

发布时间:2021-11-19 发布时间:
|

单片机源程序如下:

#include


sbit IN1=P2^7;

sbit IN2=P2^6;

sbit ENA=P2^5;


bit flag1s=0;//1s定时标志

unsigned char T0RH=0;

unsigned char T0RL=0;


int temp;//读取到的当前温度值

unsigned char len;

int intT,decT;//温度值的整数和小数部分

unsigned char str[12];


void Compare();

void GetTemp();

void ConfigTimer0(unsigned int ms);

unsigned char IntToString(unsigned char *str,int dat);

extern bit Start18B20();

extern bit Get18B20Temp(int *temp);

extern void InitLcd1602();

extern void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str);


void main()

{

bit res;


EA=1;

ConfigTimer0(10);//T0定时10ms

Start18B20();//启动DS18B20

InitLcd1602();//初始化液晶


while(1)

{

if(flag1s)//每秒更新一次温度

{

flag1s=0;

res=Get18B20Temp(&temp);//读取当前温度

if(res)//读取成功时,刷新当前温度显示

{

GetTemp();

LcdShowStr(0,0,"Welcome to use");//显示字符及温度值

LcdShowStr(0,1,"Current T:");

LcdShowStr(10,1,str);

Compare();

}

else //读取失败时,提示错误信息

{

LcdShowStr(0,0,"error!");


}

Start18B20();//重新启动下一次转换

}

}

}

/*温度获取函数,获取当前环境温度值并保存在str数组中*/

void GetTemp()

{


intT=temp>>4;//分离出温度值整数部分

decT=temp &0x0F;//分离出温度值小数部分

len=IntToString(str,intT);//整数部分转换成字符串

str[len++]='.';

decT=(decT*10)/16;//二进制的小数部分转换为1位十进制位

str[len++]=decT+'0';//十进制小数位再转换为ASCII字符

while(len<6)//用空格补齐到6个字符长度

{

str[len++]=' ';

}

str[len++]='


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计