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