现功能,1L水由1KW电炉加热,要求水温在一定范围内人工设定,并能随着环境温度改变自动调节,以维持设定的温度不变。
矩阵键盘输入设定温度,LCD1602显示温度值,VB上位机绘制温度曲线
/*******************************************************************************
* 实验名 :温度显示实验
* 使用的IO:
* 实验效果 :1602显示温度
* 注意:
*******************************************************************************/
#include
#include "uart.h"
#include"lcd.h"
#include "juzhen.h"
#include"temp.h"
void LcdDisplay(int);
void show_zi();
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入: 无
* 输出 : 无
*******************************************************************************/
extern int key_value;
void main()
{
UsartConfiguration();
LcdInit(); //初始化LCD
show_zi();
while(1)
{
LcdDisplay(Ds18b20ReadTemp());
//Delay1ms(1000);//1s钟刷一次
key_touch();
LcdDisplay_input();
compare_temp();
}
}
/*******************************************************************************
* 函数名 : LcdDisplay()
* 函数功能 : LCD显示读取到的温度
* 输入: v
* 输出 : 无
*******************************************************************************/
unsigned char dates[] = {0, 0, 0, 0, 0}; //定义数组
void LcdDisplay(int temp)//lcd显示
{
float tp;
// if(temp< 0)//当温度值为负数
// {
//LcdWriteCom(0x80); //写地址 80表示初始地址
// LcdWriteData('-'); //显示负
// //因为读取的温度是实际温度的补码,所以减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
//{
LcdWriteCom(0x85); //写地址 80表示初始地址
LcdWriteData('+'); //显示正
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
//}
dates[0] = temp / 10000;
dates[1] = temp % 10000 / 1000;
dates[2] = temp % 1000 / 100;
dates[3] = temp % 100 / 10;
dates[4] = temp % 10;
LcdWriteCom(0x86); //写地址 80表示初始地址
LcdWriteData('0'+dates[0]); //百位
LcdWriteCom(0x87); //写地址 80表示初始地址
LcdWriteData('0'+dates[1]); //十位
SBUF = '0'+dates[1]; //将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
LcdWriteCom(0x88); //写地址 80表示初始地址
LcdWriteData('0'+dates[2]); //个位
SBUF = '0'+dates[2]; //将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
LcdWriteCom(0x89); //写地址 80表示初始地址
LcdWriteData('.'); //显示 ‘.’
LcdWriteCom(0x8A); //写地址 80表示初始地址
LcdWriteData('0'+dates[3]); //显示小数点
LcdWriteCom(0x8B); //写地址 80表示初始地址
LcdWriteData('0'+dates[4]); //显示小数点
LcdWriteCom(0x8C); //写地址 80表示初始地址
LcdWriteData('C');
}
void show_zi()
{
char temp[6]={"Temp:"};
char temp2[6]={"Hope:"};
int i;
for(i=0;i<6;i++)
{
LcdWriteCom(0x80+i); //写地址 80表示初始地址
LcdWriteData(temp[i]);
}
for(i=0;i<6;i++)
{
LcdWriteCom(0xC0+i); //写地址 80表示初始地址
LcdWriteData(temp2[i]);
}
}
关键字:
51单片机
水温控制
LCD显示
温度曲线
编辑:什么鱼 引用地址:
/mcu/ic510475.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。