基于STC89C52单片机的温控风扇系统设计.docx

上传人:lao****ou 文档编号:951086 上传时间:2024-08-02 格式:DOCX 页数:15 大小:28.76KB
下载 相关 举报
基于STC89C52单片机的温控风扇系统设计.docx_第1页
第1页 / 共15页
基于STC89C52单片机的温控风扇系统设计.docx_第2页
第2页 / 共15页
基于STC89C52单片机的温控风扇系统设计.docx_第3页
第3页 / 共15页
基于STC89C52单片机的温控风扇系统设计.docx_第4页
第4页 / 共15页
基于STC89C52单片机的温控风扇系统设计.docx_第5页
第5页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《基于STC89C52单片机的温控风扇系统设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的温控风扇系统设计.docx(15页珍藏版)》请在第一文库网上搜索。

1、基于STC89C52单片机的温控风扇系统设计1功能本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统选用STC89C52里左机作为控制平台对风扇转速进行控制。可在测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。2.硬件设计硬件电路主要由:1 .单片机最小系统2 .风扇驱动电路3 .1CD1602显示屏电路4 .DS18B20温度采集电路3.程序设计(1) 1CDI602驱动程序define1CD1602_DBPOsbit1CD1602RS=P20;sbit1CD1602RW=P2;s

2、bit1CD1602_E=P22;*等待液晶准备好*/void1cdWaitReady()(unsignedcharsta;1CD1602DB=OxFF;1CD1602RS=0;1CD1602RW=1;do1CD1602_E=1;sta=1CD1602_DB;读取状态字1CD1602_E=0;whi1e(sta&0x80);bit7等于1表示液晶正忙,重复检测直到其等于0为止/*向1CDI602液晶写入一字节命令,Cmd-待写入命令值*/void1cdWriteCmd(unsignedcharcmd)1cdWaitReadyO;1CD1602_RS=0;1CD1602_RW=0;1CD1602

3、_DB=cmd;1CD1602_E=1;1CD1602_E=O;*向1CDI602液晶写入一字节数据,dat-待写入数据值*/void1cdWriteDat(unsignedchardat)1cdWaitReadyO;1CD1602_RS=1;1CD1602_RW=0;1CD1602_DB=dat;1CD1602_E=1;1CD1602_E=0;*设置显示幽起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/void1cdSetCursor(unsignedcharx,unsignedchary)unsignedCharaddr;if(y=O)/由输入的屏幕坐标计算显示RAM的地址ad

4、dr=OxOO+x;第一行字符地址从OXOO起始e1seaddr=0x40+x;第二行字符地址从0x40起始1cdWriteCmd(addrI0x80);设置RAM地址/*在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,St1字符串指针*/void1cdShowStr(unsignedcharx,unsignedchary,unsignedchar*str)1cc1SetCursor(x,y);设置起始地址whi1e(*str!=O)连续写入字符串数据,直到检测到结束符(1cdWriteDat(*str+);)/*初始化1602液晶*/voidInit1cd1602()1cdWriteC

5、md(0x38);16*2显示,5*7点阵,8位数据接口1cdWriteCmd(OxOc);显示器开,光标关闭1cdWriteCmd(0x06);文字不动,地址自动+11cdWriteCmd(OxO1);清屏(2) DS18B20驱动程序sbitI0-18B20=P32;I软件延时函数,延时时间C1O)us*/voidDe1ayX1Ous(unsignedchart)do-P-();-P-();-P-();0P-();-P-();-P-();-P-();_nop_();whi1e(一t);)/复位总线,获取存在脉冲,以启动一次读写操作/bitGet18B20Ack()(bitack;EA=O;

6、禁止总中断I0_18B20=0;产生500US复位脉冲De1ayX1Ous(50);I0_18B20=1;De1ayX1Ous(6);延时60USack=I0.18B20;读取存在脉冲WhiIe(!IOJ8B20);等待存在脉冲结束EA=I;重新使能总中断returnack;/向DS18B2O写入一个字节,dat-待写入字节/voidWrite18B20(unsignedchardat)unsignedcharmask;EA=O;for(maSk=OXO1;mask!=0;mask=1)低位在先,依次移出8个bitIO8B20=0;产生2us低电平脉冲-0P-();nop_();if(mask

7、&dat)=0)输出该bit值I0_18B20=0;e1seI0_18B20=1;De1ayX1Ous(6)/延时60usIO18B20=1”/拉高通信引脚EA=I;/从DS18B20读取一个字节,返回值-读到的字节/unsignedcharRead18B20()(unsignedchardat;unsignedcharmask;EA=O;for(mask=0x01imask!=CHmask=1)”低位在先,依次采集8个bitI08B20=0;产生2us低电平脉冲-0P-();-0P-();I08B20=1;结束低电平脉冲,等待18b20输出数据nop_();延时2us-P-();if(!io

8、_18b20)/读取通信引脚上的值dat&=mask;e1sedatI=mask;De1ayX1Ous(6);/再延时60us)EA=I;returndat;)/启动一次18B20温度转换,返回值-表示是否启动成功/bitStart18B20()(bitack;ack=Get18B20Ack();执行总线复位,并获取18B20应答if(ack=0)(Write18B20(Oxcc);Write18B20(0x44);returnack;/读取DS18B20转换的温度值,返回值-表示是否读取成功/bitGet18B20Temp(int*temp)(bitack;unsignedchar1SB,M

9、SB16bit温度值的低字节和高字节ack=Get18B20Ack();执行总线复位,并获取18B20应答if(ack=0)(Write18B20(OxCC);跳过R0M操作Write18B20(OxBE);发送读命令1SB=Read18B20();读温度值的低字节MSB=Read18B20();读温度值的高字节*temp=(int)MSB4;分离出温度值整数部分decT=tempMxOF;分离出温度值小数部分Ien=IntToString(str,intT);整数部分转换成字符串str1en+=,.,;CIeCT=(C1eCT*10)/16;二进制的小数部分转换为1位十进制位str1en+=

10、decT+0;十进制小数位再转换为ASCI1字符WhiIe(ICn0;x-)for(y=110;y0;y-);)/比较函数,通过温度值的比较设置曳血的转速/voidCompareO(unsignedinti=0;unsignedcharj;if(intT=24)&(intT=26)M(intT=28)&(intT=30)j=3;)switch(j)根据温度索引设置电机转速(case0:IN1=I;IN2=0;for(i=0;i200;i+)ENA=I;de1ay(20);ENA=O;de1ay(30);break;1:IN1=I;IN2=0;for(i=0;i200;i+)(ENA=I;de1ay(30);ENA=0;de1ay(30);)break;case2:IN1=1;IN2=0;for(i=0;i200;i+)ENA=I;de1ay(55);ENA=O;de1ay(30);break;case3:IN1=I;IN2=0;ENA=I;break;defau1t:break;/整型数转换为字符串,St1字符串指针,dat-待转换数,返回值-字符串长度/unsignedcharIntToString(unsignedchar*str,intdat)(signedchari=0;un

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

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服