• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的溫濕度報(bào)警【SHT11,12864,上下限】(仿真)

01/21 09:12
907
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

有需要資料的可了解一下.docx

共1個(gè)文件

1、測(cè)量溫濕度,通過12864顯示。

2、上限溫濕度上下限,測(cè)量值過限報(bào)警。

3、溫濕度偏離正常值越大,蜂鳴器頻率越高。

說(shuō)明:SHT11溫濕度互相影響,誤差較大。

#include <AMPIRE128X64.h>

/************** 判忙函數(shù) **************/ 
void lcd_r_busy()
{
    P2 = 0x00;
    RS = 0;
    RW = 1;
    EN = 1;
    while (P2 & 0x80);  // 最高位DB7==1,則busy
    EN = 0;
}
 
 
/************* LCD寫命令函數(shù) *************/
void lcd_w_cmd(uchar value)
{
    lcd_r_busy();    // 每次讀寫操作前都要忙判斷
    RS = 0;
    RW = 0;
    P2 = value;
    EN = 1;       // 下降沿鎖存寫入的數(shù)據(jù)/命令
    _nop_();
    _nop_();
    EN = 0;
}
 
 
/************* LCD寫數(shù)據(jù)  **************/
void lcd_w_data(uchar value)
{
    lcd_r_busy();
    RS = 1;
    RW = 0;
    P2 = value;
    EN = 1;        // 下降沿鎖存寫入的數(shù)據(jù)/命令
    _nop_();
    _nop_();
    EN = 0;
}
 
 
/***************頁(yè)設(shè)置:顯示在哪一頁(yè)******************/
/*************共8頁(yè),一頁(yè)是8行像素點(diǎn)*****************/
void lcd_set_page(uchar page)
{
    page = 0xb8 | page;   // 頁(yè)的首地址為0xb8:page或上0xb8=選擇page頁(yè)
    lcd_w_cmd(page);
}
 
 
/************行設(shè)置:起始在哪一行********************/
/**********每頁(yè)共8行,一般從0行開始******************/
void lcd_set_line(uchar sline)
{
    sline = 0xc0 | sline;  // 起始行地址為0xc0:sline或上0xc0=選擇行
    lcd_w_cmd(sline);
}
 
 
/*************起始列設(shè)置+像素點(diǎn)選擇********************/
/***********每半片共64列,列值不得大于63***************/
void lcd_set_column(uchar column)
{
    column = 0x3f & column;  // 與上列的最大值63:0x3f 可得所選列值<63
    column = 0x40 | column;  // 得列的首地址
    lcd_w_cmd(column);
}
 
 
/*************設(shè)置顯示的開關(guān)********************/
/**********0為關(guān)閉顯示;1為 開啟顯示************/
void lcd_on_off(uchar set)
{
    set = 0x3e | set;    // =0011 111x----0x3e為關(guān)閉顯示;0x3f為開啟顯示
    lcd_w_cmd(set);
}
 
 
/*************選擇左右半屏顯示********************/
/********0-全屏顯示;1-左;2-右********************/
/************cs片選端低電平有效********************/
void lcd_cs(uchar sel)
{
    switch (sel)
    {
    case 0:CS1 = 0; CS2 = 0; break;   // 全屏顯示
    case 1:CS1 = 0; CS2 = 1; break;   // 左顯示
    case 2:CS1 = 1; CS2 = 0; break;   // 右顯示
    default:break;
    }
}
 
 
/*************清屏:選擇半屏********************/
/********0-清全屏;1-清左;2-清右***************/
void lcd_clear(uchar sel)
{
    uchar i, j;
    lcd_cs(sel);
    for (i = 0; i < 8; i++)
    {
        lcd_set_page(i);
        lcd_set_column(0);
        for (j = 0; j < 64; j++)
        {
            lcd_w_data(0x00);  // 每列全部寫0,列地址指針自動(dòng)+1
        }
    }
}

/****************LCD的初始化********************/
void lcd_init()
{
    lcd_r_busy();
    lcd_cs(0);
    lcd_on_off(0);     // 關(guān)顯示
    lcd_cs(0);
    lcd_on_off(1);     // 開顯示
    lcd_cs(0);
    lcd_clear(0);      // 清全屏
    lcd_set_line(0);  // 起始行設(shè)為0
}
 
 
/****************16*16像素的漢字顯示程序********************/
//CS左右半屏1,2
//page 頁(yè)
void display(uchar cs, uchar page, uchar column, uchar* p)
{
    uchar i;
    lcd_cs(cs);
    lcd_set_page(page);       // 要在本頁(yè)寫上半個(gè)漢字8*16
    lcd_set_column(column);     // 選擇起始列
    for (i = 0; i < 16; i++)
    {
        lcd_w_data(p[i]);      // 按列輸入上半個(gè)漢字的編碼8*16
    }
    lcd_set_page(page + 1);     // 要在下一頁(yè)寫下半個(gè)漢字8*16
    lcd_set_column(column);     // 選擇起始列
    for (i = 0; i < 16; i++)
    {
        lcd_w_data(p[i + 16]);   // 按列輸入下半個(gè)漢字的編碼8*16 
    }
}
/****************16*16像素的漢字顯示程序********************/
//CS左右半屏1,2
//page 頁(yè)
void display_num(uchar cs, uchar page, uchar column, uchar* p,uchar* q)
{
    uchar i;
    lcd_cs(cs);
    lcd_set_page(page);       // 要在本頁(yè)寫上半個(gè)漢字8*16
    lcd_set_column(column);     // 選擇起始列
    for (i = 0; i < 8; i++)
    {
        lcd_w_data(p[i]);      // 按列輸入上半個(gè)漢字的編碼8*16
    }
	for (i = 0; i < 8; i++)
    {
        lcd_w_data(q[i]);      // 按列輸入上半個(gè)漢字的編碼8*16
    }
    lcd_set_page(page + 1);     // 要在下一頁(yè)寫下半個(gè)漢字8*16
    lcd_set_column(column);     // 選擇起始列
    for (i = 8; i < 16; i++)
    {
        lcd_w_data(p[i]);   // 按列輸入下半個(gè)漢字的編碼8*16 
    }
	for (i = 8; i < 16; i++)
    {
        lcd_w_data(q[i]);   // 按列輸入下半個(gè)漢字的編碼8*16 
    }
}

資料借鑒于此紛傳

  • 有需要資料的可了解一下.docx
    下載

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時(shí)響應(yīng)!