风扇调速系统程序.docx

上传人:b****6 文档编号:4690920 上传时间:2022-12-07 格式:DOCX 页数:12 大小:16.15KB
下载 相关 举报
风扇调速系统程序.docx_第1页
第1页 / 共12页
风扇调速系统程序.docx_第2页
第2页 / 共12页
风扇调速系统程序.docx_第3页
第3页 / 共12页
风扇调速系统程序.docx_第4页
第4页 / 共12页
风扇调速系统程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

风扇调速系统程序.docx

《风扇调速系统程序.docx》由会员分享,可在线阅读,更多相关《风扇调速系统程序.docx(12页珍藏版)》请在冰豆网上搜索。

风扇调速系统程序.docx

风扇调速系统程序

#include

codeunsignedcharseg7code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x40};//显示段码

sbitTMDAT=P3^1;//DS18B20的数据输入/输出脚DQ,根据情况设定

sbitP2_7=P2^7;

sbitP2_6=P2^6;

sbitP2_5=P2^5;

sbitjia=P2^4;

sbitjian=P2^3;

sbitdi=P2^2;

sbitzh=P2^1;

sbitga=P2^0;

j=0;

unsignedintsdata;//测量到的温度的整数部分

//unsignedcharxiaoshu1;//小数第一位

//unsignedcharxiaoshu2;//小数第二位

//unsignedcharxiaoshu;//两位小数

bitfg=1;//温度正负标志

//////////*显示延时程序*///////////////

voidDelay(unsignedinttc)

{while(tc!

=0)

{unsignedinti;

for(i=0;i<80;i++);

tc--;}

}

////////////延时部分///////////////

voidyanshi(unsignedintcount)

{

unsignedchari;

while(count--)

{for(i=0;i<115;i++);}

}

voiddel()/*延时1秒*/

{

unsignedchari,j,k;

for(i=20;i>0;i--)

for(j=100;j>0;j--)

for(k=248;k>0;k--);

}

/////////////发送复位///////////////

voidfashong(void)

{

unsignedchari;

TMDAT=0;for(i=0;i<103;i++);

TMDAT=1;for(i=0;i<4;i++);

}

bittmrbit(void)//读一位//

{

unsignedinti;

bitdat;

TMDAT=0;

i++;

TMDAT=1;

i++;i++;//微量延时//

dat=TMDAT;

for(i=0;i<8;i++);

return(dat);

}

unsignedchartmrbyte(void)//读一个字节

{

unsignedchari,j,dat;

dat=0;

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

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

return(dat);

}

voidtmwbyte(unsignedchardat)//写一个字节

{

unsignedcharj,i;

bittestb;

for(j=1;j<=8;j++)

{testb=dat&0x01;

dat=dat>>1;

if(testb)

{TMDAT=0;//写0

i++;i++;

TMDAT=1;

for(i=0;i<8;i++);}

else

{TMDAT=0;//写0

for(i=0;i<8;i++);

TMDAT=1;

i++;i++;}

}

}

voidtmstart(void)//发送ds1820开始转换

{

fashong();//复位

yanshi

(1);//延时

tmwbyte(0xcc);//跳过序列号命令

tmwbyte(0x44);//发转换命令44H,

}

voidtmrtemp(void)//读取温度

{

unsignedchara,b;

fashong();//复位

yanshi

(1);//延时

tmwbyte(0xcc);//跳过序列号命令

tmwbyte(0xbe);//发送读取命令

a=tmrbyte();//读取低位温度

b=tmrbyte();//读取高位温度

if(b>0x7f)//最高位为1时温度是负

{a=~a;b=~b+1;//补码转换,取反加一

fg=0;//读取温度为负时fg=0

}

sdata=a/16+b*16;//整数部分

//xiaoshu1=(a&0x0f)*10/16;//小数第一位

//xiaoshu2=(a&0x0f)*100/16%10;//小数

//xiaoshu=xiaoshu1*10+xiaoshu2;//小数

}

voidDS18B20PRO(void)

{

tmstart();

//yanshi(5);//如果是不断地读取的话可以不延

tmrtemp();//读取温度,执行完毕温度将存于

}

voidLed()

{

if(fg==1)//温度为正时显示的数据

{

P2_7=0;

P0=seg7code[sdata/10];//输出十位

Delay(8);P2=P2|0xf0;

P2_6=0;

P0=seg7code[sdata%10]|0x80;//输出个位

Delay(8);P2=P2|0xf0;

P2_5=0;

P0=seg7code[j%10]|0x80;//输出延时位

Delay(4);P2=P2|0xf0;

}

}

main()

{

fg=1;

while

(1)

{

if(jia==0)

{Delay(200);j++;}

if(jian==0)

{Delay(200);j--;}

DS18B20PRO();

Led();

if(di==0)

{Delay(200);P1=0xfe;}

if(zh==0)

{Delay(200);P1=0xfd;}

if(ga==0)

{Delay(200);P1=0xfb;}

}

}

风扇调速最终程序

#include

codeunsignedcharseg7code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x40};//显示段码

sbitTMDAT=P3^1;//DS18B20的数据输入/输出脚DQ,根据情况设定

