📄 lcd_128_64.c
字号:
//128*64 显示驱动程序
/* LCD 忙判断 */
void lcd_busy( void )
{
p_di=0;
p_rw=1;
P0=0xff;
while(1)
{
p_e=1;
if (P0<0x80) break;
p_e=0;
}
p_e=0;
}
/* LCD 设置xy */
void set_xy(unsigned char x, unsigned char y)
{
if (x>=64)
{
p_csa=0;
p_csb=1;
}
else
{
p_csa=1;
p_csb=0;
}
lcd_busy();
p_di=p_rw=0;
P0=0x40|x;
p_e=1;
p_e=0;
lcd_busy();
p_di=p_rw=0;
P0=0xb8|y;
p_e=1;
p_e=0;
P0=0xff;
}
/* LCD 写数据 */
void lw(unsigned char x, unsigned char y, unsigned char dd)
{
set_xy(x,y);
lcd_busy();
p_di=1;
p_rw=0;
P0=dd;
p_e=1;
p_e=0;
P0=0xff;
}/* LCD 读数据 */
unsigned char lr(unsigned char x, unsigned char y)
{
unsigned char dd;
set_xy(x,y);
lcd_busy();
p_di=1;
p_rw=1;
P0=0xff;
p_e=1;
_nop_();
dd=P0;
p_e=0;
return dd;
}
/* LCD 初始化 */
void lcd_init(void)
{
unsigned char x,y;
//复位 LCD
p_rst=1;
p_rst=0;
_nop_();
_nop_();
_nop_();
p_rst=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//开显示
p_e=0;
p_di=p_rw=0;
p_csa=p_csb=0;
p_csa=1; P0=0x3f; p_e=1; p_e=0; p_csa=0;
p_csb=1; P0=0x3f; p_e=1;p_e=0; p_csb=0;
//0行开始显示
p_csa=1; lcd_busy(); p_di=p_rw=0; P0=0xc0; p_e=1; p_e=0; p_csa=0;
p_csb=1; lcd_busy(); p_di=p_rw=0; P0=0xc0; p_e=1; p_e=0; p_csb=0;
for(y=0; y<8; y++)
{
for(x=0; x<128; x++)lw(x,y,0);
}
}
/* 显示16*16汉字, fb==1:反白显示 */
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[i+n*32];
if (fb) if (n != 0xff) dd=255-dd;
lw(x*8+i,y,dd);
dd=hz[i+n*32+16];
if (fb) if (n != 0xff) dd=255-dd;
lw(x*8+i,y+1,dd);
}
}
/* 显示8*16字符, fb==1:反白显示 */
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;
for (i=0; i<8; i++)
{
dd=asc[i+n*16];
if (fb) dd=255-dd;
lw(x*8+i,y,dd);
dd=asc[i+n*16+8];
if (fb) dd=255-dd;
lw(x*8+i,y+1,dd);
}
}
/* 显示8*8字符, fb==1:反白显示 */
void dx(unsigned char x, unsigned char y, unsigned char n, unsigned char fb)
{
unsigned char i,dd;
if (n>128)n=0;
for (i=0; i<8; i++)
{
dd=xz[i+n*8];
if (fb) dd=255-dd;
lw(x*8+i,y+1,dd);
}
}
/* 显示32*32图标, fb==1:反白显示 */
void dm(unsigned char x, unsigned char y, unsigned char n, unsigned char fb)
{
unsigned char i,dd;
if (n>128)n=0;
for (i=0; i<32; i++)
{
dd=tb[i+n*128];
if (fb) dd=255-dd;
lw(x*8+i,y,dd);
dd=tb[i+n*128+32];
if (fb) dd=255-dd;
lw(x*8+i,y+1,dd);
dd=tb[i+n*128+64];
if (fb) dd=255-dd;
lw(x*8+i,y+2,dd);
dd=tb[i+n*128+96];
if (fb) dd=255-dd;
lw(x*8+i+1,y+3,dd);
}
}
/* 显示24*24汉字, fb==1:反白显示 */
void dhD(unsigned char x, unsigned char y, unsigned char n, unsigned char fb)
{
unsigned char i,dd;
if (n>128)n=0;
for (i=0; i<24; i++)
{
dd=hzD[i+n*72];
if (fb) dd=255-dd;
lw(x*8+i,y,dd);
dd=hzD[i+n*72+24];
if (fb) dd=255-dd;
lw(x*8+i,y+1,dd);
dd=hzD[i+n*72+48];
if (fb) dd=255-dd;
lw(x*8+i,y+2,dd);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -