#include <reg51.h>
#include <intrins.h>
//#include <at89x51.h>
sbit LCD_RS=P3^5;//定義引腳
sbit LCD_RW=P3^6;
sbit LCD_E=P3^4;
sbit PSB =P3^7; //PSB腳為12864-12系列的串、并通訊功能切換,我們使用8位并行接口,PSB=1
#define LCD_Data P0
#define Busy 0x80 //用于檢測(cè)LCD狀態(tài)字中的Busy標(biāo)識(shí)
void WriteDataLCD(unsigned char WDLCD);
void WriteCommandLCD(unsigned char WCLCD,BuysC);
unsigned char ReadDataLCD(void);
unsigned char ReadStatusLCD(void);
void LCDInit(void);
void LCDClear(void);
void LCDFlash(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void DisplayImage (unsigned char code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
code unsigned char uctech[] = {"大雄電子營(yíng)業(yè)部"};
code unsigned char net[] = {"ic2012.taobao.co"};
code unsigned char mcu[] = {"專(zhuān)業(yè)元件供應(yīng)商!"};
code unsigned char qq[] = {" QQ: 571630059 "};
code unsigned char tmp[]={//128*64點(diǎn)陣圖形數(shù)據(jù)
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X1E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X5F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X01,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X01,0XE1,0XFF,0XE0,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X0F,0XF9,0XFF,0XEF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X1F,0XFD,0XFF,0XFF,0XF8,0X00,0X00,0X18,0X00,0X87,0X00,0X18,0X00,0X00,0XC0,
0X00,0X1F,0XFE,0XFF,0XFF,0XF8,0X00,0X00,0X18,0X01,0X8D,0X80,0X18,0X01,0XF7,0XC0,
0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X18,0X01,0X8D,0XA0,0X18,0X00,0X03,0X80,
0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X18,0X27,0XFF,0XF1,0XFF,0XC0,0X06,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XF1,0X9D,0X01,0X08,0XC0,0X0C,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X18,0X01,0X7D,0X61,0X18,0XC0,0X08,0X60,
0X00,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X18,0X01,0XDF,0XE1,0XFF,0XC7,0XFF,0XF0,
0X00,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X1C,0X03,0XED,0X01,0X18,0XC0,0X08,0X00,
0X00,0X1F,0XFF,0X01,0XFF,0XF8,0X00,0X00,0X16,0X02,0X8D,0X61,0X18,0XC0,0X08,0X00,
0X00,0X0F,0XFE,0X00,0XFF,0XF8,0X00,0X00,0X32,0X02,0XAD,0X81,0XFF,0XC0,0X08,0X00,
0X00,0X07,0XF8,0X00,0X3F,0XD0,0X00,0X00,0X23,0X07,0X3D,0X01,0X18,0X20,0X08,0X00,
0X00,0XFD,0XF8,0X00,0X3F,0XE0,0X00,0X00,0X61,0X85,0XFD,0X20,0X18,0X20,0X08,0X00,
0X01,0XFF,0XF0,0X00,0X1F,0X40,0X00,0X00,0X80,0XF0,0X0F,0XE0,0X18,0X20,0X78,0X00,
0X03,0XFF,0XF0,0X00,0X0F,0X80,0X00,0X03,0X00,0X60,0X0C,0X00,0X0F,0XE0,0X18,0X00,
0X03,0XFF,0XE0,0X00,0X0F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X07,0XFF,0XE0,0X00,0X0F,0XF4,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X07,0XFF,0XE0,0X00,0X0F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X07,0XFF,0XE0,0X00,0X0F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X03,0XFF,0XE0,0X00,0X0F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X03,0XFF,0XE0,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X03,0XFF,0XF0,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X01,0XFF,0XF0,0X00,0X3F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X01,0XFF,0XF8,0X00,0X7F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0XFF,0XFC,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0X87,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0XFE,0X77,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X70,0X01,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X70,0X0F,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X70,0X3F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X78,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X1F,0XFC,0X79,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X7F,0XFF,0X39,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0XFF,0XFF,0XFD,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X7F,0XFF,0XFE,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XEF,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X0F,0XFF,0XEF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X07,0XFF,0XC7,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X01,0XFF,0X83,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X1E,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X01,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
void main(void)
{
Delay400Ms(); //啟動(dòng)等待,等LCD講入工作狀態(tài)
LCDInit(); //LCM初始化
Delay5Ms(); //延時(shí)片刻(可不要)
while(1){
LCDClear();
DisplayImage(tmp);//顯示圖形
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
LCDClear();
DisplayListChar(0,1,uctech); //顯示字庫(kù)中的中文數(shù)字
DisplayListChar(0,2,net); //顯示字庫(kù)中的中文數(shù)字
DisplayListChar(0,3,mcu); //顯示字庫(kù)中的中文
DisplayListChar(0,4,qq); //顯示字庫(kù)中的中文數(shù)字
Delay400Ms();
Delay400Ms();
Delay400Ms();
Delay400Ms();
LCDFlash(); //閃爍效果
//}
}
}
//寫(xiě)數(shù)據(jù)
void WriteDataLCD(unsigned char WDLCD)
{
ReadStatusLCD(); //檢測(cè)忙
LCD_RS = 1;
LCD_RW = 0;
LCD_Data = WDLCD;
LCD_E = 1;
LCD_E = 1;
LCD_E = 1;
LCD_E = 0;
}
//寫(xiě)指令
void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
{
if (BuysC) ReadStatusLCD(); //根據(jù)需要檢測(cè)忙
LCD_RS = 0;
LCD_RW = 0;
LCD_Data = WCLCD;
LCD_E = 1;
LCD_E = 1;
LCD_E = 1;
LCD_E = 0;
}
//讀數(shù)據(jù)
unsigned char ReadDataLCD(void)
{
LCD_RS = 1;
LCD_RW = 1;
LCD_E = 0;
LCD_E = 0;
LCD_E = 1;
return(LCD_Data);
}
//讀狀態(tài)
unsigned char ReadStatusLCD(void)
{
LCD_Data = 0xFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
while (LCD_Data & Busy); //檢測(cè)忙信號(hào)
LCD_E = 0;
return(LCD_Data);
}
void LCDInit(void) //LCM初始化
{
WriteCommandLCD(0x30,1); //顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)
WriteCommandLCD(0x01,1); //顯示清屏
WriteCommandLCD(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
WriteCommandLCD(0x0C,1); // 顯示開(kāi)及光標(biāo)設(shè)置
}
void LCDClear(void) //清屏
{
WriteCommandLCD(0x01,1); //顯示清屏
WriteCommandLCD(0x34,1); // 顯示光標(biāo)移動(dòng)設(shè)置
WriteCommandLCD(0x30,1); // 顯示開(kāi)及光標(biāo)設(shè)置
}
void LCDFlash(void) //閃爍效果
{
WriteCommandLCD(0x08,1); //顯示清屏
Delay400Ms();
WriteCommandLCD(0x0c,1); // 顯示開(kāi)及光標(biāo)設(shè)置
Delay400Ms();
WriteCommandLCD(0x08,1); //顯示清屏
Delay400Ms();
WriteCommandLCD(0x0c,1); // 顯示開(kāi)及光標(biāo)設(shè)置
Delay400Ms();
WriteCommandLCD(0x08,1); //顯示清屏
Delay400Ms();
}
//按指定位置顯示一個(gè)字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
if(Y<1)
Y=1;
if(Y>4)
Y=4;
X &= 0x0F; //限制X不能大于16,Y不能大于1
switch(Y){
case 1:X|=0X80;break;
case 2:X|=0X90;break;
case 3:X|=0X88;break;
case 4:X|=0X98;break;
}
WriteCommandLCD(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
WriteDataLCD(DData);
}
//按指定位置顯示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength,X2;
ListLength = 0;
X2=X;
if(Y<1)
Y=1;
if(Y>4)
Y=4;
X &= 0x0F; //限制X不能大于16,Y在1-4之內(nèi)
switch(Y){
case 1:X2|=0X80;break; //根據(jù)行數(shù)來(lái)選擇相應(yīng)地址
case 2:X2|=0X90;break;
case 3:X2|=0X88;break;
case 4:X2|=0X98;break;
}
WriteCommandLCD(X2, 1); //發(fā)送地址碼
while (DData[ListLength]>=0x20) //若到達(dá)字串尾則退出
{
if (X <= 0x0F) //X坐標(biāo)應(yīng)小于0xF
{
WriteDataLCD(DData[ListLength]); //
ListLength++;
X++;
Delay5Ms();
}
}
}
//圖形顯示122*32
void DisplayImage (unsigned char code *DData){
unsigned char x,y,i;
unsigned int tmp=0;
for(i=0;i<9;){ //分兩屏,上半屏和下半屏,因?yàn)槠鹗嫉刂凡煌枰珠_(kāi)
for(x=0;x<32;x++){ //32行
WriteCommandLCD(0x34,1);
WriteCommandLCD((0x80+x),1);//列地址
WriteCommandLCD((0x80+i),1); //行地址,下半屏,即第三行地址0X88
WriteCommandLCD(0x30,1);
for(y=0;y<16;y++)
WriteDataLCD(DData[tmp+y]);//讀取數(shù)據(jù)寫(xiě)入LCD
tmp+=16;
}
i+=8;
}
WriteCommandLCD(0x36,1); //擴(kuò)充功能設(shè)定
WriteCommandLCD(0x30,1);
}
//5ms延時(shí)
void Delay5Ms(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}
//400ms延時(shí)
void Delay400Ms(void)
{
unsigned char TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
|