?? lcd_t6963c.c
字號:
//LCD命令地址
#define address_dictate_LCD 0x7001
//LCD數(shù)據(jù)地址
#define address_data_LCD 0x7000
//reverse 光標(biāo)標(biāo)志
//讀取狀態(tài)字
unsigned char state_LCD_read()
{
unsigned char state_LCD;
unsigned char *p_dictate_LCD=(unsigned char *)address_dictate_LCD;
state_LCD=*p_dictate_LCD;
return state_LCD;
}
//判斷指令數(shù)據(jù)讀寫狀態(tài)
void judge_state_readwrite_dictatedata()
{
while((state_LCD_read()&0x03)!=3)
;
}
//判斷數(shù)據(jù)自動讀狀態(tài)
void judge_state_automatismread_data()
{
while((state_LCD_read()&0x04)!=4)
;
}
//判斷數(shù)據(jù)自動寫狀態(tài)
void judge_state_automatismwrite_data()
{
while((state_LCD_read()&0x08)!=8)
;
}
//指令寫入函數(shù)
void write_dictate(unsigned char command)
{
unsigned char *p_dictate_LCD=(unsigned char *)address_dictate_LCD;
judge_state_readwrite_dictatedata();
*p_dictate_LCD=command;
}
//數(shù)據(jù)讀出函數(shù)
unsigned char read_data()
{
unsigned char onedata;
unsigned char *p_data_LCD=(unsigned char *)address_data_LCD;
judge_state_readwrite_dictatedata();
onedata=*p_data_LCD;
return onedata;
}
//數(shù)據(jù)寫入函數(shù)
void write_data(unsigned char onedata)
{
unsigned char *p_data_LCD=(unsigned char *)address_data_LCD;
judge_state_readwrite_dictatedata();
*p_data_LCD=onedata;
}
//數(shù)據(jù)自動寫入函數(shù)
void automatismwrite_data(unsigned char onedata)
{
unsigned char *p_data_LCD=(unsigned char *)address_data_LCD;
judge_state_automatismwrite_data();
*p_data_LCD=onedata;
}
//一字節(jié)參數(shù)指令寫入函數(shù)
void write_dictate_oneparameter(unsigned char parameter,unsigned char command)
{
addr_cs(1);
write_data(parameter);
write_dictate(command);
}
//兩字節(jié)參數(shù)指令寫入函數(shù)
void write_dictate_twoparameter(unsigned char parameter1,unsigned char parameter2,unsigned char command)
{
addr_cs(1);
write_data(parameter1);
write_data(parameter2);
write_dictate(command);
}
//清除屏幕(清所有8K存儲空間)
void clear_screen()
{
unsigned int i;
write_dictate_twoparameter(0x00,0x00,0x24); //設(shè)置顯示存儲器首地址
write_dictate(0xb0); //設(shè)置自動寫狀態(tài)
for(i=10240;i>0;i--)
automatismwrite_data(0x00);
write_dictate(0xb2); //關(guān)閉自動寫狀態(tài)
}
//劃橫線
void line_x(unsigned x_line)
{
register unsigned char i;
register unsigned int address_display;
address_display=x_line*0x14+0x0800; //計算顯示存儲器地址
for(i=0;i<20;i++)
{
write_dictate_twoparameter((address_display&0xff),(address_display>>8),0x24);
write_dictate_oneparameter(0xff,0xc0);
address_display++;
}
}
//ASCII碼寫入函數(shù)
//x:0~19; y:0~127
void write_asc(unsigned char x,unsigned char y,unsigned char ascii,unsigned char reverse)
{
register unsigned char i,j;
register unsigned int address_display;
unsigned char account_ascii;
const unsigned char *p_ascii_sign;
const unsigned char *p_ascii_lattice;
address_display=y*0x14+x+0x0800; //計算顯示存儲器地址
for(;;)
{
i=0;
account_ascii=sizeof(ascii_model)/sizeof(ascii_model[0]);
while(i<account_ascii)
{
p_ascii_sign=ascii_model[i].ascii_sign;
if(*p_ascii_sign==ascii)
{
p_ascii_lattice=ascii_model[i].ascii_lattice;
for(j=0;j<16;j++) //計數(shù)值16
{
write_dictate_twoparameter((address_display&0xff),(address_display>>8),0x24);
if(reverse==0)
{
write_dictate_oneparameter(*(p_ascii_lattice++),0xc0); //寫入西文字符字模
}
else
{
write_dictate_oneparameter(~*(p_ascii_lattice++),0xc0); //寫入西文字符字模
}
address_display+=20; //修改顯示存儲器地址,顯示下一列(共16列)
}
break;
}
else
i++;
}
break;
}
}
//漢字寫入函數(shù)
//x_hz:0~19; y_hz:0~127
void write_chinese(unsigned char x,unsigned char y,unsigned char hz0,unsigned char hz1,unsigned char reverse)
{
register unsigned char i,j;
register unsigned int address_display;
unsigned char account_hz;
const unsigned char *p_zimo;
address_display=y*0x14+x+0x0800;
for(;;)
{
i=0;
account_hz=sizeof(zimo_hz)/sizeof(zimo_hz[0]);
while(i<account_hz)
{
if((hz0==zimo_hz[i].hzcode[0]&&hz1==zimo_hz[i].hzcode[1])||(i==account_hz-1))
{
p_zimo=zimo_hz[i].hz_dianzhen;
for(j=0;j<16;j++) //計數(shù)值16
{
write_dictate_twoparameter((address_display&0xff),(address_display>>8),0x24); //設(shè)置顯示存儲器地址
if(reverse==0)
{
write_dictate_oneparameter(*(p_zimo++),0xc0); //寫入漢字字模左部
write_dictate_oneparameter(*(p_zimo++),0xc0); //寫入漢字字模右部
}
else
{
write_dictate_oneparameter(~*(p_zimo++),0xc0); //寫入漢字字模左部
write_dictate_oneparameter(~*(p_zimo++),0xc0); //寫入漢字字模右部
}
address_display+=20; //修改顯示存儲器地址,顯示下一列(共16列)
}
break;
}
else
i++;
}
break;
}
}
//顯示函數(shù)
void display(unsigned char reverse)
{
unsigned char x_screen,y_screen; //字符在LCD的顯示行,列位置
unsigned char *p; //顯示字符形碼的內(nèi)存映射地址
unsigned char ascii,chinese0,chinese1;
x_screen=*p_address;
y_screen=*(p_address+1);
while(*p_content!=0)
{
if(*p_content<=128)//顯示ascii
{
ascii=*p_content;
write_asc(x_screen++,y_screen,ascii,reverse);
p_content++;
}
else //顯示漢字
{
chinese0=*p_content;
chinese1=*(p_content+1);
write_chinese(x_screen,y_screen,chinese0,chinese1,reverse);
p_content=p_content+2;
x_screen=x_screen+2;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -