找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 12728|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+LCD12864顯示屏實現(xiàn)曲線圖溫度顯示程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:214276 發(fā)表于 2020-3-24 14:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD12864顯示屏實現(xiàn)曲線圖溫度顯示程序經(jīng)過調(diào)試正常運(yùn)行,可以給大家作一個參考。是51單片機(jī)開發(fā)板給的新教程與大家分享。

制作出來的實物圖如下:


電路原理圖如下:



Keil代碼下載:
LCD12864顯示溫度曲線(keil4).rar (136.38 KB, 下載次數(shù): 335)

以下是部份代碼,完整包可以下載查看。溫度傳感器是DS18B20
#include<12864.h>

void delay(uint i)        //延時函數(shù)
{
        while(--i);
}
void Read_busy()        //LCD12864忙檢測
{
        RS=0;
        RW=1;
        EN=1;
        LCD_databus=0xFF;
        while(LCD_databus & 0x80);        //判斷最高位,1---busy,0---Nobusy
        EN=0;
}

void write_LCD_command(uchar value)//寫指令
{
        RS=0;
        RW=0;
        delay(40);
        EN=1;
        LCD_databus=value;
        delay(40);
        EN=0;
}

void write_LCD_data(uchar value)//寫數(shù)據(jù)
{
        RS=1;
        RW=0;
        delay(40);
        EN=1;
        LCD_databus=value;
        delay(40);
        EN=0;
}

void init_LCD()                //初始化LCD
{
        write_LCD_command(0x30);        //8位數(shù),基本指令
        delay(100);
        write_LCD_command(0x30);
        delay(37);
        write_LCD_command(0x0C);        //開顯示,不顯示光標(biāo),光標(biāo)不閃爍
        delay(100);
        write_LCD_command(0x01);        //清屏指令
        delay(100);
        write_LCD_command(0x06);        //沒寫入數(shù)據(jù),地址指針加1
}

void Clear_GDRAM()                //清楚GDRAM
{
        uchar x,y;
        for(y=0;y<64;y++)
        {
                for(x=0;x<16;x++)
                {
                        write_LCD_command(0x34);
                        write_LCD_command(y+0x80);        //先送垂直地址
                        write_LCD_command(x+0x80);        //后送水平地址
                        write_LCD_command(0x30);        //基本指令
                        write_LCD_data(0x00);                //寫入數(shù)據(jù)0
                        write_LCD_data(0x00);
                }
        }
}

uchar ReadByte()        //讀LCD
{
        uchar Read_value;
        Read_busy();
        RS=1;
        RW=1;
        EN=0;
        EN=1;
        Read_value=LCD_databus;        
        EN=0;
        
        return Read_value;
}

