📄 ks0108.c
字号:
};
#define SELECTCS 0
void LCD_WaitReady1(void) //判断LCD控制芯片KS0108是否忙
{
LCD_DATA=0xff;
_nop_();
LCD_CS2=SELECTCS;
LCD_RW=1;
LCD_RS=0;
LCD_E=1;
while (LCD_DATA&0x80);
LCD_CS2=!SELECTCS;
}
void LCD_WaitReady2(void) //判断LCD控制芯片KS0108是否忙
{
LCD_DATA=0xff;
_nop_();
LCD_CS1=SELECTCS;
LCD_RW=1;
LCD_RS=0;
LCD_E=1;
while (LCD_DATA&0x80);
LCD_CS1=!SELECTCS;
}
void LCD_WriteCommand1(char ch) //向LCD控制芯片KS0108发送控制命令
{
LCD_WaitReady1();
LCD_CS2=SELECTCS;
LCD_RW=0;
LCD_RS=0;
LCD_DATA=ch;
LCD_E=1;
LCD_E=0;
LCD_CS2=!SELECTCS;
}
void LCD_WriteCommand2(char ch) //向LCD控制芯片KS0108发送控制命令
{
LCD_WaitReady2();
LCD_CS1=SELECTCS;
LCD_RW=0;
LCD_RS=0;
LCD_DATA=ch;
LCD_E=1;
LCD_E=0;
LCD_CS1=!SELECTCS;
}
void LCD_WriteData1(char ch) //向LCD控制芯片KS0108发送数据命令
{
LCD_WaitReady1();
LCD_CS2=SELECTCS;
LCD_RW=0;
LCD_RS=1;
LCD_DATA=ch;
LCD_E=1;
LCD_E=0;
LCD_CS2=!SELECTCS;
}
void LCD_WriteData2(char ch) //向LCD控制芯片KS0108发送数据命令
{
LCD_WaitReady2();
LCD_CS1=SELECTCS;
LCD_RW=0;
LCD_RS=1;
LCD_DATA=ch;
LCD_E=1;
LCD_E=0;
LCD_CS1=!SELECTCS;
}
/*-- 文字: 汉 --*/
char code Han[]=
{
0x00,0x10,0x61,0x06,0xC0,0x30,0x02,0x3E,0xC2,0x02,0x82,0x62,0x1F,0x02,0x00,0x00,
0x00,0x02,0x02,0x3F,0x20,0x20,0x10,0x08,0x05,0x02,0x05,0x08,0x10,0x30,0x10,0x00,
};
/*-- 文字: 字 --*/
char code Zi[]=
{
0x00,0x00,0x10,0x0C,0x14,0x14,0x14,0x15,0xD6,0x54,0x34,0x14,0x14,0x8C,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x11,0x21,0x1F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
};
void LCD_WriteHZ(char x,char y,char *Dot) //显示16*16点阵汉字
{
char i;
for (i=0;i<32;i++)
{
if ((x+i%16)<64)
{
LCD_WriteCommand1(0xB8+y+i/16);
LCD_WriteCommand1(0x40+x+i%16);
LCD_WriteData1(Dot[i]);
}
else
{
LCD_WriteCommand2(0xB8+y+i/16);
LCD_WriteCommand2(0x40+x-64+i%16);
LCD_WriteData2(Dot[i]);
}
}
}
char code Number[]=
/*-- 文字: 0123456789:/ --*/
{
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x00,
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x14,0x12,0x11,0x10,0x18,0x00,
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x0C,0x10,0x10,0x10,0x11,0x0E,0x00,
0x00,0x80,0x40,0x20,0xF8,0x00,0x00,0x00,0x00,0x03,0x02,0x12,0x1F,0x12,0x12,0x00,
0x00,0xF8,0x88,0x48,0x48,0x48,0x88,0x00,0x00,0x0C,0x10,0x10,0x10,0x10,0x0F,0x00,
0x00,0xE0,0x10,0x88,0x88,0x98,0x00,0x00,0x00,0x0F,0x11,0x10,0x10,0x10,0x0F,0x00,
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,
0x00,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,
0x00,0xF0,0x08,0x08,0x08,0x90,0xE0,0x00,0x00,0x00,0x19,0x11,0x11,0x08,0x07,0x00,
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
};
void LCD_WriteChar(char x,char y,char *Dot) //显示8*16点阵字符
{
char i;
for (i=0;i<16;i++)
{
if ((x+i%8)<64)
{
LCD_WriteCommand1(0xB8+y+i/8);
LCD_WriteCommand1(0x40+x+i%8);
LCD_WriteData1(Dot[i]);
}
else
{
LCD_WriteCommand2(0xB8+y+i/8);
LCD_WriteCommand2(0x40+x-64+i%8);
LCD_WriteData2(Dot[i]);
}
}
}
void LCD_DispChar(char x,char y,char ch) //128*64 取值x=0-128 y=0-8
{
if ((ch>=0)&&(ch<=0xb))
{
LCD_WriteChar(x,y,&Number[ch*16]);
}
}
void InitLCD(void) //初始化LCD
{
char i,j;
LCD_RST=0;
Delay1ms(1);
LCD_RST=1;
LCD_WriteCommand1(0xc0);
LCD_WriteCommand2(0xc0);
LCD_WriteCommand1(0x3f); //开显示
LCD_WriteCommand2(0x3f);
for (j=0;j<8;j++) //清屏
{
LCD_WriteCommand1(0xB8+j); //清左半屏
LCD_WriteCommand1(0x40);
for (i=0;i<64;i++)
LCD_WriteData1(0x00);
LCD_WriteCommand2(0xB8+j); //清右半屏
LCD_WriteCommand2(0x40);
for (i=0;i<64;i++)
LCD_WriteData2(0x00);
}
}
void DispBmp(char *buf) //显示一幅位图
{
int i,j;
for (j=0;j<8;j++) //显示位图
{
LCD_WriteCommand1(0xB8+j);
LCD_WriteCommand1(0x40);
for (i=0;i<64;i++)
LCD_WriteData1(buf[(j*2)*64+i]);
LCD_WriteCommand2(0xB8+j);
LCD_WriteCommand2(0x40);
for (i=0;i<64;i++)
LCD_WriteData2(buf[(j*2+1)*64+i]);
}
}
void Delay1s(unsigned char T);
void TestLCD(void)
{
char i;
InitLCD();
DispBmp(screen);
for (i=0;i<64;i++)
{
Delay1ms(50);
LCD_WriteCommand1(0xc0+i%64); //设置起始行,实现向上滚动
LCD_WriteCommand2(0xc0+i%64);
}
Delay1s(3);
for (;;)
{
DispBmp(screen1);
Delay1s(3);
DispBmp(screen2);
Delay1s(3);
InitLCD();
LCD_WriteHZ(2,1,Han); //显示16*16点阵汉字'汉'
LCD_WriteHZ(60,3,Zi); //显示16*16点阵汉字'字'
Delay1s(3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -