㈠ (51 單片機)關於 12864 區域 繪圖,即 任意起始位置,繪任意太小的圖片
下面論述的前提:LZ 得清楚,12864 實際上是 256*32 點,把後面的 一半 搬到 第三行、第四行進行顯示的。(這也是為什麼 反白顯示 只能是 1、3同步、2、4同步的原因)
首先得了解 繪圖區 的結構:12864 這個屏的 繪圖區,分有 16大列,每大列 有 16小列(點),16*16=256,於是 它分成了 前 8大列 放在 第一、二行,後8 大列放在 第三、四行。告訴你這個結構,是想說:12864 的繪圖區,是以 大列(16小列) 為單位進行 數據輸入 顯示的。現在來說題目:
1、從 0,0開始,這個最簡單,由於從原點開始,可以直接輸入數據。但要注意:
①輸入的 橫向長度,必須是 大列(16點)的整數倍,也就是說,你輸入的數據,必須是 2Byte 的整數倍。如不足 長度,應自行補充。比如輸入的 圖片長度 為 35×16,橫向35,不是 16的整數倍,那麼輸完 前面的 32 點後,橫向還有 3個點,要補0 擴展成 16位 再輸入。也就是說,你補充了0(圖片顯示為空白)後,實際數據為 48×16。
②因12864 不支持 自動換行,數據輸入時,要自行在 圖片 橫向結束時,進行換行(不是 12864 的四個行,而是每個 小點行)。
2,不從 0,0開始,這個比較繁瑣。如果 起點的 橫坐標的是 16的整數倍,可以直接通過 繪圖 大列定位。如果起點坐標不是 16 的整數倍,那麼要 先在圖片每橫向數據 的前面進行 填0 補充,虛構一個 16的整數倍。比如,起點在 18,0,那就需要在前面補 2個0,虛構起點在 16,0 的位置。這只是困難的開頭,2個0 補充在數據頭後,數據的低 2位就得 往 下一個數據 推了。這就是 連續數據 移位,一直移動到 橫向長度 的結尾,再根據 LZ 上一個問題的方法處理結尾。連續數據 移位,比如:11100001 ,00011110,01111000,10000111,連續右移2位後,是 00111000,01000111,10011110,00100001, 11(000000,00000000),括弧部分為12864補充 的長度,讓數據為 16點 的整數倍。
1-1,圖片尺寸不足 12864,就會導致其他區域數據的不定性(為上次圖片的遺留),如果只需這個圖片,那就應該在 繪圖之前,進行 繪圖區清0,也就是 輸入 12864 點 的 0數據。
1-2,下半屏的坐標,參考 了解的 屏結構。
㈡ 12864的工作原理是什麼誰能詳細說明下
12864是屬於LCD 液晶顯示的,LCD是 Liquid Crystal Display 的簡稱,LCD 的構造是在兩片平行的玻璃當中放置液態的晶體,兩片玻璃中間有許多垂直和水平的細小電線,透過通電與否來控制桿狀水晶分子改變方向,將光線折射出來產生畫面。
12864就是利用這樣的原理實現字元與圖片的顯示的。但是單純的液晶屏僅僅指那兩片玻璃屏,不容易操作,所以一般都會加上驅動IC。
下面我以圖片詳細像你說明:
大體就是這樣了。
㈢ 帶字型檔的12864LCD如何同時顯示圖片與文字
上廣州銳顯的網站看看吧,他們有常式,可以問客服要
㈣ 12864如何顯示動畫啊
動畫其實是圖片的顯示。存若干張圖片,循環顯示圖片即可。
㈤ image2Lcd軟體生成12864液晶屏所需圖片代碼的方法,就是怎麼設置才能生成數組為1024的圖片庫。
用一些裁剪軟體將圖片裁剪成(128:64也就是2:1)的形式,保存位JPG格式,用IMAGE2LCD打開就號了,生成的16進制c文件數組要去掉前6位。
㈥ stm32驅動12864顯示圖片,程序下載進去後,怎麼要過一段時間才顯示出來
12864屬於點陣式液晶,需要將屏幕上每一個點都刷完才能顯示一幀圖片(其實圖片對於點陣式液晶來說也就是一個超大的表示點陣數據的數組),而12864的控制器刷屏幕的速度不夠高,因此需要等一段時間才能顯示出來,這一點你可以用示波器觀察下12864的行同步信號,是比較慢的。
㈦ 12864顯示64*128的圖片,裡面取模完了的一個數組,為什麼是十六進制的12864隻有顯示和
你好:
首先你沒搞懂二進制和十六進制的換算,0xff表示11111111,這樣就表示全都要顯示,0xfe表示11111110,這樣只有最低位處不顯示其他都顯示。
具體換算演算法在這里講不清楚,你去網路文庫搜索一下。
用十六進制的原因是這樣表示更方便,4個字元的格子能顯示8個字元格子的數據;其次是12864液晶成像原理,它不是一位數據一位數據往上寫,而是兩位元組兩位元組的往上寫,所以這樣的程序具有更高的可讀性,而不是要去花很多時間去看二進制數據。
希望我的回答能幫助到你。
㈧ c51單片機控制12864程序(c語言),顯示幾個字,或一些簡單的圖片就行!先謝謝了!
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P2^5; //片選信號
sbit SID=P2^6; //數據信號
sbit SCLK=P2^7; //時鍾信號
sbit RST=P2^2; //復位信號
sbit CH = P2^4; //並行、串列選擇信號
/********************************************************************
* 名稱 : delay()
* 功能 : 延時,延時時間為 100us * t。這是通過軟體延時,有一定誤差。
* 輸入 : t
* 輸出 : 無
***********************************************************************/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/********************************************************************
* 名稱 : sendbyte()
* 功能 : 按照液晶的串口通信協議,發送數據
* 輸入 : zdata
* 輸出 : 無
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/********************************************************************
* 名稱 : write_com()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名稱 : write_data()
* 功能 : 寫串口指令
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名稱 : lcdinit()
* 功能 : 初始化函數
* 輸入 : cmdcode
* 輸出 : 無
***********************************************************************/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
}
/********************************************************************
* 名稱 : hzkdis()
* 功能 : 顯示字元串
* 輸入 : *s
* 輸出 : 無
***********************************************************************/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名稱 : Test()
* 功能 : 顯示子函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81);
hzkdis(" HOT-51");
write_com(0x91);
hzkdis("單片機開發板");
write_com(0x89);
hzkdis(" ");
write_com(0x98);
hzkdis(" 東流電子");
}
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Main()
{
CH = 0;
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}