急!!!! !!编写一个温度传感器的C语言程序(能写多少算多少)

传感器由电位器模拟电位器连接于模数转换器通道1(PAD0)。此模数转换器ATD0是10bits并在0-2.55V的电压之间变化。当外界温度0度时电压为0。温度102.3度... 传感器由电位器模拟 电位器连接于模数转换器通道1(PAD0)。此模数转换器ATD0是10bits 并在0-2.55V的电压之间变化。当外界温度0度时电压为0。温度102.3度时电压2.55v。最后把摄氏温度输出在LCD上每秒温度刷新一次 用(tempo_n(xx)))
要通过hc12芯片
展开
 我来答
t0z4hxmom
2011-04-07 · TA获得超过1061个赞
知道小有建树答主
回答量:1208
采纳率:50%
帮助的人:753万
展开全部
**************/
unsigned char ReadOneChar(void)
{
uchar i=0; //定义i用于循环
uchar dat = 0; //读取的8位数据
for (i=8;i>0;i--) //8次循环
{
DQ = 0; //拉低DQ总线开始读时序
dat>>=1; //dat左移一位
DQ = 1; //释放DQ总线
if(DQ) //如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat即为读取的数据)
//DQ=0,就跳过
dat|=0x80;
delay_18B20(4); // 延时以完成此次读时 序,之后再读下一数据
}
return(dat); //返回读取的dat
}

DQ = dat&0x01;这句语句是错误的。DQ为位变量,而dat为 unsigned char
如果真要这么写的话,应该是这样 :DQ = (bit)dat&0x01;

把我写的给你做个参考吧:
extern uchar8 sig; //sig判定温度符号
/*延时函数*/
void delay (int us) //DELAY-11.0592MHZ 调用程序大约为24us,每次循环为16us
{
int s;
for(s=0;s<us;s++);
}

void delayms(int z) //z为毫秒数
{
int x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}

/*复位程序*/
unsigned char reset(void)
{
uchar8 presence;
DQ=0; //拉低总线。当总线停留在低电平480us-960us ,总线上所以器件都将被复位
delay(30); //保持低电平504us
DQ=1; //释放总线,让其恢复高电平
delay(3); //等待芯片应答信号
presence=DQ; //获取应答信号
delay(25); //延时以完成整个时序
return(presence); //返回应答信号。有芯片应答返回0,否则返回1。
}

/*写一位数据*/
void write_bit(char bitval)
{
DQ=0; //拉低DQ总线,开始时序
if(bitval==1) //如果写入的为1,则返回高电平
DQ=1;
delay(5); //延时104us,以完成整个时序
DQ=1;
}

/*写一字节数据*/
void write_byte(char val)
{
uchar8 i,temp;
for (i=0;i<8;i++) //写入一个字节的数据,一个时序中写一次
{
temp=val>>i; //右移i位
temp&=0x01; //复制那位数据到temp
write_bit(temp); //调用write_bit()
}
delay(5); //延时104us以完成此次时序,之后再写下一数据
}

/*读一位数据*/
uchar8 read_bit(void)
{
uchar8 i;
DQ=0; //拉低DQ,开始读时序
DQ=1; //释放DQ总线
for(i=0;i<3;i++); //从时序开始延时15us
return(DQ); //返回DQ值
}

/*读一字节数据*/
uchar8 read_byte(void)
{
uchar8 i,value=0;
for(i=0;i<8;i++)
{
if(read_bit()) //读一字节数据,一个时序中读一次,并作移位处理
value|=0x01<<i;
delay(6); //延时以完成此次读时序,之后再读下一数据
}
return(value);
}

/*温度转化*/
void tmconvert(void)
{
reset(); //复位
delay(1);
write_byte(0xcc); //仅一个DS18b20 ,跳过ROM
write_byte(0x44); //温度变换
}

/*读取温度*/
long gettm(void)
{
uchar8 LSB=0,MSB=0; //用于存储读取的温度

long temp;
reset(); //复位
write_byte(0xcc); //写指令,跳过ROM,仅一个DS18b20
write_byte(0xbe); //写指令,读暂存存储器
LSB = read_byte(); //读LSB
MSB = read_byte(); //读MSB
sig=(MSB>>4==0X0F);
if(sig) //判断符号位是否为负值,是负值了,转去处理
{
LSB=~LSB; //温度处理
MSB=~MSB;
LSB=LSB+1;
}
temp=MSB*256+LSB; //十六进制转换为10进制
temp=temp*100/16; //12位精度,最小分辨率为0.0625°C
return temp; //获得0.01°C 的精度并返回
}
创安恒业-动环监控
2024-08-01 广告
温湿度动环监控系统的主要功能是实现对机房、库房等场所的温湿度环境进行实时监测、设置和调节。系统通过温湿度传感器等设备,实时收集并处理各区域的温湿度数据,当温湿度超出设定范围时,系统会自动发出警报,及时通知管理人员进行相应处理。同时,系统还具... 点击进入详情页
本回答由创安恒业-动环监控提供
我爱流雨飞轩
2011-04-06 · TA获得超过1199个赞
知道小有建树答主
回答量:665
采纳率:0%
帮助的人:473万
展开全部
#include<reg51.h>unsigned char code segtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x63,0x39};unsigned char disp_buf[]={0,0,0,0};unsigned char code ledbit[]{0xfe,0xfd,0xfb,0xf7};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式