void display_BMP(uchar *address)//顯示圖片
{
        uchar i,j;
        for(i=16;i<32;i++)
        {
                write_LCD_command(0x80+i);        //先送垂直地址
                write_LCD_command(0x80);        //再送水平地址
                for(j=0;j<16;j++)
                {
                        write_LCD_data(*address);//寫入數(shù)據(jù)
                        address++;
                }
        }
        
        for(i=0;i<32;i++)
        {
                write_LCD_command(0x80+i);//先送垂直地址
                write_LCD_command(0x88);        //再送水平地址
                for(j=0;j<16;j++)
                {
                        write_LCD_data(*address);
                        address++;
                }
        }
        
}
/********************************************************
畫點(diǎn)函數(shù)說明:增加LCD讀函數(shù),目的是使不打點(diǎn)的地方數(shù)據(jù)保持
不變:方法是先讀出不打點(diǎn)位置的數(shù)據(jù),打完點(diǎn)后將讀到的數(shù)據(jù)寫
入原來的位置,只有這樣才會顯示打點(diǎn)的曲線。
*********************************************************/
void Draw_dots(uchar x,uchar y,uchar color)
{
        uchar ROW,xlabel,xlabel_bit;
        uchar Read_H,Read_L;
        write_LCD_command(0x34);
        write_LCD_command(0x36);
        xlabel=x>>4;
        xlabel_bit=x & 0x0F;
        
        if(y<32)
        {
                ROW=y;
        }
        else
        {
                ROW=y-32;
                xlabel+=8;
        }
        write_LCD_command(ROW+0x80);
        write_LCD_command(xlabel+0x80);
        ReadByte();        //讀取當(dāng)前GDRAM數(shù)據(jù)前要進(jìn)行一次空讀,接下來就可以讀出數(shù)據(jù)了
        Read_H=ReadByte();
        Read_L=ReadByte();
        
        write_LCD_command(ROW+0x80);
        write_LCD_command(xlabel+0x80);
        
        if(xlabel_bit<8)
        {
                switch(color)
                {
                        case 0:Read_H &= (~(0x01<<(7-xlabel_bit)));//若變白
                        break;
                        case 1:Read_H |= (0x01<<(7-xlabel_bit));//若涂黑
                        break;
                        case 2:Read_H ^= (0x01<<(7-xlabel_bit));//若反轉(zhuǎn)
                        break;        
                        default:break;
                }
                write_LCD_data(Read_H);//將數(shù)據(jù)寫入GDRAM
                write_LCD_data(Read_L);//先寫高位,再寫低位(地址指針順序)
        }
        else
        {
                switch(color)//color設(shè)置
                {
                        case 0: Read_L &= (~(0x01<<(15-xlabel_bit)));//若變白
                        break;
                        case 1: Read_L |= (0x01<<(15-xlabel_bit));//若涂黑
                        break;
                        case 2: Read_L ^= (0x01<<(15-xlabel_bit));//若反轉(zhuǎn)
                        break;
                        default:break;
                }
                write_LCD_data(Read_H);
                write_LCD_data(Read_L);//寫入數(shù)據(jù)
        }
        
        write_LCD_command(0x30);//回到普通模式
}


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:35873 發(fā)表于 2020-3-24 16:35 | 只看該作者
不錯  多謝分享
回復(fù)

使用道具 舉報

板凳
ID:688460 發(fā)表于 2020-5-2 10:49 | 只看該作者
不錯的創(chuàng)意,謝謝了!
回復(fù)

使用道具 舉報

地板
ID:290464 發(fā)表于 2021-1-15 16:08 | 只看該作者
學(xué)習(xí)了,多謝分享!
回復(fù)

使用道具 舉報

5#
ID:390416 發(fā)表于 2021-1-15 16:57 | 只看該作者
用OLED更方便,OLED12864是豎向取模的。LCD12864是橫向 需要轉(zhuǎn)換。有些麻煩
回復(fù)

使用道具 舉報

6#
ID:53978 發(fā)表于 2021-2-24 16:42 | 只看該作者
哪位大師幫忙把這個改一個max6675的采集程序啊,謝謝了。
回復(fù)

使用道具 舉報

7#
ID:883031 發(fā)表于 2021-2-25 10:04 | 只看該作者
測了,可用
回復(fù)

使用道具 舉報

8#
ID:959867 發(fā)表于 2021-8-11 09:54 | 只看該作者
這個開發(fā)板是哪家公司的?貌似跟我的普中的不一樣
回復(fù)

使用道具 舉報

9#
ID:744744 發(fā)表于 2022-5-19 11:20 來自手機(jī) | 只看該作者
直接用h12864更方便,畫點(diǎn)畫線畫框
回復(fù)

使用道具 舉報

10#
ID:1051166 發(fā)表于 2022-11-9 15:20 | 只看該作者
為啥Proteus打不開
回復(fù)

使用道具 舉報

11#
ID:262 發(fā)表于 2022-11-9 18:35 | 只看該作者

樓主直接做的成品電路,并沒有做Proteus啊,仿真都是在沒有實物的前提下做的,既然樓主有實物就沒有必要仿真了
回復(fù)

使用道具 舉報

12#
ID:237354 發(fā)表于 2022-11-9 21:20 | 只看該作者

STM32論壇有LCD12864仿真庫,另http://www.torrancerestoration.com/bbs/dpj-158960-1.html 找找
回復(fù)

使用道具 舉報

13#
ID:824664 發(fā)表于 2023-3-15 08:07 | 只看該作者
謝謝分享,可以參考示波器了,好好學(xué)習(xí)。
回復(fù)

使用道具 舉報

14#
ID:160725 發(fā)表于 2024-7-6 16:04 | 只看該作者
有價值,設(shè)計可以用
回復(fù)

使用道具 舉報

15#
ID:80273 發(fā)表于 2024-10-14 12:09 | 只看該作者
實現(xiàn)功能了,感謝分享
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表