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

共18条 1/2 1 2 跳转至

液晶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 20:29:29     打赏
2楼
原来这是个问题贴

高工
2014-05-10 20:45:21     打赏
3楼

貌似楼主发帖的板块错了啊。

建议楼主:

1,用串口回传数据试试,别是测到的温度不正常

2,检查1602显示


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

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

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

院士
2014-05-11 00:22:42     打赏
7楼
可以选择话题,这样大家索引起来也方便

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

高工
2014-05-11 11:04:55     打赏
9楼
1,那就是你的读取温度有问题吧,建议检查一下模块是否坏了,另一个在网上找找例程 2,用“串口通讯”啊,可能你还没试过吧,把数据直接通过串口穿给电脑,在电脑上用软件来查看传回来的数据

院士
2014-05-11 11:29:33     打赏
10楼
用得什么做的温度采集啊~~

共18条 1/2 1 2 跳转至

回复

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