?? 12864j.c.bak
字號:
/********************************************************
* 12864J液晶顯示器
*12864J:1.圖形點陣液晶顯示器,分辨率為128X64。可顯示圖形
* 和8×4個(16×16點陣)漢字。
* 2.采用8位數(shù)據(jù)總線并行輸入輸出和8條控制線。
* 3.指令簡單,7種指令
********************************************************/
//xdata unsigned char WR_COM_AD_L _at_ 0xF004; //寫左半屏指令地址
//xdata unsigned char WR_COM_AD_R _at_ 0xF000; //寫右半屏指令地址
//xdata unsigned char WR_DATA_AD_L _at_ 0xF006; //寫左半屏數(shù)據(jù)地址
//xdata unsigned char WR_DATA_AD_R _at_ 0xF002; //寫右半屏數(shù)據(jù)地址
//xdata unsigned char RD_BUSY_AD _at_ 0xF001; //查忙地址
//xdata unsigned char RD_DATA_AD _at_ 0xF003; //讀數(shù)據(jù)地址
#define DI P1.0
#define WR P1.1
#define E P1.2
#define CS1 P1.3
#define CS2 P1.4
#define RST P1.5
#define data P0
#define X 0xB8 //起始顯示行基址
#define Y 0x40 //起始顯示列基址
#define FirstLine 0xC0 //起始顯示行
//***************************************
//基本控制
//***************************************
//寫左半屏控制指令
void WRComL(unsigned char _data)
{
CS1=1;
CS2=1;
DI=0;
WR=0;
data = _data;
CS1=0;
delay();
CS1=1;
//while (RD_BUSY_AD & 0x80) //檢查液晶顯示是否處于忙狀態(tài)
//{;}
}
//寫右半屏控制指令
void WRComR(unsigned char _data)
{
//WR_COM_AD_R = _data;
//while (RD_BUSY_AD & 0x80) //檢查液晶顯示是否處于忙狀態(tài)
//{;}
CS1=1;
CS2=1;
DI=0;
WR=0;
data = _data;
delay();
CS2=0;
CS2=1;
}
//寫左半屏數(shù)據(jù)
void WRDataL(unsigned char _data)
{
CS1=1;
CS2=1;
DI=1;
WR=0;
data = _data;
CS1=0;
delay();
CS1=1;
}
//寫右半屏數(shù)據(jù)
void WRDataR(unsigned char _data)
{
WR_DATA_AD_R = _data;
while (RD_BUSY_AD & 0x80) //檢查液晶顯示是否處于忙狀態(tài)
{;};
}
//顯示左半屏數(shù)據(jù),count-顯示數(shù)據(jù)個數(shù)
void DisplayL(unsigned char *pt, char count)
{
while (count--)
{
WRDataL(*pt++); //寫左半屏數(shù)據(jù)
}
}
//顯示右半屏數(shù)據(jù),count-顯示數(shù)據(jù)個數(shù)
void DisplayR(unsigned char * pt, char count)
{
while (count--)
{
WRDataR(*pt++); //寫右半屏數(shù)據(jù)
}
}
//設置左半屏起始顯示行列地址,x-X起始行序數(shù)(0-7),y-Y起始列序數(shù)(0-63)
void SETXYL(unsigned char x, unsigned char y)
{
WRComL(x+X); //行地址=行序數(shù)+行基址
WRComL(y+Y); //列地址=列序數(shù)+列基址
}
//設置右半屏起始顯示行列地址,x:X起始行序數(shù)(0-7),y:Y起始列序數(shù)(0-63)
void SETXYR(unsigned char x, unsigned char y)
{
WRComR(x+X); //行地址=行序數(shù)+行基址
WRComR(y+Y); //列地址=列序數(shù)+列基址
}
//***************************************
//顯示圖形
//***************************************
//顯示左半屏一行圖形,A-X起始行序數(shù)(0-7),B-Y起始列地址序數(shù)(0-63)
void LineDisL(unsigned char x, unsigned char y, unsigned char * pt)
{
SETXYL(x,y); //設置起始顯示行列
DisplayL(pt, 64); //顯示數(shù)據(jù)
}
//顯示右半屏一行圖形,A-X起始行地址序數(shù)(0-7),B-Y起始列地址序數(shù)(0-63)
void LineDisR(unsigned char x, unsigned char y, unsigned char * pt)
{
SETXYR(x,y); //設置起始顯示行列
DisplayR(pt, 64); //顯示數(shù)據(jù)
}
//***************************************
//顯示字體,顯示一個數(shù)據(jù)要占用X行兩行位置
//***************************************
//右半屏顯示一個字節(jié)/字:x-起始顯示行序數(shù)X(0-7);y-起始顯示列序數(shù)Y(0-63);pt-顯示字數(shù)據(jù)首地址
void ByteDisR(unsigned char x, unsigned char y,unsigned char * pt)
{
SETXYR(x,y); //設置起始顯示行列地址
DisplayR(pt, 8); //顯示上半行數(shù)據(jù)
SETXYR(x+1,y); //設置起始顯示行列地址
DisplayR(pt+8, 8); //顯示下半行數(shù)據(jù)
}
void WordDisR(unsigned char x, unsigned char y,unsigned char * pt)
{
SETXYR(x,y); //設置起始顯示行列地址
DisplayR(pt, 16); //顯示上半行數(shù)據(jù)
SETXYR(x+1,y); //設置起始顯示行列地址
DisplayR(pt+16, 16); //顯示下半行數(shù)據(jù)
}
//左半屏顯示一個字節(jié)/字:x-起始顯示行序數(shù)X(0-7);y-起始顯示列序數(shù)Y(0-63);pt-顯示字數(shù)據(jù)首地址
void ByteDisL(unsigned char x, unsigned char y,unsigned char * pt)
{
SETXYL(x,y); //設置起始顯示行列地址
DisplayL(pt, 8); //顯示上半行數(shù)據(jù)
SETXYL(x+1,y); //設置起始顯示行列地址
DisplayL(pt+8, 8); //顯示下半行數(shù)據(jù)
}
void WordDisL(unsigned char x, unsigned char y,unsigned char * pt)
{
SETXYL(x,y); //設置起始顯示行列地址
DisplayL(pt, 16); //顯示上半行數(shù)據(jù)
SETXYL(x+1,y); //設置起始顯示行列地址
DisplayL(pt+16, 16); //顯示下半行數(shù)據(jù)
}
//清屏
void LCDClear()
{
//清左半屏
unsigned char x,y;
char j;
x = 0; //起始行,第0行
y = 0; //起始列,第0列
for (x = 0; x < 8; x++) //共8行
{
SETXYL(x,y); //設置起始顯示行列地址
j = 64;
while (j--)
WRDataL(0);
}
//清右半屏
x = 0; //起始行,第0行
y = 0; //起始列,第0列
for (x = 0; x < 8; x++) //共8行
{
SETXYR(x,y); //設置起始顯示行列地址
j = 64;
while (j--)
WRDataR(0);
}
}
//液晶初始化
void LCD_INIT()
{
WRComL(0x3e); //初始化左半屏,關顯示
WRComL(FirstLine); //設置起始顯示行,第0行
WRComR(0x3e); //初始化右半屏,關顯示
WRComR(FirstLine); //設置起始顯示行,第0行
LCDClear(); //清屏
WRComL(0x3f); //開顯示
WRComR(0x3f); //開顯示
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -