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