老早的东西了,已经淘汰了,网上只搜到汇编的了,好不容易把屏搞亮,却发现跟金鹏ocm240320的驱动一模一样,那个不爽啊
//uchar code sys_tab[8]={0x30,0x87,0x07,0x27,0x32,0xef,0x28,0x00};
//uchar code scr_tab[10]={0x00,0x00,0xf0,0xb0,0x04,0xf0,0x80,0x50,0x00,0x60};
uchar code sys_tab[8]={0x30,0x87,0x0f,0x27,0x3a,0xef,0x28,0x00}; //king
uchar code scr_tab[10]={0x00,0x00,0xf0,0x80,0x25,0xf0,0x00,0x4b,0xb0,0x4f};
#define addr_o 0x0000 //文本显示区首地址
#define addr_t 0x2580 //图形显示区首地址
#define addr_s 0x4b00 //第三区显示首地址
void write_com(uchar com)
{
LCD_RS=1;
LCD_WR=0;
LCD_RD=1;
LCD_DAT=com;
LCD_CS=0;
LCD_CS=1;
}
void write_dat(uchar dat)
{
LCD_RS=0;
LCD_WR=0;
LCD_RD=1;
LCD_DAT=dat;
LCD_CS=0;
LCD_CS=1;
}
uchar read_dat() //读数据
{
uchar dat;
LCD_CS=0;
LCD_RS=1;
LCD_WR=1;
LCD_RD=0;
DBUS=0xff;
dat=DBUS;
LCD_RD=1;
LCD_CS=1;
return dat;
}
void lcd_init()
{
uchar i;
write_com(0x58);//关显示
write_com(0x40);//系统设置参数8个
for(i=0;i<8;i++)
{
write_dat(sys_tab[ i]);
}
write_com(0x44);//设置显示区域参数10个
for(i=0;i<10;i++)
{
write_dat(scr_tab[ i]);
}
write_com(0x5d);//设置光标形状参数2个
write_dat(0x00);
write_dat(0x00);
write_com(0x5b);//设置显示方式参数1个
write_dat(0x0f);
write_com(0x59);//开显示
}
void write_uint(uint dat)
{
uchar datl,dath;
datl=dat;
dath=dat>>8;
write_dat(datl); //送低八位
write_dat(dath); //送高八位
}
void set_addr(uint add)
{
write_com(0x46);//设置光标地址
write_uint(add);
}
void show(uchar qu)
{
write_com(0x59); //DISP ON
if(qu==0)write_dat(0x00);//神马都不显示
if(qu==1)write_dat(0x04);//仅显示一区
if(qu==2)write_dat(0x10);//仅显示二区
if(qu==3)write_dat(0x14);//一二区同时显示
if(qu==4)write_dat(0x40);
if(qu==5)write_dat(0xff);
}
void lcd_clear(uint addr)
{
uint i;
write_com(0x4c);//向下移动
set_addr(addr);
write_com(0x42);//连续输入
for(i=0;i<9600;i++)
{
write_dat(0x00);
}
}
void write_init(uint addr)
{
write_com(0x4f);
write_com(0x46);
write_uint(addr);
write_com(0x42);
} |