📄 lcd_driver.c
字号:
void sendorder(void) //?????????
{
IOWR(LCD_CON_ADDRESS,0,0);
IOWR(LCD_CON_ADDRESS,0,4);//0000-->0001-->0000
IOWR(LCD_CON_ADDRESS,0,0);
}
//--------------------?????-------------------------
void senddata(void) //?????????
{
IOWR(LCD_CON_ADDRESS,0,0);
IOWR(LCD_CON_ADDRESS,0,5);//0000-->0101-->0000
IOWR(LCD_CON_ADDRESS,0,0);
}
//-------------------?????---------------------------
void setpage( int a)
{
a|=0x00b0;
IOWR(LCD_DAT_ADDRESS,0,a);
sendorder();
}
//-------------------?????----------------------------
void setaddr( int addr)
{
int high,low;
low=addr&0x0f;
high=addr&0xf0;
high=high>>4;
high=high|0x10;
IOWR(LCD_DAT_ADDRESS,0,high);
sendorder();
IOWR(LCD_DAT_ADDRESS,0,low);
sendorder();
}
//---------------------?????----------------------
void InitGraphic(void)
{
int i,j;
IOWR(LCD_DAT_ADDRESS,0,0x000000e2); //?? reset
sendorder(); //??????
IOWR(LCD_DAT_ADDRESS,0,0x000000e3); //???
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x0000c0); //COM?????63---0
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x0000a0); //ADC(segment??)????? A1 reverse
sendorder();
//????
//---------------------------------------------------------
IOWR(LCD_DAT_ADDRESS,0,0x0000a2);// LCD???? 1/9 bias
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x000024); //V5??????????
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x000081); //?????? ?????
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x00001a); //???????
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x0000d2); //????
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x000000); //??2
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x00002c); //?????? REGULATOR on
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x00002e); //?????? +FOLLOWER oFF ????
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x00002f); //?????? +FOLLOWER on ????
sendorder(); //power set over
//-----------------------------------------------------------
IOWR(LCD_DAT_ADDRESS,0,0x0000af); //???
sendorder();
setpage(0); //?????0?
IOWR(LCD_DAT_ADDRESS,0,0x000040); //?????????0?
sendorder();
setaddr(0); //?????0?
IOWR(LCD_DAT_ADDRESS,0,0x0000a5); //????
sendorder();
IOWR(LCD_DAT_ADDRESS,0,0x0000a4); //????
sendorder();
ClearScreen(0);
for(i=0;i<8;i++)
for(j=0;j<128;j++)
BUFFER[i][j]=0; //????ROM??
}
//---------------------????----------------------------
void ClearScreen( int a)
{
int i,j;
if(a!=0) a=0x0000;
for(i=0;i<8;i++){
pre_set(i,0);
for(j=0;j<128;j++)
print(a);
}
}
//-------------------??????----------------------------
void Light(int x,int y,int on)
{int i;
int page,data;
int c;
if((x<128)&&(y<64)){
page=y/8;
setpage(page);
setaddr(x);
c=y%8;
data=1;
if(c==0)data=1;//do noth;
else
for(i=0;i<c;i++)data*=2;
if(on==0){ //turn off
data=255-data;
data=data&BUFFER[page][x];
}
else
data=data|BUFFER[page][x];
BUFFER[page][x]=data;
print(data);
}
else;
}
//-------------------------?????--------------------------
void pre_set(int a,int b)
{
setpage(a);
setaddr(b);
}
//--------------------------?????--------------------------
void print(int a)
{
IOWR(LCD_DAT_ADDRESS,0,a);
senddata();
}
//---------------------------????---------------------------
void Reprint(void)
{
int ii;
int i;
int j;
int k;
int page;
int addr;
alt_u8 buffer[1024];
alt_u32 cycle=0xff000000;
int unicode[64]={0x8BF7,0x9009,0x62E9,0x5BFB,0x822A,0x7CFA
,0x7EDE,0x76EE,0x7684,0x5730,0x897F,0x5B89
,0x7535,0x5B66,0x9662,0x706B,0x8F66,0x7AD7
,0x5317,0x5927,0x6B22,0x8FCD,0x4F7F,0x7528
,0x5C0F,0x5BE7,0x949F,0x697C,0x90AD,0x5DF2
,0x8FDA,0x5165,0x9632,0x76D7,0x72B6,0x6001
,0x524D,0x5728,0x9644,0x8FD1,0x95E8,0x88AA
,0x6253,0x5F00,0x5173,0x95ED,0x76D6,0x540E
,0x53D1,0x52A7,0x7184,0x9000,0x51FA,0xffff};
InitGraphic();
printf("Look at the LCD!\n");
while(1){
page=7;
addr=0;
i=0;
for(ii=0;ii<32;ii++)
for(j=0;j<8;j++)
for(k=0;k<4;k++){
buffer[i]=(ALT_CI_UNICODE2CHAR(unicode[ii],j)&(cycle>>k*8))>>((3-k)*8);
i++;
}
for(i=0;i<4;i++){
for(j=0;j<8;j++){
pre_set(page,addr);
for(k=0;k<16;k++){
print(buffer[(i*8+j)*32+k]);
printf("%x",buffer[(i*8+j)*32+k]);
}
pre_set(page-1,addr);
for(k=16;k<32;k++){
print(buffer[(i*8+j)*32+k]);
printf("%x",buffer[(i*8+j)*32+k]);
}
addr+=16;
}
page-=2;
addr=0;
}
usleep(4000000);
i=0;
page=7;
addr=0;
for(ii=32;ii<64;ii++)
for(j=0;j<8;j++)
for(k=0;k<4;k++){
buffer[i]=(ALT_CI_UNICODE2CHAR(unicode[ii],j)&(cycle>>k*8))>>((3-k)*8);
i++;
}
//Reprint();
for(i=0;i<4;i++){
for(j=0;j<8;j++){
pre_set(page,addr);
for(k=0;k<16;k++){
print(buffer[(i*8+j)*32+k]);
printf("%x",buffer[(i*8+j)*32+k]);
}
pre_set(page-1,addr);
for(k=16;k<32;k++){
print(buffer[(i*8+j)*32+k]);
printf("%x",buffer[(i*8+j)*32+k]);
}
addr+=16;
}
page-=2;
addr=0;
}
usleep(4000000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -