|
240128液晶屏,搞了一個(gè)星期了,都沒(méi)能顯示字符,求救了,哪位大神愿意不吝賜教啊,萬(wàn)分感謝
以下是源程序: |
#include "LCD_240128.h"
//========================================================================
// 函數(shù): void LCD_DataWrite(unsigned int Data)
// 描述: 寫(xiě)一個(gè)字節(jié)的顯示數(shù)據(jù)至 LCD 中的顯示緩沖 RAM 當(dāng)中
// 參數(shù): Data 寫(xiě)入的數(shù)據(jù)
// 返回: 無(wú)
// 備注: 無(wú)
// 版本:
//========================================================================
void LCD_DataWrite(unsigned char Data)
{
LCD_CD_SetLow();
LCD_CE_SetLow();
LCD_WR_SetLow();
// __delay_us(5);
LATC = Data;
__delay_us(5);
LCD_WR_SetHigh();
LCD_CE_SetHigh();
// LCD_CD_SetHigh();
}
//========================================================================
// 函數(shù): void LCD_CmdWrite(unsigned int Command)
// 描述: 寫(xiě)一個(gè)字節(jié)的數(shù)據(jù)至 LCD 中的控制寄存器當(dāng)中
// 參數(shù): Command 寫(xiě)入的命令,低八位有效(byte)
// 返回: 無(wú)
// 備注: 無(wú)
// 版本:
//========================================================================
void LCD_CmdWrite(unsigned char Command)
{
LCD_CD_SetHigh();
LCD_CE_SetLow();
LCD_WR_SetLow();
// __delay_us(5);
LATC = Command;
__delay_us(5);
LCD_WR_SetHigh();
LCD_CE_SetHigh();
// LCD_CD_SetLow();
}
/******************************************************************************
*名稱: WriteDC()
*功能: 液晶寫(xiě)1數(shù)據(jù)1命令程序,dat為要寫(xiě)入的數(shù)據(jù),cmd為要寫(xiě)入的命令
******************************************************************************/
void WriteDC(unsigned char Data,unsigned char Command) //寫(xiě)一個(gè)數(shù)據(jù)和一個(gè)指令
{
LCD_DataWrite(Data);
LCD_CmdWrite(Command);
}
/******************************************************************************
*名稱: WriteDDC()
*功能: 液晶寫(xiě)2數(shù)據(jù)1命令程序,data為要寫(xiě)入的數(shù)據(jù),cmd為要寫(xiě)入的命令
******************************************************************************/
void WriteDDC(unsigned char Data1, unsigned char Data2, unsigned char Command) //寫(xiě)兩個(gè)數(shù)據(jù)和一個(gè)指令
{
LCD_DataWrite(Data1);
LCD_DataWrite(Data2);
LCD_CmdWrite(Command);
}
/******************************************************************************
*名稱: LCD_Init()
*功能: 液晶初始化程序
* 初始地址設(shè)置好后,在不同的地址段相同WriteData()輸出不同
******************************************************************************/
void LCD_Init(void) //液晶初始化
{
unsigned char Data1,Data2,Command;
LCD_WR_SetHigh();
LCD_CE_SetHigh();
// LCD_RST_SetLow();
// __delay_us(5);
LCD_RST_SetHigh();
/*********************設(shè)置文本顯示*****************************/
Data1 = 0x00;
Data2 = 0x10; //圖形顯示占用32*128=0xfff,故文本從0x1000開(kāi)始
Command = 0x40; //設(shè)置文本顯示區(qū)首地址
WriteDDC(Data1,Data2,Command);
Data1 = 0x20; //可以整屏顯示
Data2 = 0x00;
Command = 0x41; //設(shè)置文本顯示區(qū)寬度
WriteDDC(Data1,Data2,Command);
Data1 = 0x00;
Data2 = 0x00;
Command = 0x42; //設(shè)置圖形顯示區(qū)首地址
WriteDDC(Data1,Data2,Command);
Data1 = 0x20;
Data2 = 0x00;
Command = 0x43; //設(shè)置圖形顯示區(qū)寬度
WriteDDC(Data1,Data2,Command);
Command =0xa2; //設(shè)置光標(biāo)形狀
LCD_CmdWrite(Command);
Command = 0x80; //顯示方式設(shè)置
//啟用外部字符發(fā)生器,顯示方式是文本與圖形與
LCD_CmdWrite(Command);
Command = 0x9e; //啟用光標(biāo)閃爍,光標(biāo)不顯示,文本顯示與圖形顯示
LCD_CmdWrite(Command);
}
unsigned char Photo_code[] =
{
/*---- 圖片文件來(lái)自:【xxxx.jpg】 ----*/
/*---- 圖片寬度:96 圖片高度:93 ----*/
/*---- 本數(shù)據(jù)文件建立日期: ; 建立時(shí)間: ----*/
/*---- 本數(shù)據(jù)文件由PICtoCODE【圖片數(shù)據(jù)生成器】V1.0自動(dòng)生成! ----*/
};
#define CG_length 352
unsigned char CG_code[] =
{
};
/******************************************************************************
*名稱: Write_Str()
*功能: 液晶寫(xiě)字符程序,顯示ASCII字符,row為行(0~15),rol為列(0~29)
* 顯示ASCII字符為8*8點(diǎn)陣(屏為240*128點(diǎn)陣)
******************************************************************************/
void Write_Str(unsigned char row,unsigned char rol,unsigned char str)
{
unsigned int addres;
unsigned char Data1,Data2;
addres=row*32+rol+0x1000;
Data2=addres>>8;
Data1=addres;
WriteDDC(Data1,Data2,0x24);
LCD_CmdWrite(0xb0);
LCD_DataWrite(str);
LCD_CmdWrite(0xb2);
}
/******************************************************************************
*名稱: Write_Photo()
*功能: 液晶畫(huà)圖程序,row為圖片開(kāi)始行(0~127),rol為圖片開(kāi)始列(0~29),
* width為圖片長(zhǎng)(單位Bit),deep 為圖片寬(單位bit)
******************************************************************************/
void Write_Photo(unsigned char row,unsigned char rol,unsigned char width,unsigned char deep)
{
unsigned int address,Photolength,i;
unsigned char j,Data1,Data2,Command;
Photolength=width*deep;
address = row*32+rol;
Data1 = address; //取地址低八位
Data2 = address>>8; //取地址高八位
Command = 0x24;
WriteDDC(Data1,Data2,Command);
LCD_CmdWrite(0xb0);//自動(dòng)寫(xiě)模式
for(i=0;i<Photolength;i++)
{
LCD_DataWrite(Photo_code);
j++;
if(j==width)
{
LCD_CmdWrite(0xb2); //退出自動(dòng)寫(xiě)模式
address=address+32;
Data1 = address; //取地址低八位
Data2 = address>>8; //取地址高八位
Command = 0x24;
WriteDDC(Data1,Data2,Command);
j=0;
LCD_CmdWrite(0xb0); //進(jìn)入自動(dòng)寫(xiě)模式
}
}
LCD_CmdWrite(0xb2);
}
/******************************************************************************
*名稱: Write_Chinese()
*功能: 液晶寫(xiě)漢字程序,row為漢字開(kāi)始行,rol為漢字開(kāi)始列,Chinese為漢字字符串在
* CGRAM中的初地址 ,length為漢字字符串的長(zhǎng)度,(一個(gè)16*16點(diǎn)陣的漢字長(zhǎng)度為4)
******************************************************************************/
void SetCGRAM(void)
{
unsigned char Data1,Data2,Command;
unsigned int i;
Data1 = 0x03;
Data2 = 0x00; //設(shè)置偏移地址寄存器
Command = 0x22;
WriteDDC(Data1,Data2,Command);
Data1 = 0x00;
Data2 = 0x1c;
Command = 0x24; //設(shè)置地址指針
WriteDDC(Data1,Data2,Command);
Command = 0xb0; //進(jìn)入自動(dòng)寫(xiě)模式
LCD_CmdWrite(Command);
for (i = 0;i < CG_length; ++i)
{
LCD_DataWrite(CG_code);
}
Command = 0xb2; //退出自動(dòng)寫(xiě)模式
LCD_CmdWrite(Command);
}
/******************************************************************************
*名稱: Write_Chinese()
*功能: 液晶寫(xiě)漢字程序,row為漢字開(kāi)始行(0~15),rol為漢字開(kāi)始列(0~29),
* Chinese為漢字字符串在CGRAM中的初地址 ,
* length為漢字字符串的長(zhǎng)度,(一個(gè)16*16點(diǎn)陣的漢字長(zhǎng)度為4)
******************************************************************************/
void Write_Chinese(unsigned char row,unsigned char rol,unsigned char Chinese,unsigned char length) // 0x80 0x82 0x84 86
{ // 0x81 0x83 0x85 87
unsigned char Data1,Data2,Command;
unsigned char i;
unsigned int address;
/****************先寫(xiě)漢字上半部分*********************************/
address = row * 32 + rol+0x1000;
Data1 = address; //取地址低八位
Data2 = address>>8; //取地址高八位
Command = 0x24; //設(shè)置地址指針,字符顯示首位置
WriteDDC(Data1,Data2,Command);
Command = 0xb0; //進(jìn)去自動(dòng)寫(xiě)模式
LCD_CmdWrite(Command);
for(i=0;i<length;i++)
{
LCD_DataWrite(Chinese+i);
i++;
}
Command = 0xb2; //退出自動(dòng)寫(xiě)模式
LCD_CmdWrite(Command);
/****************再寫(xiě)漢字下半部分*********************************/
address = address+32;
Data1 = address; //取地址低八位
Data2 = address>>8; //取地址高八位
Command = 0x24; //設(shè)置地址指針,字符顯示首位置
WriteDDC(Data1,Data2,Command);
Command = 0xb0; //進(jìn)去自動(dòng)寫(xiě)模式
LCD_CmdWrite(Command);
for(i=1;i<length;i++)
{
LCD_DataWrite(Chinese+i);
i++;
}
Command = 0xb2; //退出自動(dòng)寫(xiě)模式
LCD_CmdWrite(Command);
}
|
|