打印

怎样才能实现这功能

[复制链接]
1503|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qinjianbo|  楼主 | 2009-11-14 19:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//*************************************
//头文件
#include <reg52.h>
//*************************************
//LCD 控制位
sbit rs=P1^0;
sbit rw=P1^1;
sbit lcden=P1^2;
sbit psb=P2^7;  //串并选择
sbit rst=P2^6;   //复位
//*************************************
//DS18B20
sbit DQ=P3^3;  //DS18B20
//*********************************
//全局变量
unsigned char i=0;
//*************************************
//DS18B20延时
void delay_m(unsigned char x)
{
while(--x);
}
//*************************************
//延时
void delay(unsigned int m)
{
unsigned int x,y;
for(x = m; x >0;x--)
  for(y = 110; y > 0; y--);
}
//**************************************
//LCD 写指令
void write_com(unsigned char com)
{
rs = 0;
rw = 0;
lcden = 0;
P0 = com;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
delay(5);
}
//****************************************
//LCD 写数据
void write_date(unsigned char date)
{
rs = 1;
rw = 0;
lcden = 0;
P0 = date;
lcden = 1;
delay(5);
lcden = 0;
delay(5);
}
//*************************************
//初始化 LCD
void Lcd_Init()
{
rst = 0;  //上电复位   
delay(10);
rst = 1;  //工作
psb = 1; //选择并口
write_com(0x30);//基本指令集
write_com(0x02);//地址归位
write_com(0x0c);//开显示  不显示光标
write_com(0x01);//清屏
write_com(0x06);//写数据地址指针自动+1
}

//***********************************
//向LCD发一个字符串
void Lcd_word(unsigned char *str)
{
while(*str != '\0')
{
    write_date(*str++);
}
*str = 0;
}
//************************************
//初始化DS18B20
unsigned char Init_Ds18b20()//初始化
{
DQ=1;  //复位
delay_m(8); //延时
DQ=0;  //总线拉低
delay_m(90); //延时480~960us之间

DQ=1;  //拉高电平
delay_m(8);

i=DQ;
delay_m(100);
DQ=1;
return (i); //返回
}
//************************************
//读数据
unsigned char read_bit()//读数据
{
unsigned char i=0,date=0;
for(i=8;i>0;i--)
{
  DQ=0;
  date>>=1;
  DQ=1;//释放总线
  if(DQ)
  date|=0x80;
  delay_m(4);
}
return (date);
}
//***************************************
// 写数据
void write_bit(unsigned char date)
{
  unsigned char i = 0;
   for (i = 8; i > 0; i--)
   {
     DQ = 0;
     DQ = date&0x01;
     delay_m(5);

     DQ = 1;
     date>>=1;
   }
}
//**************************************************
//读取温度值
unsigned int get_temp(void)//读取温度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;

if(i==1)
{
  
}
else
{
  Init_Ds18b20();
  write_bit(0xCC); // 跳过读序号列号的操作
  write_bit(0x44); // 启动温度转换
  Init_Ds18b20();
  write_bit(0xCC); //跳过读序号列号的操作
  write_bit(0xBE); //读取温度寄存器
  a=read_bit();   //读低8位
  b=read_bit();  //读高8位
  t=b;
  t<<=8;
  t=t|a;
  tt=t*0.0625;
  t= tt*10; //放大10倍输出并四舍五入
  return(t);
}

}
//***********************************************
//LCD 显示温度
void Temp_display(void)
{
unsigned int i=0;
unsigned char a=0, b=0;
write_com(0x90);
i=get_temp();
a=i/100;
write_date(0x30+a);
b=i/10-a*10;
write_date(0x30+b);
}
void main(void)
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
Lcd_Init();
write_com(0x80);
Lcd_word("用爱呵护这个世界");
delay(2000);
write_com(0x80);
Lcd_word("祝福全世界每个人");
while(1);
}
void time0() interrupt 1
{
   
unsigned char i=0;
TH0=0x3c;
TL0=0xb0;
if(++i >5)
{
  i=0;
         Temp_display();
}
}

各位大侠 我是新手 我想把温度值显示在LCD  可是怎么就是弄不出来 哪位朋友帮下我告诉我怎么去实现好吗? 谢谢 弄了很久没弄出来

相关帖子

沙发
qinjianbo|  楼主 | 2009-11-14 19:53 | 只看该作者
大家进来就多少给点意见

使用特权

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

本版积分规则

10

主题

34

帖子

0

粉丝