打印

1602温度监控,不能实现温度的显示,和实时变化?求高手解

[复制链接]
1183|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]="wenduceliang";
char  table[10];
sbit  ds=P2^2;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uint temp;

       
float f_temp;
void delayms(uint z)//延时ms函数
{
    uint x,y;
    for(x=z;x>0;x--)
          for(y=110;y>0;y--);
}
void dsreset(void)  //de18b20初始化函数
{
     uint i;
         ds=0;
         i=103;
         while(i>0)
         i--;
         ds=1;
         i=4;
         while(i>0)
         i--;
     
}
bit tempreadbit(void)      //读一位数据函数
{
    uint i;
        bit dat;
        ds=0;
        i++;
        ds=1;
        i++;i++;
        dat=ds;
        i=8;
        while(i>0)i--;
        return(dat);
}
uchar tempread(void)    //读一个字节的数据函数
{
    uchar i,j,dat;
        dat=0;
        for(i=1;i<=8;i++)
        {
             j=tempreadbit();
                 dat=(j<<7)|(dat>>1);

        }
   return(dat);
}
void tempwritebyte(uchar dat)  //向ds18b20写一个字节
{
     uint i;uchar j;
         bit testb;
         for(j=1;j<=8;j++)
           {
                testb=dat&0x01;
                        dat=dat>>1;
                        if(testb)
                           {
                             ds=0;
                                 i++;i++;
                                 ds=1;
                                 i=8;
                                 while(i>0)i--;
                           }
                        else
                           {
                              ds=0;
                                  i=8;while(i>0)i--;
                                  ds=1;
                                  i++;i++;
                           }
           }

}
void tempchange(void)  //ds18b20开始获取温度并开始转换
{
    dsreset();
        delayms(1);
        tempwritebyte(0xcc);
        tempwritebyte(0x44);

}
uint get_temp()   //读取寄存器中存储的温度数据
{
   uchar a,b;
   dsreset();
   delayms(1);
   tempwritebyte(0xcc);
   tempwritebyte(0xbe);
   a=tempread();
   b=tempread();
   temp=b;
   temp<<=8;
   temp=temp|a;
   f_temp=temp*0.0625;
   temp=f_temp*10+0.5;
   f_temp=f_temp+0.05;

   return temp;
}
void lcdwrite_com(uchar com)
{
    lcdrs=0;
        P0=com;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;
}
void lcdwrite_data(uchar date)
{
    lcdrs=1;
        P0=date;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;
}
void lcdinit()
{
   
        lcden=0;
        lcdwrite_com(0x38);
        lcdwrite_com(0x0c);
        lcdwrite_com(0x06);
    lcdwrite_com(0x01);
}

void lcddisplay()
{
   uchar num;
   lcdinit();
   lcdwrite_com(0x80);
   for(num=0;num<12;num++)
   {
        lcdwrite_data(table1[num]);
                delayms(5);
        }

        lcdwrite_com(0x80+0x40);
    for(num=0;num<=10;num++)
          {
              lcdwrite_data(table[num]);
                  delayms(5);
          }
         

        while(1);
}
void main()
{
  
      tempchange();
      delayms(500);
      get_temp();
          sprintf(table,"%f",f_temp);
      lcddisplay();
  
}

4OD)T`K(V504WH){{4VE~@W.jpg (189.47 KB )

4OD)T`K(V504WH){{4VE~@W.jpg

相关帖子

沙发
adofe| | 2013-5-11 18:49 | 只看该作者
tempchange();
后面最好不要用delay程序(可以用判忙),还有你的delay时间最好用示波器看一下。估计是时间上出了问题。

使用特权

评论回复
板凳
dirtwillfly| | 2013-5-11 19:49 | 只看该作者
再看看时序

使用特权

评论回复
地板
448738516| | 2013-5-11 20:44 | 只看该作者
好熟悉的程序,不就是GTX的么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