sbitP2_7=P2^7;

sbitP2_6=P2^6;

sbitP2_5=P2^5;

sbitjia=P2^4;

sbitjian=P2^3;

sbitdi=P2^2;

sbitzh=P2^1;

sbitga=P2^0;

unsignedintz=0;

sbitq=P1^7;

unsignedintsdata;//测量到的温度的整数部分

//unsignedcharxiaoshu1;//小数第一位

//unsignedcharxiaoshu2;//小数第二位

//unsignedcharxiaoshu;//两位小数

bitfg=1;//温度正负标志

//////////*显示延时程序*///////////////

voidDelay(unsignedinttc)

{while(tc!

=0)

{unsignedinti;

for(i=0;i<80;i++);

tc--;}

}

////////////延时部分///////////////

voidyanshi(unsignedintcount)

{

unsignedchari;

while(count--)

{for(i=0;i<115;i++);}

}

/////////////发送复位///////////////

voidfashong(void)

{

unsignedchari;

TMDAT=0;for(i=0;i<103;i++);

TMDAT=1;for(i=0;i<4;i++);

}

bittmrbit(void)//读一位//

{

unsignedinti;

bitdat;

TMDAT=0;

i++;

TMDAT=1;

i++;i++;//微量延时//

dat=TMDAT;

for(i=0;i<8;i++);

return(dat);

}

unsignedchartmrbyte(void)//读一个字节

{

unsignedchari,j,dat;

dat=0;

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

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

return(dat);

}

voidtmwbyte(unsignedchardat)//写一个字节

{

unsignedcharj,i;

bittestb;

for(j=1;j<=8;j++)

{testb=dat&0x01;

dat=dat>>1;

if(testb)

{TMDAT=0;//写0

i++;i++;

TMDAT=1;

for(i=0;i<8;i++);}

else

{TMDAT=0;//写0

for(i=0;i<8;i++);

TMDAT=1;

i++;i++;}

}

}

voidtmstart(void)//发送ds1820开始转换

{

fashong();//复位

yanshi

(1);//延时

tmwbyte(0xcc);//跳过序列号命令

tmwbyte(0x44);//发转换命令44H,

}

voidtmrtemp(void)//读取温度

{

unsignedchara,b;

fashong();//复位

yanshi

(1);//延时

tmwbyte(0xcc);//跳过序列号命令

tmwbyte(0xbe);//发送读取命令

a=tmrbyte();//读取低位温度

b=tmrbyte();//读取高位温度

if(b>0x7f)//最高位为1时温度是负

{a=~a;b=~b+1;//补码转换,取反加一

fg=0;//读取温度为负时fg=0

}

sdata=a/16+b*16;//整数部分

//xiaoshu1=(a&0x0f)*10/16;//小数第一位

//xiaoshu2=(a&0x0f)*100/16%10;//小数

//xiaoshu=xiaoshu1*10+xiaoshu2;//小数

}

voidDS18B20PRO(void)

{

tmstart();

//yanshi(5);//如果是不断地读取的话可以不延

tmrtemp();//读取温度,执行完毕温度将存于

}

voidLed()

{

if(fg==1)//温度为正时显示的数据

{

P2_7=0;

P0=seg7code[sdata/10];//输出十位

Delay(8);P2=P2|0xf0;

P2_6=0;

P0=seg7code[sdata%10]|0x80;//输出个位

Delay(8);P2=P2|0xf0;

P2_5=0;

P0=seg7code[z%10]|0x80;//输出延时位

Delay(4);P2=P2|0xf0;

if(sdata>30)

{P1=0xfe;}

if(sdata>32)

{P1=0xfd;}

if(sdata>34)

{P1=0xfb;}

}

}

voidbuzidong()

{

voidDS18B20PRO();

voidLed();

DS18B20PRO();

Led();

if(di==0)

{Delay(200);P1=0xfe;}

if(zh==0)

{Delay(200);P1=0xfd;}

if(ga==0)

{Delay(200);P1=0xfb;}

}

voidzidong()

{

while(z--)

{

voidDS18B20PRO();

voidLed();

unsignedchari,k;

//for(y=30;y>0;y--)

for(i=12;i>0;i--)

//for(j=80;j>0;j--)

for(k=248;k>0;k--)

{

if(jia==0)

{Delay(200);z++;}

if(jian==0)

{Delay(200);z--;}

DS18B20PRO();

Led();

if(di==0)

{Delay(200);P1=0xfe;}

if(zh==0)

{Delay(200);P1=0xfd;}

if(ga==0)

{Delay(200);P1=0xfb;}

/*

if((di==0)||(sdata>30))

{Delay(200);P1=0xfe;}

if((zh==0)||(sdata>32))

{Delay(200);P1=0xfd;}

if((ga==0)||(sdata>34))

{Delay(200);P1=0xfb;}

*/

};

}

}

voidmain()

{

fg=1;

while

(1)

{

//if(jia==0)

//{Delay(200);z++;}

//if(jian==0)

//{Delay(200);z--;}

//zidong();

buzidong();

if(q==0)

{z++;zidong();P1=0xff;}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1