标题:
51单片机LCD1602如何同时显示温度和时间
[打印本页]
作者:
山山山山山
时间:
2019-2-1 15:22
标题:
51单片机LCD1602如何同时显示温度和时间
LCD1602上怎么同时实时显示温度和时间呢,我把两个单独的程序合在一起,只正常显示时间,温度那里只显示00.00求救
作者:
xuyaqi
时间:
2019-2-1 16:42
合在一起程序之间有冲突,应该把合在一起的程序发出来,别人才好帮你找原因。
作者:
sheng7533967
时间:
2019-2-1 17:40
上代码,上图片再说
作者:
shuisheng
时间:
2019-2-1 17:58
LCD1602是很基础的东西了,确实再搞不定上代码大家帮你看看
作者:
ahshmj
时间:
2019-2-1 20:08
你的问题太笼统,许多问题都有可能造成这样的现象。很可能是没有读出温度值,或者读时间值时被定时器中断打断。你的温度元件是不是ds18b20?
作者:
小猫猫爱吃鱼
时间:
2019-2-1 21:17
多功能万年历温湿度显示,DS1302+SHT11+LCD12864 - 51单片机 单片机论坛
http://www.51hei.com/bbs/dpj-123863-1.html
WIFI调时时钟,ESP8266+DS1302+DS18b20+LCD1602 - 51单片机 单片机论坛
http://www.51hei.com/bbs/dpj-119341-1.html
作者:
HC6800-ES-V2.0
时间:
2019-2-2 09:42
本论坛内,我已经回复过很多次了,你应该先搜索一下嘛。
看这个"LCD1602不能同时显示温度和时间的问题"
作者:
山山山山山
时间:
2019-2-11 11:17
ahshmj 发表于 2019-2-1 20:08
你的问题太笼统,许多问题都有可能造成这样的现象。很可能是没有读出温度值,或者读时间值时被定时器中断打 ...
是18b20
作者:
山山山山山
时间:
2019-2-11 11:31
按键是设置时间的
void main()
{
unsigned char i;
Int0Configuration();
LcdInit();
Ds1302Init();
while(1)
{
if(SetState==0)
{
Ds1302ReadTime();
}
else
{
if(K1==0) //¼ì2a°′¼üK1êÇ·ñ°′ÏÂ
{
Delay10ms(); //Ïû3y¶¶¶ˉ
if(K1==0)
{
SetPlace++;
if(SetPlace>=7)
SetPlace=0;
}
while((i<50)&&(K1==0)) //¼ì2a°′¼üêÇ·ñËé¿a
{
Delay10ms();
i++;
}
i=0;
}
if(K2==0) //¼ì2a°′¼üK2êÇ·ñ°′ÏÂ
{
Delay10ms(); //Ïû3y¶¶¶ˉ
if(K2==0)
{
TIME[SetPlace]++;
if((TIME[SetPlace]&0x0f)>9) //»»3éBCDÂë¡£
{
TIME[SetPlace]=TIME[SetPlace]+6;
}
if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //·ÖÃëÖ»Äüμ½59
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //D¡ê±Ö»Äüμ½23
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //èÕÖ»Äüμ½31
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //ÔÂÖ»Äüμ½12
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x7)&&(SetPlace==5)) //ÖüÖ»Äüμ½7
{
TIME[SetPlace]=1;
}
// if(SetPlace==5) //ÔÂÖ»Äüμ½12
// {
// TIME[SetPlace]=;
// }
}
while((i<50)&&(K2==0)) //¼ì2a°′¼üêÇ·ñËé¿a
{
Delay10ms();
i++;
}
i=0;
}
}
LcdTimeDisplay();
LcdTempDisplay(Ds18b20ReadTemp());
}
}
void LcdTimeDisplay()
{
LcdWriteCom(0x80+0X40);
LcdWriteData('0'+TIME[2]/16); //ê±
LcdWriteData('0'+(TIME[2]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[1]/16); //·Ö
LcdWriteData('0'+(TIME[1]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[0]/16); //Ãë
LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80);
LcdWriteData('2');
LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //Äê
LcdWriteData('0'+(TIME[6]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[4]/16); //ÔÂ
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[3]/16); //èÕ
LcdWriteData('0'+(TIME[3]&0x0f));
LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)); //DÇÆú
}
void LcdTempDisplay(int temp)
{
unsigned char i, datas[] = {0, 0, 0, 0, 0}
float tp;
if(temp< 0)
{
LcdWriteCom(0x80);
SBUF='-'
while(!TI);
TI=0;
LcdWriteData('-');
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
}
else
{
LcdWriteCom(0x4a+0x80);
LcdWriteData('+');
SBUF='+'
while(!TI);
TI=0;
tp=temp
temp=tp*0.0625*100+0.5;
}
datas[0] = temp / 10000;
datas[1] = temp % 10000 / 1000;
datas[2] = temp % 1000 / 100;
datas[3] = temp % 100 / 10;
datas[4] = temp % 10;
LcdWriteCom(0x4b+0x80);
LcdWriteData('0'+datas[1])
SBUF = '0'+datas[1]
while (!TI);
TI = 0;
LcdWriteCom(0x4c+0x80);
LcdWriteData('0'+datas[2]);
SBUF = '0'+datas[2]
while (!TI);
TI = 0;
LcdWriteCom(0x4d+0x80);
LcdWriteData('.');
SBUF = '.'
while (!TI);
TI = 0;
LcdWriteCom(0x4e+0x80);
LcdWriteData('0'+datas[3])
SBUF = '0'+datas[3]
while (!TI);
TI = 0;
LcdWriteCom(0x4f+0x80);
LcdWriteData('0'+datas[4])
SBUF = '0'+datas[4]
while (!TI);
TI = 0;
for(i=0; i<6; i++)
{
SBUF = CNCHAR[i]
while (!TI);
TI = 0;
}
}
作者:
山山山山山
时间:
2019-2-11 11:38
LcdWriteData('+');
作者:
livehu5188
时间:
2019-2-12 17:22
大家都是使用什么软件 进行编程呢
作者:
Alien·贝贝
时间:
2019-2-13 16:19
我也是和楼主一样的情况
作者:
钻牛尖滴刘尖尖
时间:
2019-2-13 20:11
这儿有现成的,你对参考一下
http://www.51hei.com/bbs/dpj-147564-1.html
作者:
lmn2005
时间:
2019-2-14 17:14
测温一般需要把中断关闭,这样才不会影响测温的时序,DS18b20的时序一般很严格。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1