?? lcd12864應用.c
字號:
#include <reg51.h>
#include <string.h>
#include <math.h>
#define Disp_On 0x3f //顯示開
#define Disp_Off 0x3e //顯示關
#define Col_Add 0x40 //第一列
#define Page_Add 0xb8 //第一頁
#define Start_Line 0xc0 //從第0行開始顯示
#define Lcd_Bus P0 // MCU P0<------> LCM
sbit Mcs=P2^0; //Master chip enable CS1 左邊控制器
sbit Scs=P2^1; //Slave chip enable CS2 右邊控制器
sbit Enable=P2^4; //6800 mode Enable single E
sbit Di=P2^2; //Data or Instrument Select RS
sbit RW=P2^3; //Write or Read R/W
sbit Lcd_Rst=P2^5; //Lcm reset RST
char code ce[]={
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00
}; //“測”
char code shi[]={
0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00
}; //“試”
char code kai[]={
0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00
}; //“開”
char code shi3[]={
0x10,0x90,0x70,0x1F,0x12,0xF0,0x00,0x20,0x70,0x28,0x27,0x22,0x28,0x70,0x20,0x00,
0x40,0x21,0x12,0x0C,0x06,0x09,0x30,0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00
}; //“始”
char code wan[]={
0x00,0x90,0x8C,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x94,0x8C,0x04,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,0x00
}; //“完”
char code bi[]={
0x00,0x00,0xFF,0x88,0x48,0x28,0x08,0x80,0x7F,0x88,0x88,0x88,0x84,0x84,0xE0,0x00,
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00
}; //“畢”
unsigned char code FirstPage[]={
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,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,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,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0xFF,0x00,0x00,0x00,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x00,0x00,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,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,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,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x38,
0x30,0x30,0x20,0x30,0x30,0x3C,0x1F,0x00,0x00,0x00,0x1F,0x38,0x30,0x30,0x20,0x30,
0x30,0x3C,0x1F,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,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xE0,0x20,
0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xB0,0xE0,0x80,0x80,0xC0,0xC0,0xC0,0x80,0x80,
0xC0,0x60,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xB0,0xE0,0xE0,
0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xC0,
0x00,0x00,0x00,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,
0x80,0x80,0x80,0xA0,0xE0,0xC0,0x80,0x80,0x80,0x80,0xC0,0x80,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,
0x30,0x18,0x0E,0xFF,0x13,0x98,0xD9,0xFB,0x87,0x87,0xFF,0x02,0x00,0x00,0xFF,0x00,
0x00,0x00,0x00,0x00,0x58,0xD9,0xDA,0xDE,0xF8,0xEF,0xEF,0x6C,0xEC,0xFF,0x08,0x0C,
0xFC,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,0x8F,0x87,0x81,0xB5,0xE5,0xED,0x81,0xF1,
0xBF,0xC1,0xC1,0xC6,0xC3,0xC0,0x80,0x00,0x00,0x00,0x00,0x79,0x5F,0x41,0x7F,0xE3,
0x30,0xDC,0x17,0xF9,0x99,0x9B,0xEE,0x18,0x10,0x10,0x00,0x00,0x00,0x00,0x03,0x27,
0x36,0x3E,0x3E,0x76,0xF2,0x52,0x9A,0x9A,0xB3,0x33,0x01,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,0x0F,0x0C,0x09,0x0B,0x0C,0x0F,0x00,0x01,0x08,0x18,0x30,0x7F,0x00,
0x00,0x00,0x00,0x00,0x08,0x06,0x0B,0x19,0x3F,0x00,0x31,0x1F,0x07,0x01,0x00,0x10,
0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x21,0x31,0x11,0x19,0x0D,0x06,0x03,0x03,
0x06,0x0C,0x0C,0x18,0x38,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x19,0x31,0x3F,0x07,
0x10,0x13,0x13,0x11,0x19,0x1F,0x19,0x18,0x18,0x00,0x00,0x00,0x00,0x10,0x10,0x1B,
0x1B,0x1B,0x19,0x19,0x1F,0x19,0x19,0x09,0x09,0x08,0x08,0x08,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,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,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,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,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 delay(unsigned int t) //延時100us
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
void write_com(unsigned char cmdcode) //寫命令
{
Di=0;
RW=0;
Lcd_Bus=cmdcode;
delay(0); //延時20us
Enable=1;
delay(0);
Enable=0;
}
void write_data(unsigned char Dispdata) //寫數(shù)據(jù)
{
Di=1;
RW=0;
Lcd_Bus=Dispdata;
delay(0);
Enable=1;
delay(0);
Enable=0;
}
void frame() //畫一個方框
{
unsigned char i;
Mcs=0;Scs=0;delay(10); //有疑問 ???解答:因為Protues仿真模型的CS1和CS2都是低電平有效
write_com(Page_Add+0);
write_com(Col_Add+0);
for(i=0;i<64;i++) write_data(0x01);//畫一條水平線
write_com(Page_Add+7);
write_com(Col_Add+0);
for(i=0;i<64;i++) write_data(0x80);//畫一條水平線
for(i=0;i<8;i++)
{
Mcs=0;Scs=1;delay(10);
write_com(Page_Add+i);
write_com(Col_Add+63);
write_data(0xff); //畫一條垂直線
Mcs=1;Scs=0;delay(10);
write_com(Page_Add+i);
write_com(Col_Add+0);
write_data(0xff); //畫一條垂直線
}
}
void Clr_Scr() //清屏
{
unsigned char j,k;
Mcs=0;Scs=0;delay(10); //屏幕分成左右兩部分,分別由Mcs和Scs控制,列值都是從0-63
write_com(Page_Add+0);//有疑問 ???解答:因為Protues仿真模型的CS1和CS2都是低電平有效
write_com(Col_Add+0);
for(k=0;k<8;k++)
{
write_com(Page_Add+k);
for(j=0;j<64;j++)
{
write_com(Col_Add+j);
write_data(0x00);
}
}
}
void Disp_Img(unsigned char code *img) //顯示圖片
{
unsigned char j,k;
for(k=0;k<8;k++) //分成8頁進行顯示,每頁有8行
{
Mcs=1;Scs=0;delay(10); //先進行左半屏顯示
write_com(Page_Add+k);
write_com(Col_Add+0);
for(j=0;j<64;j++)
write_data(img[k*128+j]);//按列掃描顯示,一個字節(jié)就是一列,因為每頁有8行
Mcs=0;Scs=1; delay(10); //再進行右半屏顯示
write_com(Page_Add+k);
write_com(Col_Add+0);
for(j=64;j<128;j++)
write_data(img[k*128+j]);//按列掃描顯示,一個字節(jié)就是一列,因為每頁有8行
}
}
void Disp_H_Line() //顯示水平線
{
unsigned char i,j;
Mcs=0;Scs=0;delay(10); //有疑問 ???解答:因為Protues仿真模型的CS1和CS2都是低電平有效
write_com(Disp_On);
write_com(Page_Add);
write_com(Start_Line);
write_com(Col_Add);
for(j=0;j<8;j++)
{
write_com(Page_Add+j);
write_com(Col_Add+0);
// write_com(Start_Line+0);
for(i=0;i<64;i++)
write_data(0x55);
}
}
void Disp_V_Line() //顯示垂直線
{
unsigned char i,j;
Mcs=0;Scs=0;delay(10);//有疑問 ???解答:因為Protues仿真模型的CS1和CS2都是低電平有效
write_com(Disp_On);
write_com(Page_Add);
write_com(Start_Line);
write_com(Col_Add);
for(j=0;j<8;j++)
{
write_com(Page_Add+j);
write_com(Col_Add+0);
write_com(Start_Line+0);
for(i=0;i<32;i++)
{
write_data(0x00);
write_data(0xff);
}
}
}
/*寫16*16中文字符,分兩行顯示,先掃描16列,再掃描行*/
void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)
{
unsigned char j=0,i=0;
//Mcs=1;Scs=1;delay(10);
for(j=0;j<2;j++)
{
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<16;i++)
write_data(hzk[16*j+i]);
}
}
void init_lcd() //初始化LCD12864
{
Lcd_Rst=0;
delay(100);
Lcd_Rst=1;
delay(100);
Mcs=1;
Scs=1;
delay(100);
write_com(Disp_Off);
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(Col_Add+0);
write_com(Disp_On);
}
void Msg(int flg) //顯示相應的信息
{
Clr_Scr();
frame();
if(flg==0) //顯示"測試開始"
{
Mcs=1;Scs=0;
hz_disp16(3,32,ce);
delay(2000);
hz_disp16(3,48,shi);
delay(2000);
Mcs=0;Scs=1;
hz_disp16(3,0,kai);
delay(2000);
hz_disp16(3,16,shi3);
delay(2000);
}
else if(flg==1) //顯示"測試完畢"
{
Mcs=1;Scs=0;
hz_disp16(3,32,ce);
hz_disp16(3,48,shi);
Mcs=0;Scs=1;
hz_disp16(3,0,wan);
hz_disp16(3,16,bi);
}
}
main()
{
unsigned char i=0;
while(1)
{
init_lcd();
//Clr_Scr();
Disp_Img(FirstPage);
delay(30000);
Clr_Scr();
//delay(30000);
Msg(0);
delay(10000);
Clr_Scr();
Disp_H_Line();
delay(10000);
Clr_Scr();
Disp_V_Line();
delay(10000);
Clr_Scr();
Msg(1);
delay(10000);
Clr_Scr();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -