lcd和服务器同时显示温度,为什么LCD1602不能同时显示温度和时间?

博主遇到一个编程挑战,目标是使用LCD1602显示DS18B20测得的温度和DS1302获取的时间。当尝试同时显示两者时,温度值显示为0,而时间正常。怀疑问题可能出在main函数编写上,硬件电路使用了51单片机STC89C52,LCD1602,DS18B20和DS1302。代码中提供了温度和时间的处理及显示函数,但存在冲突导致温度无法正确显示。
摘要由CSDN通过智能技术生成

程序目标:1602第一行显示温度,第二行显示时间。温度用DS18b20,时间用DS1302。

目前存在问题:用1602单独显示温度和时间都没得问题。合在一起显示就出现温度值为0,时间可以正常显示。

初步怀疑是我的main函数写法不对。请大家帮忙分析一下有到底有什么问题。谢谢~

硬件电路:用的51单片机STC89C52,LCD1602,DS18B20,DS1302。后门附图。

以下为程序,只有.C文件,头文件未包含,全部程序附在打包文件里面:

一、主程序  main.c

/**************************************************************************************

*                              LCD1602液晶显示实验                                                                                                  *

实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示

注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。

***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

#include "lcd.h"

#include "temp.h"

#include

#include "DS1302.H"

typedef unsigned int u16;          //对数据类型进行声明定义

typedef unsigned char u8;

//u8 Disp[]="0Pechin Scien0e ";

//u8 Disp[8];

u8 displayData[9];

u16 DisplayDatatime[9];

bit TempDs18b20Flag;

bit Ds1302Flag;

/*******************************************************************************

* 函 数 名         : delay

* 函数功能                   : 延时函数

*******************************************************************************/

void delay1ms(void)   //误差 0us 延时1ms

{

unsigned char a,b;

for(b=199;b>0;b--)

for(a=1;a>0;a--);

}

void delayxms(u8 x)//延时X个ms

{

unsigned char a,b;

for(b=x;b>0;b--)

{

delay1ms();

}

}

/*******************************************************************************

* 函 数 名         : dataprosTime()

* 函数功能                   : 时间读取处理转换函数

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void dataprosTime()

{

Ds1302ReadTime();

DisplayDataTime[0] = TIME[2]/16+0x30;                                //时

DisplayDataTime[1] = TIME[2]%16+0x30;

DisplayDataTime[2] = 0x2d;//0100 0000

DisplayDataTime[3] = TIME[1]/16+0x30;                                //分

DisplayDataTime[4] = TIME[1]%16+0x30;

DisplayDataTime[5] = 0x2d;

DisplayDataTime[6] = TIME[0]/16+0x30;                                //秒

DisplayDataTime[7] = TIME[0]%16+0x30;

}

/*******************************************************************************

* 函 数 名         : datapros()

* 函数功能                   : 温度读取处理转换函数

* 输    入         : temp

* 输    出         : 无

*******************************************************************************/

void datapros(int temp)

{

//int temp;

//temp=Ds18b20ReadTemp();

float tp;

IF(temp< 0)                                //当温度值为负数

{

DisplayData[0] = 0x2d;           //   - 0010 1101

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码

temp=temp-1;

temp=~temp;

tp=temp;

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算加上0.5,还是在小数点后面。

}

else

{

DisplayData[0] = 0x2b;//第0位数据,正温度第0位+号,00101011

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量

//如果温度是正的那么,那么正数的原码就是补码它本身

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算加上0.5,还是在小数点后面。

}</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值