當前位置:編程學習大全網 - 編程語言 - Arduino編程12864

Arduino編程12864

/////////////////////////////////////////////////////////////////////////////////

//KS0180芯片128*64並口顯示液晶測試程序基於arduino平臺王進2014/9/27。

//如果程序很大,使用的ram芯片很小,可能就無法運行。如果不能運行,調用logo的部分可以刪除,這樣會大大減少RAM的使用。

//因為uno壞了,測試只在mega 2560成功。

//和ST7920芯片主要區別在於RAM地址的分配。註意RAM地址寫程序的分析。

//程序不使用庫文件,顯示程序不另外編寫子程序,主要是為了方便個人修改。

//////////////////////////////////////////////////////////////////////////////

//

int cs 1 = A0;//左半屏,高電平有效

int CS2 = a 1;//右半屏,高電平有效

int RS = 12;

int RW = 11;

int DB[] = {3,4,5,6,7,8,9,10 };//用數組定義總線需要的管腳DB 0-7。

int Enable = 2;

/////////////////////////////////////////////////////////////////////////

//位圖點陣數據表//

//內容是:南京周信電子,TEL025-66085988 //

//圖片尺寸:128 * 64 //

/////////////////////////////////////////////////////////////////////////

無符號字符標誌1[] =

{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

////////////////////////////////////////////////////////

//寫命令子程序

///////////////////////////////////////////////////////

void LcdCommandWrite(int value) {

digitalWrite(RS,0);

digitalWrite(RW,0);

int I = 0;

for(I = 3;我& lt= 10;I++) //總線分配

{

digitalWrite(i,value & amp01);//值和0001相給我。

值& gt& gt= 1;//值向右移動壹個位置。

}

digitalWrite(使能,1);

delayMicroseconds(1);

digitalWrite(使能,低電平);

delayMicroseconds(1);

}

//////////////////////////////////////////////////////

//寫數據子程序

/////////////////////////////////////////////////////

void LcdDataWrite(int value) {

//定義所有引腳

int I = 0;

digitalWrite(RS,1);

digitalWrite(RW,0);

//digitalWrite(DI,高);

//digitalWrite(RW,低);

for(I = DB[0];我& lt= DB[7];i++) {

digitalWrite(i,value & amp01);

值& gt& gt= 1;

}

digitalWrite(使能,高電平);

delayMicroseconds(1);

digitalWrite(使能,低電平);

delayMicroseconds(1);//延遲百萬分之壹秒

}

///////////////////////////////////////////////////

//輸出引腳聲明

//////////////////////////////////////////////////

無效設置(無效){

int I = 0;

for(I =啟用;我& lt= 12;i++) {

pinMode(i,輸出);

}

pinMode(A0,輸出);

pinMode(A1,輸出);

}

////////////////////////////////////////////

//循環主程序

/////////////////////////////////////////////////

無效循環(無效){

///////////////////////////////////////////////////////////////////////////////////////////

//初始化,因為KS0108芯片沒有初始化命令,需要給整個屏幕賦值0x00,否則會有雜點。

//找不到KS0108芯片的初始化命令,位圖調用總是有雜點,REST復位無法解決,所以采用了這種方法。

//////////////////////////////////////////////////////////////////////////////////////////

digitalWrite(CS1,1);

digitalWrite(CS2,1);

LCD command write(0x3e);//顯示關閉

int I = 0;

int yg,x,y;

內部溫度;

int tmp

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;//0xb8是家庭地址。

y = 0x40//0x40是第壹列地址。註意分析規範的RAM地址分布圖。

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

tmp = yg * 64

for(I = 0;我& lt64;i++)

{

lcddata write(0x 00);

tmp++;

}

}

lcdcommandwite(0x3f);//顯示圖像

延時(1);

//////////////////////////////////////////////////////////

//顯示ZXET徽標

///////////////////////////////////////////////////////////

digitalWrite(CS1,1);//先顯示左半屏。

digitalWrite(CS2,0);

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;

y = 0x40

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

tmp = 2 * yg * 64

for(I = 0;我& lt64;i++)

{

lcddata write(logo[tmp]);

tmp++;

}

}

lcdcommandwite(0x3f);//這裏直接連接右半屏顯示程序,沒有延遲。

////////////////////////

digitalWrite(CS1,0);//顯示右半邊屏幕

digitalWrite(CS2,1);

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;

y = 0x40

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

tmp =(2 * yg+1)* 64;

for(I = 0;我& lt64;i++)

{

lcddata write(logo[tmp]);

tmp++;

}

}

lcdcommandwite(0x3f);

延時(3000);

///////////////////////////////////////////////////////////////

//顯示文本,還是用位圖數據調用,KS0108無字庫只能采用這種方法。

///////////////////////////////////////////////////////////////

digitalWrite(CS1,1);

digitalWrite(CS2,0);

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;

y = 0x40

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

tmp = 2 * yg * 64

for(I = 0;我& lt64;i++)

{

lcddata write(logo 1[tmp]);

tmp++;

}

}

lcdcommandwite(0x3f);

//////////////////////////////////////

digitalWrite(CS1,0);

digitalWrite(CS2,1);

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;

y = 0x40

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

tmp =(2 * yg+1)* 64;

for(I = 0;我& lt64;i++)

{

lcddata write(logo 1[tmp]);

tmp++;

}

}

lcdcommandwite(0x3f);

延時(3000);

///////////////////////////////////////////////////////

//測試屏幕:全黑

////////////////////////////////////////////////////////

digitalWrite(CS1,1);

digitalWrite(CS2,1);

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;

y = 0x40

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

for(I = 0;我& lt64;i++)

{

lcddata write(0x ff);

}

}

lcdcommandwite(0x3f);

延時(3000);

///////////////////////////////////////////////////////

//測試屏幕:全白

////////////////////////////////////////////////////////

digitalWrite(CS1,1);

digitalWrite(CS2,1);

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;

y = 0x40

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

for(I = 0;我& lt64;i++)

{

lcddata write(0x 00);

}

}

lcdcommandwite(0x3f);

延時(3000);

///////////////////////////////////////////////////////

//測試屏幕:條紋數

////////////////////////////////////////////////////////

digitalWrite(CS1,1);

digitalWrite(CS2,1);

for(yg = 0;yg & lt8;yg++)

{

x = yg+0x b8;

for(I = 0;我& lt32;i++)

{

y = 0x 40+2 * I;

LcdCommandWrite(x);//寫入Y軸坐標

LcdCommandWrite(y);//寫入X軸坐標

lcddata write(0x ff);

}

}

lcdcommandwite(0x3f);

延時(3000);

}

  • 上一篇:程序員平常用什麽系統做開發?
  • 下一篇:2021年5月雙魚座工作運怎麽樣 具體分析
  • copyright 2024編程學習大全網