找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 695|回复: 0
打印 上一主题 下一主题
收起左侧

求大神指教,屏不显示温度

[复制链接]
跳转到指定楼层
楼主

//*********************************************
//包含文件,程序开始
//*********************************************
#include<reg51.h>
#define  uchar  unsigned char
#define  uint  unsigned int
sbit ds =P1^0;//18B20数据线引脚
sbit dula=P2^0;
sbit wela=P3^1;
sbit LED=P1^3;
sbit input=P1^1;
uint temp;
float f_temp;
unsigned char flag;//负数标志
//行扫描数组
unsigned char code table[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7d,0x07,0x7f,
                             0x6f,
        0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
        0xff,0xef } ;
//小数部分显示查询表
  
//uchar  TCNT;
//*********************************************
//延时函数
//*********************************************                     
void delay (uint z)  
{
  uint x,y;
  for(x=z;x>0;x--)
      for(y=110;y>0;y--);
   
}
//*********************************************
//DS18B20复位函数
//*********************************************
void dsreset(void)  
{
  uint i;
  ds = 0;
  i=103;
  while(i>0)i--;
  ds=1;
  i=4;
  while(i>0)i--;
   
}
//*********************************************
//从DS18B20中读一个字节
//*********************************************
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);
}
//*********************************************
//向DS18B20中写一个字节
//*********************************************
void tempwritebyte(uchar dat)
{
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++;
}
   }
}
//*********************************************
//从DS18B20中读取实时温度值
//*********************************************
void tempchange(void)
{
dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0x44);
}
uint get_temp()
{
  uchar a,b;
  dsreset();
  tempwritebyte(0xCC);     
  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 display(uchar num,uchar dat)
{
  uchar i;
  dula=0;
  P2=table[dat];
  dula=1;
  dula=0;
  wela=0;
  i=0XFF;
  i=i&(~((0X01)<<(num)));
  P2=i;wela=1;wela=0;
  delay(1);
}
void dis_temp(uint t)
{
  uchar i;
  i=t/100;
  display(0,i);
  i=t%100/10;
  display(1,i+10);
  i=t%100%10;
  display(2,i);
  }
//*********************************************
//动态扫描显示函数
//*********************************************
//void scandisp()  
//{
//  unsigned char i,value;  
//  for(i=0;i<4;i++)
//   {
//    P3 = 0xff;
//    value =table[dispbuf[i]];  
//    if(i==2)
//    value|= 0x80;
//    P2 = value;
//    P3 = scan[i];
//    delay(90);
//    }
// }
//*********************************************
//定时中断函数
//*********************************************
//void Timer0(void)interrupt 1  using  1
//{
//  TH0=(65536-50000)/256;
// TL0=(65536-50000)%256;
// TCNT++;
//  if(TCNT==6)
//   {
//    TCNT=0;
//  LED=~LED;
//   }
//}
void init_com(void)
{
  TMOD=0x20;
  PCON=0x00;
  SCON=0x50;
  TH1=0xFd;
  TL1=0xFd;
  TR1=1;
}
void comm(char*parr)
{
  do
  {
    SBUF=*parr++;
while(!TI);
TI=0;
}while(*parr);
}
//*********************************************
//主函数
//*********************************************
void main()     
{
  uchar buff[4],i;
  dula=0;
  wela=0;
  init_com();
  while(1)
     {
   tempchange();
   for(i=10;i>0;i--);
   {
    dis_temp(get_temp());
   
   
   
    }
    for(i=10;i>0;i--)
    {
    dis_temp(get_temp());
    }
    comm(buff);
    for(i=10;i>0;i--)
    {dis_temp(get_temp());
  }
}
}

捕获.PNG (126.33 KB, 下载次数: 44)

捕获.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表