温度控制电路(含继电器电路)

温度控制电路(含继电器电路)

ID:9361634

大小:65.50 KB

页数:5页

时间:2018-04-29

温度控制电路(含继电器电路)_第1页
温度控制电路(含继电器电路)_第2页
温度控制电路(含继电器电路)_第3页
温度控制电路(含继电器电路)_第4页
温度控制电路(含继电器电路)_第5页
资源描述:

《温度控制电路(含继电器电路)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、温度控制电路DS18B20本仿真开始一直不成功,很多关键点木有注意,一是继电器的额定电压、二是限流电阻的取值,如果不注意这几点,仿真时很难成功的。本仿真的关键在于继电器电路和程序的设计,继电器电路的关键是限流电阻的取值,一般要取小于1000欧姆的电阻,R2=(5—0.7)/20ma=200欧姆左右实验程序如下:#include//52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义#include//C语言库函数调用#defineucharunsignedchar//将unsignedchar定义为uchar,

2、简化输写。提高编程速度#defineuintunsignedint//将unsignedchar定义为uint,简化输写。提高编程速度sbitDQ=P1^6;//定义温度DS18B20接口,详情见原理图sbitdt=P2^3;//voiddisplay(ucharnum,uchardat);//voiddis_temp(uintt);////ucharcodeduma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};//ucharcodewema[]={0xf0,0xf1,0xf2,0xf3};//

3、位选,0-7位数码管inttemp;/*延时子程序10ms*/voiddelay10ms(){uchara,b;for(a=10;a>0;a--)for(b=30;b>0;b--);}/*延时子程序,空5个指令*/voiddelay(void){_nop_();_nop_();_nop_();_nop_();_nop_();}/*延时子程序*/voiddelayb(uintcount){uinti;while(count){i=200;while(i>0)i--;count--;}}/*DS18B20初始化*/voiddsreset(void){uinti;

4、DQ=0;i=103;while(i>0)i--;DQ=1;i=4;while(i>0)i--;}/*读一位数据值*/bittmpreadbit(void){uinti;bitdat;DQ=0;i++;//i++,小延时一下DQ=1;i++;i++;dat=DQ;i=8;while(i>0)i--;return(dat);}/*读一个字节数据*/uchartmpread(void){uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tmpreadbit();dat=(j<<7)

5、(dat>>1);//读出的数据最低位在最前面,这样

6、刚好//一个字节在DAT里}return(dat);//将一个字节数据返回}/*写一个字节到DS18B20里*/voidtmpwritebyte(uchardat){uinti;ucharj;bittestb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb)//写1部分{DQ=0;i++;i++;DQ=1;i=8;while(i>0)i--;}else{DQ=0;//写0部分i=8;while(i>0)i--;DQ=1;i++;i++;}}}/*获取温度并转化命令*/voidtmpchange(voi

7、d){dsreset();//初始化DS18B20delayb(1);//延时tmpwritebyte(0xcc);//跳过序列号命令tmpwritebyte(0x44);//发送温度转换命令}/*读取DS18B20中温度寄存器数据*/uintget_temp(){floatftemp;uchara,b;dsreset();delayb(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);//发送读取数据命令a=tmpread();//连续读两个字节数据,读低8位b=tmpread();//读高8位temp=b;temp<<=8

8、;//temp高8位和低8位交换,将交换过的值重新赋给temp。不懂的看C语言基础书temp=temp

9、a;//两字节合成一个字ftemp=temp*0.0625*8;//得到真实十进制温度值,因为DS18B20可以精确到0.0625度//所以读回数据的最低位代表的是0.0625度temp=ftemp*10+0.05;//放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。returntemp;//返回温度值}/*主函数*/voidmain(){floata;while(1){tmpchange();a=get_temp();

10、if(a>=1000

11、

12、a<=0){dt=1;}el

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。