?? ocm12864.c
字號:
////*****判忙函數****////
////*****************////
void check_busy()
{
uchar read_data=0xff;
clear_rs();
set_rw();
clear_cs();
LCD_DIN_EN ;
do
{
set_en();
_NOP();
_NOP();
read_data=lcddata_in;
clear_en();
}while(read_data&0x80);
set_cs();
LCD_DOUT_EN;
}
////*****************////
////***寫數據函數****////
////*****************////
void write_data(uchar dat)
{
check_busy();
set_rs();
clear_rw();
clear_cs();
lcddata_out=dat;
set_en();
_NOP();
_NOP();
clear_en();
set_cs();
}
////*****************////
////****寫命令函數***////
////*****************////
void write_command(uchar command)
{
check_busy();
clear_rs();
clear_rw();
clear_cs();
lcddata_out=command;
set_en();
_NOP();
_NOP();
clear_cs();
set_cs();
}
////*****************////
////*****復位函數****////
////*****************////
void reset(void)
{
clear_reset();
LCD_Delay(200);
set_reset();
}
////*****************////
////*****清屏函數****////
////*****************////
void clear_screen(uchar m)
{
uchar i,j;
write_command(0x40); //設置起始行
for(i=0;i<8;i++)
{
write_command(i|0xb0); //設置起始頁
write_command(0x10); //設置列的高八位
write_command(0x00); //設置列的低八位
for(j=0;j<128;j++)
{
write_data(m); //設置清屏方式
}
}
}
////*****************////
////***初始化函數****////
////*****************////
void lcd_initial()
{
P2DIR=0XFF;
clear_en();
clear_rw();
clear_cs();
reset();
write_command(0xe2); //復位函數
write_command(0xa2); //液晶背光電壓選擇
write_command(0xa0); //液晶驅動輸出和內部RAM列選擇
write_command(0xc0); //控制輸出模式選擇
write_command(0x24); //液晶背光燈電壓設置為總電壓的50%
write_command(0x81); //液晶背光燈電壓設置控制使能
write_command(0x28); //對比度控制,液晶所有控制電壓全關
write_command(0x2f); //對比度控制,液晶所有控制電壓全開
write_command(0xa6); //現實模式設置(正常)
write_command(0xaf); //開顯示
write_command(0xa5); //液晶上所有顯示點開
LCD_Delay(1000);
write_command(0xa4); //液晶正常顯示
clear_screen(0); //以清屏
write_command(0x40); //顯示起始行設置
write_command(0xb0); //設置起始頁
write_command(0x10); //設定列高八位
write_command(0x00); //設定列低八位
}
////*****************////
////**設行起始頁位置**////
////*****************////
void set_page_address(uchar page)
{
write_command(0xb0|page);
}
////*****************////
////**設定起始列位置**////
////*****************////
void set_colume_address(uchar colume)
{
uchar temp;
temp=colume>>4;
write_command(temp|0x10); //先送列的高三位
temp=colume&0x0f;
write_command(temp|0x00); //再送列的低四位
}
////*****************////
//在指定位置顯示一個字符//
////*****************////
void disp_word(uchar col,uchar pag,uchar ascii) //列col 0~127 小行pag 0~7 字符ascii
{ //4行16列時(8*i,2*j,ascii);
uchar i,tmp;
uint x;
x=(ascii-0x20)*0x10; //字符從0x20開始起,每個16位
write_command((adj_page[pag]&0x07)|0xb0); //設置頁地址
tmp=col>>4;
write_command(tmp|0x10); //顯示列的高四位
tmp=col&0x0f;
write_command(tmp); //顯示列的低四位
for(i=0;i<8;i++)
{
write_data(ASCIIchardot[x]); //通過查找ASCIIchardot表得到相應字符串
x++;
}
pag++;//寫下半頁
write_command((adj_page[pag]&0x07)|0xb0); //設置頁地址
tmp=col>>4;
write_command(tmp|0x10); //顯示列的高四位
tmp=col&0x0f;
write_command(tmp); //顯示列的低四位
for(i=0;i<8;i++)
{
write_data(ASCIIchardot[x]);
x++;
}
pag--; //寫完一個字符頁還原
}
////*****************////
//在指定位置顯示一個漢字//
////*****************////
void disp_chn(uchar col,uchar pag,uchar cn) //列col 0~127 小行pag 0~7 漢字cn tab表中的序號0~x
{ //4行8列時(16*i,2*j,cn);
uchar i,tmp;
uint x;
x=cn<<5;
write_command((adj_page[pag]&0x07)|0xb0); //設置頁地址
tmp=col>>4;
write_command(tmp|0x10); //顯示列的高四位
tmp=col&0x0f;
write_command(tmp); //顯示列的低四位
for(i=0;i<16;i++)
{
write_data(tab[x]); //通過查找tab表得到相應字符串
x++;
}
pag++; //寫下半頁
write_command((adj_page[pag]&0x07)|0xb0); //設置頁地址
tmp=col>>4;
write_command(tmp|0x10); //顯示列的高四位
tmp=col&0x0f;
write_command(tmp); //顯示列的低四位
for(i=0;i<16;i++)
{
write_data(tab[x]);
x++;
}
pag--; //寫完一個字符頁還原
}
////*****************////
//在指定位置顯示一個字符串//
////*****************////
void disp_str(uchar col,uchar pag,uchar *cn)
{
while(*cn!=0)
{
if(col==128)
{
pag+=2;
col=0;
}
if(pag==8)
{
pag=0;
}
disp_word(col,pag,*cn++);
col+=8;
}
}
////***************************/////
////**在指定的位置顯示一個點***/////
////***************************////
void setpoint(uchar x,uchar y) //x橫坐標 0-127 往右 y縱坐標 0-63 往下
{
set_page_address(y/8); //y用以確定某一頁,0-7頁
set_colume_address(x); //x用于確定某一列,0-127列
write_data(0x01<<(y%8)); //再y確定某一頁的具體點
}
////***************************/////
////**在指定行pag低端的位置顯示一個點***/////
////***************************////
void point(uchar x,uchar y)
{
set_page_address(x); //x用以確定某一頁,0-7頁
set_colume_address(y); //Y用于確定某一列,0-127列
write_data(0x80);
}
////***************************/////
////********顯示圖片***********/////
////***************************////
void disp_bmp( uchar const *puts )
{
uchar i,j;
write_command(0x40);
for(i=8;i>0;i--)
{
write_command((i-1)|0xB0);
write_command(0x10);
write_command(0x00);
for(j=0;j<128;j++)
{
write_data( *puts++ );
}
}
}
////***************************/////
////*********顯示豎線*********/////
////***************************////
void shuxian(uchar n,uchar e,uchar f) //列 n 0-127 e,f行 0-7 從e行到f行畫豎線
{
uint i;
for(i=e;i<(f+1);i++)
{
set_page_address(i);
set_colume_address(n);
write_data(0xff);
}
}
////***************************/////
////*********顯示橫線*********/////
////***************************////
void hengxian(uchar k) //行 k 0-7 底端畫橫線
{
uint i;
for(i=0;i<128;i++)
{
point(k,i);
//write_data(0xff);
}
}
////*****************////
////*****延時函數****////
////*****************////
void LCD_Delay(unsigned long v)
{
while(v--);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -