制作出来的实物图如下:
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
/**
P2.7置低电平时,开机接入串口,自动进入时间设置界面
每秒钟自动检测温度一次,并在LCD上显示
每分钟自动刷新日期、时间、温度,在LCD上显示,并在串口中输出(方便电脑读取)
*/
#include
//#include
#include
#include"ds1302.h"
#include"temp.h"
#include
//***********************************
#define delay_time 25767
sbit SETTIME = P2^7; //为0时,开机进入设置时间界面
uchar TIME[7];
char word2[10];
//毫秒级延时函数
void delay(unsigned int x)
{
unsigned char i;
while(x--)
{
for(i = 0;i < 120;i++);
}
}
char* tempDisplay(int temp) //lcd显示
{
unsigned char datas[5]; //定义数组
float tp;
unsigned char ReturnTemp[9],x;
if(temp< 0) //当温度值为负数
{
ReturnTemp[0]='-';
//因为读取的温度是实际温度的补码,所以减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的就
//算由?.5,还是在小数点后面。
}
else
{
// LcdWriteCom(0x80); //写地址 80表示初始地址
// LcdWriteData('+'); //显示正
ReturnTemp[0]='+';
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上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(0x82); //写地址 80表示初始地址
// LcdWriteData('0'+datas[0]); //百位
// ReturnTemp[1]=datas[0]+48;
if(datas[0]!=0)
{
ReturnTemp[1]=48+datas[0];
x=1;
} else {
x=0;
}
//putchar(ReturnTemp[1]);
// LcdWriteCom(0x83); //写地址 80表示初始地址
// LcdWriteData('0'+datas[1]); //十位
if(( datas[1])!=0)
{
ReturnTemp[1+x]=datas[1]+48;
x=x+1;
} else {
if(x!=0)
{
ReturnTemp[1+x]='0';
x=x+1;
}
}
// LcdWriteCom(0x84); //写地址 80表示初始地址
// LcdWriteData('0'+datas[2]); //个位
ReturnTemp[1+x]='0'+datas[2];
// putchar(ReturnTemp[1+x]);
// LcdWriteCom(0x85); //写地址 80表示初始地址
// LcdWriteData('.'); //显示 ‘.’
ReturnTemp[2+x]='.';
// LcdWriteCom(0x86); //写地址 80表示初始地址
// LcdWriteData('0'+datas[3]); //显示小数点
ReturnTemp[3+x]=48+datas[3];
// putchar(ReturnTemp[3+x]);
// LcdWriteCom(0x87); //写地址 80表示初始地址
// LcdWriteData('0'+datas[4]); //显示小数点
ReturnTemp[4+x]=datas[4]+48;
ReturnTemp[5+x]='C';
ReturnTemp[6+x]='
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』