这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 液晶1602显示温度

共9条 1/1 1 跳转至

液晶1602显示温度

助工
2014-05-10 18:27:57     打赏
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code digit[10]={"0123456789"};			  //定义字符数组显示数字
unsigned char code Temp[]={"Temp:"};             //说明显示的是温度
unsigned char code Cent[]={"Cent"};              //温度单位

sbit DS=P1^1;
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
uchar TH,TL,TN,TD;
//uint temp;
//uchar code table[]={"temp"};

void delay(uint sum)		//延时函数
{
	uint i;
	for(i=sum;i>0;i--)
	_nop_();
}

void begin(void)			//初始化
{
	uint i=4;
	DS=0;
	delay(720);
	DS=1;
	while(i>0) i--;
}

void write(uchar dat)		//写数据
{
	uint i=0;
	uchar j;
	bit testb;
	for(j=1;j<=8;j++)
	{
		testb=dat&0x01;
		dat=dat>>1;
		if(testb)
		{
			DS=0;
			i++;i++;
			DS=1;
			delay(50);
		}
		else
		{
			DS=0;
			delay(60);
			DS=1;
			i++;i++;
		}
	}
}

bit readbit(void)      //读取一位
{
	uint i;
	bit dat;
	DS=0;
	i++;
	DS=1;
	i++;i++;
	dat=DS;
	delay(50);
	return(dat);	
}

uchar read(void)  	   //读取一个字节
{
	uint i;
	uchar j,dat;
	for(i=1;i<=8;i++)
	{
		j=readbit();
    	dat=(j<<7)|(dat>>1);  
	}
	return(dat);
}

void wenduchange()	   //温度转换
{
	begin();
	delay(1);
	write(0xcc);
	write(0x44);
	delay(100);
}

wendu()		 //读取温度数值
{
//	float tempp;
	begin();
	delay(1);
	write(0xcc);
	write(0xbe);
//	TL=read();
//	TH=read();
//	temp=TH;
//	temp<<=8;
//	temp=temp|TL;
//	tempp=temp*0.0625;
 // 	temp=tempp*10+0.5;
//	return temp; 	
}

void write_date(uchar date)
{
	rs=1;
	rw=0;
	P0=date;
	delay(1000);
	en=1;
	delay(1000);
	en=0;
}

void write_com(uint com)
{
	rs=0;
	rw=0;
	P0=com;
	delay(1000);
	en=1;
	delay(1000);
	en=0;
}

void init()
{
	en=0;
	write_com(0x38);
	write_com(0x0e);
	write_com(0x06);
	write_com(0x01);
//	write_com(0x80+0x10);
} 

void display_symbol(void)		   //显示温度字符
{
	uint num;
	write_com(0x80);
	for(num=0;num<4;num++)
	{
		write_date(Temp[num]);	
	}
}

void display_cent(void)			//显示温度单位
{
	uint num;
	write_com(0x80+0x0b);
	for(num=0;num<4;num++)
	{
		write_date(Cent[num]);
	}
}

void display_dot()		   //显示温度小数点
{
	write_com(0x80+0x08);
	write_date('.');
}

void display_temp1(uchar x)		  //显示温度整数部分
{
	uchar j,k,l;
	j=x/100;
	k=(x%100)/10;
	l=x%10;
	write_com(0x80+0x05);
	write_date(digit[j]);
	write_date(digit[k]);
	write_date(digit[l]);
	delay(50000);	
}

void display_temp2(uchar x)		   //显示温度小数部分
{
	write_com(0x80+0x09);
	write_date(digit[x]);
	delay(1000);	
}

void main()
{
//	uchar TH,TL,TN,TD;
	init();
	delay(5000);
	display_symbol();
	display_dot();
	display_cent();
	while(1)
	{
	 	wenduchange();
		wendu();
		TL=read();
		TH=read();
		TN=TH*16+TL/16; 
		TD=(TL%16)*10/16;
		display_temp1(TN);    //显示温度的整数部分
	    display_temp2(TD);    //显示温度的小数部分
 	   	delay(1000);
	}

}

 运行结果

 

刚刚学习温度检测并用1602液晶显示,调试时有警告“missing return value”,不知怎么改,求大神指导··········

 

 

 




关键词: 温度     液晶     显示    

助工
2014-05-10 22:14:19     打赏
2楼
温度压根就不变化

助工
2014-05-10 22:15:18     打赏
3楼
问题贴不应该发在这吗?

助工
2014-05-10 23:44:47     打赏
4楼
如何回传?没用过

助工
2014-05-11 07:21:33     打赏
5楼
好的,下次注意

助工
2014-05-13 12:32:03     打赏
6楼
DS18B20    拜托再帮忙找找问题

助工
2014-05-13 12:34:50     打赏
7楼
对,厉害,温度检测所用芯片为DS18B20,感觉问题在数据读取那块,但是又找不出来

助工
2014-05-13 12:40:29     打赏
8楼
在哪呀?我没有看到,去找找看

助工
2014-05-13 22:39:19     打赏
9楼
不对呀!那只是液晶显示程序,没有利用18B20显示温度呀。能不能直接把程序发给我?

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]