求一温度控制的C语言程序

求一温度控制的C语言程序,第1张

我做过DS18B20温控设备,单总线传感这是念衫一个不错的选择哦。下面是C语言程序,硬件接线如下:

(1)把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。

(2)把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。

(3)把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。

(4)把“四路单总线”行蔽区域中的对应的DQ端子连接到“单片机系仔带腔统”区域中的P3.7/RD端子上。

#include <REG52.h>//at89c52

#include <INTRINS.h>

unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f}

unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00,0x40}

unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,

25,28,31,34,38,41,44,48,

50,53,56,59,63,66,69,72,

75,78,81,84,88,91,94,97}

unsigned char displaycount

unsigned char displaybuf[8]={16,16,16,16,16,16,16,16}

unsigned char timecount

unsigned char readdata[8]

sbit DQ=P3^7

bit sflag

bit resetpulse(void)

{

unsigned char i

DQ=0

for(i=255i>0i--)

DQ=1

for(i=60i>0i--)

return(DQ)

for(i=200i>0i--)

}

void writecommandtods18b20(unsigned char command)

{

unsigned char i

unsigned char j

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

{

if((command &0x01)==0)

{

DQ=0

for(j=35j>0j--)

DQ=1

}

else

{

DQ=0

for(j=2j>0j--)

DQ=1

for(j=33j>0j--)

}

command=_cror_(command,1)

}

}

unsigned char readdatafromds18b20(void)

{

unsigned char i

unsigned char j

unsigned char temp

temp=0

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

{

temp=_cror_(temp,1)

DQ=0

_nop_()

_nop_()

DQ=1

for(j=10j>0j--)

if(DQ==1)

{

temp=temp | 0x80

}

else

{

temp=temp | 0x00

}

for(j=200j>0j--)

}

return(temp)

}

void main(void)

{

TMOD=0x01

TH0=(65536-4000)/256

TL0=(65536-4000)%256

ET0=1

EA=1

while(resetpulse())

writecommandtods18b20(0xcc)

writecommandtods18b20(0x44)

TR0=1

while(1)

{

}

}

void t0(void) interrupt 1 using 0

{

unsigned char x

unsigned int result

TH0=(65536-4000)/256

TL0=(65536-4000)%256

if(displaycount==2)

{

P0=displaycode[displaybuf[displaycount]] | 0x80

}

else

{

P0=displaycode[displaybuf[displaycount]]

}

P2=displaybit[displaycount]

displaycount++

if(displaycount==8)

{

displaycount=0

}

timecount++

if(timecount==150)

{

timecount=0

while(resetpulse())

writecommandtods18b20(0xcc)

writecommandtods18b20(0xbe)

readdata[0]=readdatafromds18b20()

readdata[1]=readdatafromds18b20()

for(x=0x<8x++)

{

displaybuf[x]=16

}

sflag=0

if((readdata[1] &0xf8)!=0x00)

{

sflag=1

readdata[1]=~readdata[1]

readdata[0]=~readdata[0]

result=readdata[0]+1

readdata[0]=result

if(result>255)

{

readdata[1]++

}

}

readdata[1]=readdata[1]<<4

readdata[1]=readdata[1] &0x70

x=readdata[0]

x=x>>4

x=x &0x0f

readdata[1]=readdata[1] | x

x=2

result=readdata[1]

while(result/10)

{

displaybuf[x]=result%10

result=result/10

x++

}

displaybuf[x]=result

if(sflag==1)

{

displaybuf[x+1]=17

}

x=readdata[0] &0x0f

x=x<<1

displaybuf[0]=(dotcode[x])%10

displaybuf[1]=(dotcode[x])/10

while(resetpulse())

writecommandtods18b20(0xcc)

writecommandtods18b20(0x44)

}

}

Good luck!

#include<启缺stdio.h>

main()

{

float x,y

int z

printf("请选择:\n")

printf(" (1)将温度从摄氏度转换为华氏度。(2)将温度从华氏度转换为族旁返摄氏度")

scanf("%d",&z)

if(z==1)

{

printf("请输入要转换的兆饥温度:")

scanf("%f",&x)

y=x*1.8+32

printf(" 转换后的温度为 %f 华氏度",y)}

else

{

printf("请输入要转换的温度:")

scanf("%f",&x)

y=(x-32)*5/9

printf(" 转换后的温度为 %f 摄氏度",y)}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12445696.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存