标题:
STC89C52RC单片机LCD1602显示,DS18B20采集
[打印本页]
作者:
有心插花花木兰
时间:
2019-11-20 12:17
标题:
STC89C52RC单片机LCD1602显示,DS18B20采集
自制最小单片机系统
LCD1602显示,DS18B20采集
DS18B20保存报警值到内部eeprom,掉电保存功能
四个按键调整上下预警值,还有掉电保存预警值的功能
5VDC电源 一个
四角开关 四个
DS18B20 一个
LED 两个
10K电阻 两个
12MHz无源晶振 一个
47pF电容 2个
10pF极性电容 一个
10K排阻 一个
LCD1602 一个
STC89C52RC 一个
20191117_162806.jpg
(3.26 MB, 下载次数: 52)
下载附件
实物图
2019-11-20 12:15 上传
单片机源程序如下:
/**************************************************************************************
* LCD1602液晶显示实验 *
实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示
注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"
#include "temp.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
u8 DisplayData[18]=" temp: ";
u8 DisplayData1[18]=" H: L: ";
sbit key_1=P3^3;
sbit key_2=P3^5;
sbit key_3=P3^4;
sbit key_4=P3^7;
sbit LED = P2^1;
char h,l;
void delay(u16 i)
{
while(i--);
}
void datapros_1(int temp)
{
DisplayData1[8] = temp % 1000 / 100 + 0x30;
DisplayData1[9] = temp % 100 / 10 + 0x30;
DisplayData1[10] = temp % 10 + 0x30;
}
void datapros_2(int temp)
{
DisplayData1[3] = temp % 1000 / 100 + 0x30;
DisplayData1[4] = temp % 100 / 10 + 0x30;
DisplayData1[5] = temp % 10 + 0x30;
}
void datapros(int temp)
{
float tp;
if(temp< 0) //当温度值为负数
{
DisplayData[0] = 0x40; // -
//因为读取的温度是实际温度的补码,所以减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] = 0x00;
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
}
DisplayData[6] = temp % 10000 / 1000+0x30;
DisplayData[7] = temp % 1000 / 100+0x30;
DisplayData[8] = '.';
DisplayData[9] = temp % 100 / 10+0x30;
DisplayData[10] = temp % 10+0x30;
}
void display()
{
u8 i;
datapros_2(ds18b20_read_hl(1));
datapros_1(ds18b20_read_hl(0));
datapros(Ds18b20ReadTemp());
LcdWriteCom(0x80);
for(i=0;i<11;i++)
{
LcdWriteData(DisplayData[i]);
}
LcdWriteData(0xdf);
LcdWriteData('C');
LcdWriteCom(0x40+0x80);
for(i=0;i<11;i++)
{
LcdWriteData(DisplayData1[i]);
}
}
void keypros_1()
{
if(key_1==0)
{
delay(200);
if(key_1==0)
{
h++;
Ds18b20_Write_hl(h,l);
ds18b20_eeprom();
}
while(!key_1);
}
}
void keypros_2()
{
if(key_2==0)
{
delay(200);
if(key_2==0)
{
h--;
Ds18b20_Write_hl(h,l);
ds18b20_eeprom();
}
while(!key_2);
}
}
void keypros_3()
{
if(key_3==0)
{
delay(200);
if(key_3==0)
{
l--;
Ds18b20_Write_hl(h,l);
ds18b20_eeprom();
}
while(!key_3);
}
}
void keypros_4()
{
if(key_4==0)
{
delay(200);
if(key_4==0)
{
l++;
Ds18b20_Write_hl(h,l);
ds18b20_eeprom();
}
while(!key_4);
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main(void)
{
LED = 0;
LcdInit();
h=ds18b20_read_hl(1);
l=ds18b20_read_hl(0);
while(1)
{
if(((DisplayData1[4]-0x30)*10+(DisplayData1[5]-0x30))<=((DisplayData[6]-0x30)*10+(DisplayData[7]-0x30))||((DisplayData1[9]-0x30)*10+DisplayData1[10]-0x30)>=((DisplayData[6]-0x30)*10+DisplayData[7]-0x30)){ LED = 1;}
else LED = 0;
keypros_3();
keypros_4();
keypros_1();
keypros_2();
display();
}
}
复制代码
所有资料51hei提供下载:
STC89C52RC.7z
(583.06 KB, 下载次数: 60)
2019-11-20 14:26 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
lcl1260519806
时间:
2021-7-28 09:24
正好需要,下载来试一下,希望好用
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1