?? lcdinit.c
字號:
#define uchar unsigned char
#define LCD_CHAR 0x14
sbit cd = P3^0; /*通道選擇*/
sbit rd = P3^1; /*讀操作信號*/
sbit wr = P3^2; /*寫操作信號*/
sbit error0 = P1^5; /*出錯提示1*/
sbit error1 = P1^6; /*出錯提示2*/
sbit error2 = P1^7; /*出錯提示3*/
/*讀狀態*/
uchar read_state(){
uchar temp;
P2 = 0xff;
cd = 1;
rd = 0;
temp = P2;
rd = 1;
return(temp);
}
/*STA0指令讀寫狀態,STA1數據讀寫狀態 判斷函數*/
void lcd_enable(){
uchar i;
for(i = 10; i > 0; i--)
if((read_state() & 0x03) == 0x03)
break;
if(i==0)error0=1;/*若i==0,說明錯誤*/
//else error0=0;
}
/*STA2數據自動讀狀態 判斷函數*/
void atrd_enable(){
uchar i;
for(i = 10; i > 0; i--)
if((read_state() & 0x04) == 0x04)
break;
if(i==0)error1=1;/*若i==0,說明錯誤*/
//else error1=0;
}
/*STA3數據自動寫狀態 判斷函數*/
void atwr_enable(){
uchar i;
for(i = 10; i > 0; i--)
if((read_state() & 0x08) == 0x08)
break;
if(i==0)error2=1;/*若i==0,說明錯誤*/
//else error2=0;
}
/*寫無參數函數*/
void write_cmd0(uchar cmd){
lcd_enable();
cd=1;
P2=cmd;
wr=0;
wr=1;
}
/*寫單參數函數*/
void write_cmd1(uchar data1, uchar cmd){
lcd_enable();
cd=0;
P2=data1;
wr=0;
wr=1;
lcd_enable();
cd=1;
P2=cmd;
wr=0;
wr=1;
}
/*寫雙參數函數*/
void write_cmd2(uchar data1, uchar data2, uchar cmd){
lcd_enable();
cd=0;
P2=data1;
wr=0;
wr=1;
lcd_enable();
cd=0;
P2=data2;
wr=0;
wr=1;
lcd_enable();
cd=1;
P2=cmd;
wr=0;
wr=1;
}
/*寫數據函數*/
void write_data(uchar data0){
lcd_enable();
cd=1;
P2=data0;
wr=0;
wr=1;
}
/*讀數據函數*/
uchar read_data(){
char temp;
lcd_enable();
cd = 0;
P2 = 0xff;
rd = 0;
temp = P2;
rd = 1;
return(temp); /*若返回0,可能錯誤*/
}
/*自動寫開始*/
void auto_write(){
write_cmd0(AUT_WR);
}
/*自動讀開始*/
void auto_read(){
write_cmd0(AUT_RD);
}
/*自動寫結束*/
void atwr_stop(){
write_cmd0(AUT_WO);
}
/*自動讀結束*/
void atrd_stop(){
write_cmd0(AUT_RO);
}
/*數據一次寫函數*/
void write_one(uchar data1, char way){
atwr_enable();
auto_write();
write_cmd1(data1,way);
atwr_stop();
}
/*數據一次讀函數*/
uchar read_one(char way){
uchar temp;
atrd_enable();
auto_read();
write_cmd0(way);
temp = read_data();
atrd_stop();
return(temp);
}
/*設置當前顯示位置函數x,y從0開始表示單位為字符*/
void set_xy(uchar x, uchar y){
int temp;
temp = y * LCD_CHAR + x;
write_cmd2(temp&0xff,temp/0xff,ADR_POS);
}
void set_adr(uchar D1, uchar D2){
write_cmd2(D1,D2,ADR_POS);
}
/*設置光標指針 x,y從0開始*/
void set_cur(char x, char y){
write_cmd2(x,y,CUR_POS);
}
/*CGRAM偏置地址設置函數*/
void set_cgram(){
write_cmd2(0x01,0x00,CGR_POS);//0000,1100,0000,0000 0C00
}
/*液晶初始化函數(文本區首地址D1,文本區首地址D2, 文本區寬度, 圖形區首地址D1, 圖形區首地址D2, 圖形區寬度, 光標形狀, 顯示方式, 顯示開關)*/
void lcd_init(uchar txtstpd1, uchar txtstpd2, uchar txtwid, uchar grhstpd1, uchar grhstpd2, uchar grhwid, uchar cur, uchar mod, uchar sw){
write_cmd2(txtstpd1,txtstpd2,TXT_STP); /*文本區首地址*/
write_cmd2(txtwid,0x00,TXT_WID); /*文本區寬度*/
write_cmd2(grhstpd1,grhstpd2,GRH_STP); /*圖形區首地址*/
write_cmd2(grhwid,0x00,GRH_WID); /*圖形區寬度*/
write_cmd0(CUR_SHP | cur); /*光標形狀*/
write_cmd0(mod); /*顯示方式*/
write_cmd0(DIS_SW | sw); /*顯示開關*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -