新手学习之温度传感器程序

2019-03-24 19:26发布

找了一天了,是在找不出来哪儿错了,我是看天狼星编程的,没办法了,只能求助各位大神了。大家有空就请帮帮忙吧,纠结死我了 温度传感器正常,我用开发板的hex文件试过。 #include<reg52.h>
#define uint unsigned int
#define uchar unsigned char sbit dq=P1^3;
uchar temp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f}; void delay(uchar t)
{
       while(t--);
} /*初始化函数*/
void init()
{
 uchar n;
 dq=1;
 delay(8);
 dq=0;
 delay(80);
 dq=1;
 delay(8);
 n=dq;
 delay(4);
}
/*写一个字节函数*/
void write_byte(uchar date)
{
    uchar i;
 for(i=0;i<8;i++)
 {
      dq=0;
      dq=date&0x01;
      delay(4);
      dq=1;
      date>>=1;
 }
 delay(4); }
/*读一个字节函数*/
uchar read_byte()
{
 uchar i,value;
 for(i=0;i<8;i++)
 {
      dq=0;
      value>>=1;
      dq=1;
      if(dq)
      value=value|0x80;
     delay(4);
 }
 return value;
}         /*读温度函数*/
uchar readtem()
{
    uchar a,b;
    init();
    write_byte(0xcc);//跳过ROM
    write_byte(0x44);//开始采样测温
   delay(200);
    //此时所测温度已放入寄存器中,可以读取
   init();
   write_byte(0xcc);
   write_byte(0xbe);//读取数据 
   a=read_byte(); //暂存器低位,后四位为小数点
   b=read_byte(); //高位,前五位为符号位
   b<<=4;
   b+=(a&0xf0)>>4;//b的前四位与a的后四位组成一个字节,8位
   return b; 
} /*数码管显示函数*/
void display()
{
 P2=0;
 P0=table[temp/10];
 delay(100);
 P2=1;
 P0=table[temp%10];
 delay(100);
}
/*主函数*/
void main()
{
  while(1)
  {
       temp=readtem();
       display();
  } } [ 本帖最后由 Learner_new 于 2012-1-31 17:30 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
ergabd
2019-03-26 07:13
我做的用的18b20温度总不是很准确是怎么回事呢&nbsp;&nbsp; 有没有校准这一说&nbsp; 不会是和准确的温度值对比一下减去一个数吧

一周热门 更多>