?? lcd12864.h
字號:
//液晶宏定義
#define Disp_On 0x3f // 顯示開指令 00111111//
#define Disp_Off 0x3e // 顯示關指令 00111110//
#define Col_Add 0x40 // 定位到第0列指令 01000000//
#define Page_Add 0xb8 // 定位到第0頁指令 10111000//
#define Start_Line 0xc0 // 定位從DDROM中的第0行開始往屏幕上顯示 11000000//
//液晶引腳定義
//sbit RST = P2^2; // 復位端 //
sbit E = P2^7; // 使能端 //
sbit RW = P2^5; // 讀寫控制端 //
sbit RS = P2^3; // 數據或指令寄存器選擇端 //
sbit CS1 = P2^6; // 左屏使能 低電平選擇前面64列//
sbit CS2 = P2^4; // 右屏使能 //
/* 延時t毫秒 */
void delay(unsigned int t)
{
unsigned i;
while(t--)
{
/* 對于11.0592M時鐘,約延時1ms */
for (i=0;i<125;i++)
{}
}
}
/*-------------------------寫命令到LCD------------------------------*/
//相當于初始化,即從哪行哪列開始顯示
void write_command(unsigned char cmdcode)
{
RS = 0; //DI(RS) 為低電平時數據 D0~D7 將送入寄存器執行
RW = 0; //讀寫選擇,高電平(讀),低電平(寫)
P0 = cmdcode;
delay(0);
E = 1; //E高電平有效,下降沿鎖定數據
delay(0);
E = 0;
}
/*-------------------------寫數據到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
RS = 1; //DI(RS) 為高電平時數據 D0~D7 將送入顯示 RAM
RW = 0;
P0 = Dispdata;
delay(0);
E = 1;
delay(0);
E = 0;
}
/*------------------------清顯示屏--------------------------------*/
void Clr_Scr(void)
{
unsigned char j,k;
CS2=1;CS1=0; // 清左半屏 //
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清左上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
write_data(0x00);
}
CS2=0;CS1=1; // 清右半屏 //
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清右上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
write_data(0x00);
}
}
/*---------------------指定位置顯示字母 8 * 8-----------------------*/
void zf_disp8(unsigned char pag,unsigned char col, unsigned char code *zk)
{
unsigned char j=0,i=0;
if(col<128)
{
if((col&0x40) == 0) //判斷cor是否大于64
{
CS2=1;CS1=0; //小于64寫左邊部分
for(j=0;j<1;j++)
{
write_command(Page_Add+pag+j);
write_command(Col_Add+col);
for(i=0;i<8;i++)
write_data(zk[8*j+i]);
}
}
else
{
CS2=0;CS1=1; //大于64寫右邊部分
for(j=0;j<1;j++)
{
write_command(Page_Add+pag+j);
write_command(Col_Add+(col%64));
for(i=0;i<8;i++)
write_data(zk[8*j+i]);
}
}
}
}
/*------------------顯示12864圖片---------------------------*/
void Disp_Img(unsigned char code *img)
{
unsigned char j,k;
for(k=0;k<8;k++)
{
CS2=1;
CS1=0;
delay(10);
write_command(Page_Add+k); //選擇頁 頁++ 64行分成了8頁
write_command(Col_Add+0); //從第0列開始
for(j=0;j<64;j++) //左半邊 64 列
write_data(img[k*128+j]); // 左半邊 k 頁每行的數 為什么是 K*128,k*16就行了???因為每一頁有8行 8*16=128; write_data(img[k*16*8+j])
CS2=0;
CS1=1;
delay(10);
write_command(Page_Add+k); //選擇頁
write_command(Col_Add+0); //從第0列開始
for(j=64;j<128;j++) //右半邊 64 列
write_data(img[k*128+j]); // 右半邊 k 頁每行的數
}
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd()
{
//RST=0;
//delay(100);
//RST=1;
delay(100);
CS2=1;
CS1=1;
delay(100);
write_command(Disp_Off); //P0=00111110 關顯示
write_command(Page_Add+0); //P0=10111000 設置初始頁地址 000 :有8頁
write_command(Start_Line+0); //P0=11000000 設置顯示起始行 00000 :有64行
write_command(Col_Add+0); //P0=01000000 設置顯示起始列 00000 :有64列
write_command(Disp_On); //P0=00111111 開顯示
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -