历史上的今天
今天是:2024年12月23日(星期一)
2020年12月23日 | 51单片机5110液晶显示屏实现时间温度串口发送
2020-12-23 来源:51hei
制作出来的实物图如下:
仿真原理图如下(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]='




