📄 lcd.c
字号:
//================================================================
// KS0107寄存器初始化函数
//================================================================
void Init_0107()
{
bRET=0;
nc(10);;
bRET=1;
nc(10);
bCS1=0;
bCS2=0;
bCS3=0;
nc(10);
Write_0107_Reg(Set_Disp_Off);
nc(10);
Write_0107_Reg(Set_Start_Line);
nc(10);
Write_0107_Reg(Set_Page);
nc(10);
Write_0107_Reg(Set_Column);
nc(10);
Write_0107_Reg(Set_Disp_On);
nc(10);
}
//================================================================
// 清除KS0107显示存储器
//================================================================
Clr_Screen(BYTE bData_clr)
{
unsigned char j,k;
bCS1=0;
bCS2=0;
bCS3=0;
delay(2);
for(k=0;k<8;k++)
{
Write_0107_Reg(Set_Page+k);
nc(1);
Write_0107_Reg(Set_Column);
for(j=0;j<64;j++) Write_0107_Data(bData_clr);
}
}
Clr_x_y_Screen(unsigned char x,unsigned char y,unsigned char n,BYTE bData_clr)
{
unsigned char i;
unsigned char j;
for(i=0;i<n;i++)
for(j=0;j<8;j++)
lw(x*8+i*8+j+1,y,bData_clr);
}
//忙判别
void lcd_busy(void)
{
bDI=0;
bRW=1;
Lcd_Bus=0xFF;
while (1)
{
bRWE=1;
if (Lcd_Bus<0x80) break;
bRWE=0;
}
bRWE=0;
}
//设置xy
void set_xy(unsigned char x,unsigned char y)
{
if (x>=64)
{
if(x>=128)
{
bCS1=1;
bCS2=1;
bCS3=0;
}
else
{
bCS1=1;
bCS3=1;
bCS2=0;
}
}
else
{
bCS3=1;
bCS2=1;
bCS1=0;
}
x=x % 128;
lcd_busy();
bRWE=1;
bDI=0;
bRW=0;
Lcd_Bus=0x40|x;
nc(2);
bRWE=0;
nc(2);
lcd_busy();
bRWE=1;
bDI=0;
bRW=0;
nc(2);
Lcd_Bus=0xb8|y;
bRWE=0;
nc(2);
Lcd_Bus=0xFF;
nc(2);
}
void lw(unsigned char x,unsigned char y,unsigned char dd)
{
set_xy(x,y);
lcd_busy();
bDI=1;
bRW=0;
Lcd_Bus=dd;
bRWE=1;
bRWE=0;
Lcd_Bus=0xff;
}
void da(unsigned char x,unsigned char y,unsigned char n,unsigned char fb)
{
unsigned char i,dd;
n-=32;
if (n>128)
n=0;
if (fb)
dd=255;
else
dd=0;
lw(x*8,y,dd);
lw(x*8,y+1,dd);
for (i=0;i<7;i++)
{
dd=asc[i+n*16];
if (fb)
dd=255-dd;
lw(x*8+i+1,y,dd);
dd=asc[i+n*16+8];
if (fb)
dd=255-dd;
lw(x*8+i+1,y+1,dd);
}
}
void display_hz(unsigned char x,unsigned char y,unsigned char n,unsigned char fb)
{
unsigned char i,dd;
for (i=0;i<16;i++)
{
dd=Test_hz_Status[n][i];
if (fb)
dd=255-dd;
lw(x*8+i,y,dd);
dd=Test_hz_Status[n][i+16];
if (fb)
dd=255-dd;
lw(x*8+i,y+1,dd);
}
}
void display_string_hz(unsigned char x,unsigned char y,unsigned char c_Start,unsigned char c_Stop ,unsigned char fb)
{
unsigned char i;
unsigned char j;
j=0;
for (i=c_Start;i<=c_Stop;i++)
{
display_hz(x+j,y,i,fb);
j+=2;
}
}
void dh(unsigned char x,unsigned char y,unsigned char n,unsigned char fb)
{
unsigned char i,dd;
for (i=0;i<16;i++)
{
dd=hz[n][i];
if (fb)
dd=255-dd;
lw(x*8+i,y,dd);
dd=hz[n][i+16];
if (fb)
dd=255-dd;
lw(x*8+i,y+1,dd);
dd=hz[n][i+32];
if (fb)
dd=255-dd;
lw(x*8+i,y+2,dd);
dd=hz[n][i+48];
if (fb)
dd=255-dd;
lw(x*8+i,y+3,dd);
}
}
//显示字符,fb==1:反白显示
void da_big(unsigned char x,unsigned char y,unsigned char n,unsigned char fb)
{
unsigned char i,dd;
n-=32;
if (n>128)
n=0;
if (fb)
dd=255;
else
dd=0;
lw(x*8,y,dd);
lw(x*8,y+1,dd);
lw((x+1)*8,y,dd);
lw((x+1)*8,y+1,dd);
for (i=0;i<7;i++)
{
dd=asc[i+n*16];
if (fb)
dd=255-dd;
lw(x*16+i+1,y,dd);
dd=asc[i+n*16+8];
if (fb)
dd=255-dd;
lw(x*16+i+1,y+1,dd);
}
}
void int_init(void)//MCU INT INIT
{
IT0=1;
EX0=1;
EA=1;
}
//***************************MCU PROT INIT***************************
void port_init(void)//MCU PROT INIT
{
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
}
//***************************MCU PROT INIT***************************
//MCU INI INIT STOP
//==================================================================================================
void incept_int0(void) interrupt 0 using 0
{
BYTE bSel;
BYTE bStep;
WORD iStep;
BYTE i;
BYTE iRow;
BYTE iCol;
BYTE *iDisplay;
BYTE iDisplay_data[24];
bSel=P3 & 0x38;
bStep=Step_Bus;
switch(bSel)
{
case 0x00://P33:L P34:L P35:L
{
iStep=bStep;
if(bStep9==1)
iStep+=512;
if((bStep8==1)&(iStep<512))
iStep+=256;
P3=0x0F;
iDisplay=Test_content[iStep];
display_string(0,4,24,0,iDisplay);
P3=0xFF;
}
break;
case 0x08://P33:H P34:L P35:L
//Select Product
{
bStep=bStep & 0x0F;
P3=0x0F;
//Clr_Screen(0xFF);
if(bStep<9)
{
for(i=0;i<9;i++)
{
iRow=(i/3)*2;
iCol=(i%3)*8;
iDisplay=product_select_name[i];
if(i==bStep)
display_string(iCol,iRow,8,1,iDisplay);
else
display_string(iCol,iRow,8,0,iDisplay);
}
for(i=0;i<24;i++)
iDisplay_data[i]=' ';
for(i=9;i<11;i++)
{
iRow=(i/3)*2;
iCol=(i%3)*8;
display_string(iCol,iRow,8,0,iDisplay_data);
}
}
else
{
for(i=9;i<Max_Product;i++)
{
iRow=i % 9;
iRow=(iRow/3)*2;
iCol=i % 9;
iCol=(iCol%3)*8;
iDisplay=product_select_name[i];
if(i==bStep)
display_string(iCol,iRow,8,1,iDisplay);
else
display_string(iCol,iRow,8,0,iDisplay);
}
for(i=0;i<24;i++)
iDisplay_data[i]=' ';
for(i=Max_Product % 9;i<11;i++)
{
iRow=(i/3)*2;
iCol=(i%3)*8;
display_string(iCol,iRow,8,0,iDisplay_data);
}
}
display_string_hz(16,6,6,9,1);
P3=0xFF;
}
break;
case 0x18:
{
P3=0x0F;
bSel=bStep & 0x03;
if(bSel==1)
{
Clr_x_y_Screen(16,0,8,0xFF);
Clr_x_y_Screen(16,1,8,0xFF);
Clr_x_y_Screen(16,2,8,0xFF);
Clr_x_y_Screen(16,3,8,0xFF);
dh(18,0,0,1);
dh(20,0,1,1);
}
else
{
Clr_x_y_Screen(16,0,8,0xFF);
Clr_x_y_Screen(16,1,8,0xFF);
Clr_x_y_Screen(16,2,8,0xFF);
Clr_x_y_Screen(16,3,8,0xFF);
dh(18,0,2,1);
dh(20,0,3,1);
}
P3=0xFF;
}
break;
case 0x10://P33:L P34:H P35:L
//Init display
{
bSel=bStep % 0x0F;
bSel=bSel % 3;
P3=0x0F;
Clr_x_y_Screen(16,0,8,0xFF);
Clr_x_y_Screen(16,1,8,0xFF);
Clr_x_y_Screen(16,2,8,0xFF);
Clr_x_y_Screen(16,3,8,0xFF);
iDisplay=Test_Start[bSel];
for(i=0;i<16;i++)
iDisplay_data[i]=Test_Start[bSel][i];
for(i=16;i<24;i++)
iDisplay_data[i]=' ';
iDisplay=iDisplay_data;
display_string(0,4,24,0,iDisplay);
delay(4);
iDisplay=Test_Status[bSel];
display_string(18,1,4,1,iDisplay);
for(i=0;i<24;i++)
iDisplay_data[i]=' ';
iDisplay=iDisplay_data;
display_string(0,6,24,0,iDisplay);
P3=0xFF;
}
break;
case 0x20://P33:L P34:L P35:H
//Init display
{
bSel=bStep % 0x0F;
P3=0x0F;
Clr_Screen(0xFF);
iDisplay=client_name;
display_string(0,0,16,0,iDisplay);
iDisplay=product_select[bSel];
display_string(0,2,16,0,iDisplay);
P3=0xFF;
}
break;
case 0x30://P33:L P34:H P35:H
//display test data
//bCom0==P33
//bCom1==P34
//bCom2==P35
{
if(bStep8==1)
{
Disp_Inc=0;
for(i=0;i<24;i++)
iDisplay_data[i]=' ';
}
else
Disp_Inc++;
P3=0x0F;
iDisplay_data[Disp_Inc]=bStep;
iDisplay=iDisplay_data;
display_string(0,6,24,0,iDisplay);
P3=0xFF;
}
break;
default:
break;
}
}
//==================================================================================================
void display_string(unsigned char x,unsigned char y,unsigned char n,unsigned char fb,unsigned char *dis_string)
{
BYTE bJ;
for(bJ=0;bJ<n;bJ++)
{
if((x+bJ)<24)
{
da(x+bJ,y,*dis_string,fb);
nc(5);
}
else
{
da(x+bJ-24,y+2,*dis_string,fb);
nc(5);
}
dis_string++;
}
return;
}
//***************************MCU EX INT0***************************
void main()
{
//BYTE strInit[9]="Init OK";
//WORD bI;
//BYTE bJ;
int_init();
port_init();
//config_init();
delay(5);
//strInit[7]=0x0D;
//strInit[8]=0x0A;
//Send_String(strInit,9);
Init_0107();
delay(10);
Clr_Screen(0x00);
/*
for(bI=0;bI<16;bI++)
{
for(bJ=0;bJ<7;bJ++)
{
da(bI,bJ,0x36,0);
nc(5);
}
}
*/
display_string(0,0,19,0,client_name);
display_string(0,2,19,0,product_select[0]);
/*
for(bI=0;bI<448;bI++)
display_string(0,4,Test_content[bI],24,0);
delay(5);
display_string_hz(18,1,0,1,1);
display_string_hz(18,1,2,3,1);
display_string_hz(18,1,4,5,1);
dh(18,0,0,1);
dh(20,0,1,1);
delay(5);
dh(18,0,2,1);
dh(20,0,3,1);
Clr_x_y_Screen(16,0,8,0xFF);
Clr_x_y_Screen(16,1,8,0xFF);
Clr_x_y_Screen(16,2,8,0xFF);
Clr_x_y_Screen(16,3,8,0xFF);
//Clr_Screen(0x00);
display_string(18,1,Test_Status[0],4,1);
display_string(18,1,Test_Status[1],4,1);
display_string(18,1,Test_Status[2],4,1);
*/
for(;;);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -