簡(jiǎn)易熱水器:
1、系統(tǒng)分為主機(jī)和從機(jī)。
2、從機(jī)通過(guò)傳感器測(cè)量溫度,并發(fā)送到主機(jī)。
3、主機(jī)把接收到的溫度與設(shè)置的上下限進(jìn)行對(duì)比,如果溫度低于下限,LED亮;高于上限LED滅。
#include"lcd.h"
#include<reg51.h>
/*******************************************************************************
* 函 數(shù) 名 : Lcd1602_Delay1ms
* 函數(shù)功能 : 延時(shí)函數(shù),延時(shí)1ms
* 輸 入 : c
* 輸 出 : 無(wú)
* 說(shuō) 名 : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。
*******************************************************************************/
void Lcd1602_Delay1ms(uint c) //誤差 0us
{
while(c--);
}
/*******************************************************************************
* 函 數(shù) 名 : LcdWriteCom
* 函數(shù)功能 : 向LCD寫入一個(gè)字節(jié)的命令
* 輸 入 : com
* 輸 出 : 無(wú)
*******************************************************************************/
void LcdWriteCom(uchar com) //寫入命令
{
LCD1602_RS = 0; //選擇發(fā)送命令
LCD1602_RW = 0; //選擇寫入
LCD1602_DATAPINS = com; //放入命令
Lcd1602_Delay1ms(10); //等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(10); //保持時(shí)間
LCD1602_E = 0;
}
/*******************************************************************************
* 函 數(shù) 名 : LcdWriteData
* 函數(shù)功能 : 向LCD寫入一個(gè)字節(jié)的數(shù)據(jù)
* 輸 入 : dat
* 輸 出 : 無(wú)
*******************************************************************************/
void LcdWriteData(uchar dat) //寫入數(shù)據(jù)
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //選擇輸入數(shù)據(jù)
LCD1602_RW = 0; //選擇寫入
LCD1602_DATAPINS = dat; //寫入數(shù)據(jù)
Lcd1602_Delay1ms(10);
LCD1602_E = 1; //寫入時(shí)序
Lcd1602_Delay1ms(10); //保持時(shí)間
LCD1602_E = 0;
}
/*******************************************************************************
* 函 數(shù) 名 : LcdInit()
* 函數(shù)功能 : 初始化LCD屏
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x38); //開(kāi)顯示
LcdWriteCom(0x0c); //開(kāi)顯示不顯示光標(biāo)
LcdWriteCom(0x06); //寫一個(gè)指針加1
}
/********************************************************************
* 函 數(shù) 名 : write_num
* 函數(shù)功能 : 向LCD寫入2位數(shù)字
* 輸 入 : 行、列、數(shù)值
* 輸 出 : 無(wú)
***********************************************************************/
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);
}
/********************************************************************
* 函 數(shù) 名 : write_string
* 函數(shù)功能 : 向LCD寫入字符串
* 輸 入 : 行、列、字符串
* 輸 出 : 無(wú)
***********************************************************************/
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++;
}
}
資料借鑒于此紛傳
閱讀全文