简易热水器:
1、系统分为主机和从机。
2、从机通过传感器测量温度,并发送到主机。
3、主机把接收到的温度与设置的上下限进行对比,如果温度低于下限,LED亮;高于上限LED灭。
#include"lcd.h"
#include<reg51.h>
/*******************************************************************************
* 函 数 名 : Lcd1602_Delay1ms
* 函数功能 : 延时函数,延时1ms
* 输 入 : c
* 输 出 : 无
* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/
void Lcd1602_Delay1ms(uint c) //误差 0us
{
while(c--);
}
/*******************************************************************************
* 函 数 名 : LcdWriteCom
* 函数功能 : 向LCD写入一个字节的命令
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
void LcdWriteCom(uchar com) //写入命令
{
LCD1602_RS = 0; //选择发送命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //放入命令
Lcd1602_Delay1ms(10); //等待数据稳定
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(10); //保持时间
LCD1602_E = 0;
}
/*******************************************************************************
* 函 数 名 : LcdWriteData
* 函数功能 : 向LCD写入一个字节的数据
* 输 入 : dat
* 输 出 : 无
*******************************************************************************/
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //写入数据
Lcd1602_Delay1ms(10);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(10); //保持时间
LCD1602_E = 0;
}
/*******************************************************************************
* 函 数 名 : LcdInit()
* 函数功能 : 初始化LCD屏
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x38); //开显示
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
}
/********************************************************************
* 函 数 名 : write_num
* 函数功能 : 向LCD写入2位数字
* 输 入 : 行、列、数值
* 输 出 : 无
***********************************************************************/
void write_num(uchar hang,uchar add,uint date)
{
if(hang==1)
LcdWriteCom(0x80+add);
else
LcdWriteCom(0x80+0x40+add);
LcdWriteData(0x30+date/10);
LcdWriteData(0x30+date%10);
}
/********************************************************************
* 函 数 名 : write_string
* 函数功能 : 向LCD写入字符串
* 输 入 : 行、列、字符串
* 输 出 : 无
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
if(hang==1)
LcdWriteCom(0x80+add);
else
LcdWriteCom(0x80+0x40+add);
while(1)
{
if(*p == '�') break;
LcdWriteData(*p);
p++;
}
}
资料借鉴于此纷传
阅读全文