📄 lcd-tupian.c
字号:
0x80,0x00,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x09,0x29,0x29,0x20,0xF1,0x24,0xE7,0x92,0x40,0xE3,0x8E,0xC0,0x00,0x01,
0x80,0x04,0x0A,0xAA,0xAA,0xA0,0x89,0x25,0x14,0x55,0x41,0x14,0x49,0x20,0x40,0x01,
0x80,0x07,0x8A,0xAA,0xAA,0xA0,0x89,0x25,0xF4,0x55,0x41,0x04,0x49,0x23,0xC0,0x01,
0x80,0x04,0x0A,0xCA,0xCA,0xC0,0x89,0x25,0x04,0x55,0x81,0x04,0x49,0x20,0x40,0x01,
0x80,0x00,0x04,0x44,0x44,0x46,0x89,0x25,0x14,0x48,0x8D,0x14,0x49,0x20,0x00,0x01,
0x80,0x00,0x04,0x44,0x44,0x46,0xF1,0x1C,0xE7,0x88,0x8C,0xE3,0x89,0x20,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
/************************************延时**********************************/
void delay100(int n)
{
unsigned char i;
while(n--)
for(i=0;i<40;i++);
}
/*******************************LCD 忙标志查询*****************************/
void lcd_busy(void)
{
P0 = 0xff;
RS = 0;
RW = 1;
do {
E = 1;
busy = P0;
E = 0;
}while(busy>0x7f);
}
/*******************************写单字节函数*****************************/
void write(uchar x,uchar Data)
{
lcd_busy(); //忙查询
if(x == 0)
{
RS = 0; RW = 0; //写单字节命令字
}
else if(x == 1)
{
RS = 1; RW = 0; //写单字节数据
}
E = 1;
P0 = Data;
E = 0;
P0 = 0xff;
}
/********************************LCD初始化*******************************/
void Init_lcd(void)
{
delay100(10); //启动等待,等LCM讲入工作状态
write(0,0x30); //8 位介面,基本指令集
delay100(10);
write(0,0x0c); //显示打开,光标关,反白关
delay100(10);
write(0,0x01); //清屏,将DDRAM的地址计数器归零
delay100(10);
}
/****************************图形方式下显示图形***********************/
void lcdtest(void)
{
unsigned char i,j,k; //先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)
int x=0;
LCD_X=0x80;
for(k=0;k<2;k++) //K=0->写上半屏数据; K=1->写下半屏数据
{
write(0,0x80);
for(i=0;i<32;i++) //写垂直(Y轴)数据
{
write(0,0x80+i);write(0,LCD_X);
for(j=0;j<16;j++) //写水平(X轴)数据
{
write(1,pic[x]);
x++;
}
}
LCD_X=0x88; //重新设置X轴的起始地址
}
}
void lcdtest2(void)
{
unsigned char i,j,k; //先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)
int x=0;
LCD_X=0x80;
for(k=0;k<2;k++) //K=0->写上半屏数据; K=1->写下半屏数据
{
write(0,0x80);
for(i=0;i<32;i++) //写垂直(Y轴)数据
{
write(0,0x80+i);write(0,LCD_X);
for(j=0;j<16;j++) //写水平(X轴)数据
{
write(1,pic2[x]);
x++;
}
}
LCD_X=0x88; //重新设置X轴的起始地址
}
}
/*****************************清除屏幕******************************/
void lcdcls(void)
{
write(0,0x01);
write(0,0x34);
write(0,0x30);
}
/******************************主程序*******************************/
void main(void)
{
delay100(500);
Init_lcd();
delay100(10);
while(1)
{
write(0,0x36); //设置显示图形方式
lcdtest(); //图形方式下显示(我的电脑和我的文档)
delay100(5000);
lcdcls(); //清除当前显示
delay100(100);
write(0,0x36); //设置显示图形方式
lcdtest2(); //图形方式下显示(我的电脑和我的文档)
delay100(5000);
lcdcls(); //清除当前显示
}
}
/******************************END***********************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -