基于51单片机的温控智能电风扇讲解 联系客服

发布时间 : 星期日 文章基于51单片机的温控智能电风扇讲解更新完毕开始阅读b201f6790d22590102020740be1e650e52eacfea

叶惠芳2011330300302机电11(1)班

附录三

程序清单 1.主程序 void main(void) {

uint ltemp;

ltemp=read_temp(); //温度赋值 delay(2);

d=read_ds18b20_date(); //温度的低位 uchar g,d; //初始化温度 dianji=0; //初始化电机

read_temp(); //读取测温子程序,读取温度数值 delay(1000); //延时 while(1) {

int1=1;

int2=0; dianji=0;

g=read_ds18b20_date(); //温度的高位

ltemp=g; ltemp<<=8; ltemp=ltemp|d; t=ltemp*0.0625;

ltemp=t*10; shi=ltemp/100; //温度十位

ge=(ltemp0)/10; //温度个位

25

叶惠芳2011330300302机电11(1)班

keyscan(); //读取键盘子程序

delay(2);

deal(ltemp/10); //运行温度判断子程序,由温差设置占空比 dianjik(); //运行电机控制子程序 }

2.温度显示子程序

void ledshow(uchar a4,uchar a3,uchar a1,uchar a0) {

dispbuf[0]=a0;

dispbuf[1]=a1; dispbuf[3]=a3; }

dispbuf[4]=a4;

P2=0xff;

P2=0xff;

//温度传感器个位

//按键十位

P2=0xff; //按键个位 P0=dispcode[dispbuf[0]]; P2=dispbitcode[5]; delayus(1);

P0=dispcode[dispbuf[1]]; P2=dispbitcode[4]; delayus(1);

P0=dispcode[dispbuf[3]]; P2=dispbitcode[1]; delayus(1);

26

叶惠芳2011330300302机电11(1)班

}

P2=0xff; //第一位,传感器十位

P0=dispcode[dispbuf[4]]; P2=dispbitcode[0]; delayus(1);

3.DS18B20子程序

void clean_ds18b20() //初始化 {

dq=0; //再讲数据线从高拉低,要求保持480~960us

delayus(90); //略微延时 以向ds发出一持续480~960us的低电平复位脉冲

dq=1; //将数据线拉高

delayus(3); //延时(释放总线后需等待15~60us让ds输出存在脉冲)

}

bit readbit() //读取一个位 { uchar i; bit dat; dq=0; i++; dq=1; i++; i++; dat=dq; delayus(8); return(dat); }

27

叶惠芳2011330300302机电11(1)班

uchar read_ds18b20_date() {

//读取一个字节

uchar j,i,dat; //存储读取的一个字节数据 dat=0; }

void write_ds18b20_date(uchar dat) { uchar i;

uchar j; bit testb; for(j=1;j<=8;j++) {

testb=dat&0x01; dat=dat>>1;

if(testb) //写1 { }

dq=0; //拉低

i++; //延时至少1us的恢复时间 i++; dq=1;

delayus(8); //延时保持至少60us

//写一个字节

for(i=1;i<=8;i++) {

j=readbit(); dat=(j<<7|dat>>1); }

return(dat);

28