|
LCD12864顯示屏實現(xiàn)曲線圖溫度顯示程序經(jīng)過調(diào)試正常運(yùn)行,可以給大家作一個參考。是51單片機(jī)開發(fā)板給的新教程與大家分享。
制作出來的實物圖如下:
調(diào)試圖.JPG (122.09 KB, 下載次數(shù): 85)
下載附件
2020-3-24 14:45 上傳
電路原理圖如下:
原理圖.JPG (108.12 KB, 下載次數(shù): 84)
下載附件
2020-3-24 14:11 上傳
Keil代碼下載:
LCD12864顯示溫度曲線(keil4).rar
(136.38 KB, 下載次數(shù): 335)
2020-3-24 14:11 上傳
點(diǎn)擊文件名下載附件
LCD12864 下載積分: 黑幣 -5
以下是部份代碼,完整包可以下載查看。溫度傳感器是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);//回到普通模式
}
|
評分
-
查看全部評分
|