當前位置:編程學習大全網 - 編程語言 - 我這裏有壹塊cgm12864液晶顯示屏,但是壹直點不亮,請問有誰能幫幫忙支支招

我這裏有壹塊cgm12864液晶顯示屏,但是壹直點不亮,請問有誰能幫幫忙支支招

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

//基於arduino 平臺的KS0180芯片128*64並口顯示LCD測試程序by 王瑾 2014/9/27

//程序較大使用小RAM芯片可能無法運行,如無法運行可將調用logo部分刪除,會大幅減小RAM使用

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

//和ST7920芯片主要是RAM地址的分布不同註意分析RAM地址寫程序

//程序沒有采用庫文件,顯示程序也沒有另寫子程序,主要是為了個人修改方便

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

//

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

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

int RS = 12;

int RW = 11;

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

int Enable = 2;

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

// Bitmap點陣數據表 //

// 內容為:南京舟芯電子,TEL025-66085988 //

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

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

unsigned char logo1[] =

{

0x00,0x00,0x00,0x00,0x00,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; i <= 10; i++) //總線賦值

{

digitalWrite(i,value & 01);//value與0001相與賦予i

value >>= 1;//value右移壹位

}

digitalWrite(Enable,1);

delayMicroseconds(1);

digitalWrite(Enable,LOW);

delayMicroseconds(1);

}

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

//寫數據子程序

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

void LcdDataWrite(int value) {

// 定義所有引腳

int i = 0;

digitalWrite(RS, 1);

digitalWrite(RW, 0);

//digitalWrite(DI, HIGH);

//digitalWrite(RW, LOW);

for (i=DB[0]; i <= DB[7]; i++) {

digitalWrite(i,value & 01);

value >>= 1;

}

digitalWrite(Enable,HIGH);

delayMicroseconds(1);

digitalWrite(Enable,LOW);

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

}

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

//輸出引腳聲明

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

void setup (void) {

int i = 0;

for (i=Enable; i <= 12; i++) {

pinMode(i,OUTPUT);

}

pinMode(A0,OUTPUT);

pinMode(A1,OUTPUT);

}

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

//循環主程序

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

void loop (void) {

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

//初始化,因為KS0108芯片無初始化命令需要對整個屏幕賦值0x00, 不然的話會有雜點

//沒有查到KS0108芯片的始化命令,位圖調用壹直有雜點,采用REST復位也不能解決,所以采用此方法

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

digitalWrite(CS1,1);

digitalWrite(CS2,1);

LcdCommandWrite(0x3e); // 顯示關

int i = 0;

int yg,x,y;

int temp;

int tmp;

for(yg=0;yg<8;yg++)

{

x=yg+0xb8; //0xb8為首頁地址

y=0x40; //0x40為首列地址註意分析規格書RAM地址分布圖

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

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

tmp=yg*64;

for(i=0;i<64;i++)

{

LcdDataWrite(0x00);

tmp++;

}

}

LcdCommandWrite(0x3f); //顯示圖象

delay(1);

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

//顯示ZXET logo

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

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

digitalWrite(CS2,0);

for(yg=0;yg<8;yg++)

{

x=yg+0xb8;

y=0x40;

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

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

tmp=2*yg*64;

for(i=0;i<64;i++)

{

LcdDataWrite(logo[tmp]);

tmp++;

}

}

LcdCommandWrite(0x3f); //此處無需延遲直接接右半屏顯示程序

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

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

digitalWrite(CS2,1);

for(yg=0;yg<8;yg++)

{

x=yg+0xb8;

y=0x40;

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

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

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

for(i=0;i<64;i++)

{

LcdDataWrite(logo[tmp]);

tmp++;

}

}

LcdCommandWrite(0x3f);

delay(3000);

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

//顯示 文字,依然采用位圖數據調用,KS0108無字庫只能采用這種辦法

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

digitalWrite(CS1,1);

digitalWrite(CS2,0);

for(yg=0;yg<8;yg++)

{

x=yg+0xb8;

y=0x40;

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

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

tmp=2*yg*64;

for(i=0;i<64;i++)

{

LcdDataWrite(logo1[tmp]);

tmp++;

}

}

LcdCommandWrite(0x3f);

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

digitalWrite(CS1,0);

digitalWrite(CS2,1);

for(yg=0;yg<8;yg++)

{

x=yg+0xb8;

y=0x40;

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

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

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

for(i=0;i<64;i++)

{

LcdDataWrite(logo1[tmp]);

tmp++;

}

}

LcdCommandWrite(0x3f);

delay(3000);

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

//測試畫面 :全黑

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

digitalWrite(CS1,1);

digitalWrite(CS2,1);

for(yg=0;yg<8;yg++)

{

x=yg+0xb8;

y=0x40;

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

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

for(i=0;i<64;i++)

{

LcdDataWrite(0xFF);

}

}

LcdCommandWrite(0x3f);

delay(3000);

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

//測試畫面 :全白

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

digitalWrite(CS1,1);

digitalWrite(CS2,1);

for(yg=0;yg<8;yg++)

{

x=yg+0xb8;

y=0x40;

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

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

for(i=0;i<64;i++)

{

LcdDataWrite(0x00);

}

}

LcdCommandWrite(0x3f);

delay(3000);

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

//測試畫面 :數條紋

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

digitalWrite(CS1,1);

digitalWrite(CS2,1);

for(yg=0;yg<8;yg++)

{

x=yg+0xb8;

for(i=0;i<32;i++)

{

y=0x40+2*i;

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

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

LcdDataWrite(0xFF);

}

}

LcdCommandWrite(0x3f);

delay(3000);

}

  • 上一篇:效率神器!全網最熱10大AI工具排行榜!
  • 下一篇:C語言break語句
  • copyright 2024編程學習大全網