void Lcd_Init(void)
{
delay_ms(10);
LCD_RST_LOW();
delay_us(100);
LCD_RST_HIGH();
delay_ms(255);
delay_ms(255);
delay_ms(255);
LCD_WR_REG(0X2F); //开内部升压,不然要接外部VLCD
LCD_WR_REG(0X81); //要求输入对比度
LCD_WR_REG(0XB0); //对比度数值,这个要自己试验一下最佳效果。
LCD_WR_REG(0XEB); //液晶偏压设置 1/9
LCD_WR_REG(0XC2); //设置扫描方式,默认从左到右,上到下。
LCD_WR_REG(0XAF); //开显示
}
//清屏函数
void LCD_Clear(void)
{
u16 i, j;
i = 192 * 64 / 8; //128X64像素,但是RAM是192列的,我也没有找到如何设置列结束位置。数据大小要除以8位数据
for(; i > 0; i--)
LCD_WR_DATA8(0x00); //DAT =0X00,清全白,OXFF,清全黑
}
//-------LCD设置坐标---------------------------------------
void LCD_SetPos(u8 page, u8 column)
{
column = column - 1; //我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1.
page = page - 1;
LCD_WR_REG(0xb0 + page);/*设置页地址。每页是 8 行。一个画面的 64 行被分成 8 个页。我们平常所说的第 1 页,在 LCD
驱动 IC 里是第 0 页,所以在这里减去 1*/
LCD_WR_REG(column & 0x0f); //设置列地址的低 4 位
column >>= 4;
column = column | 0x10;
LCD_WR_REG(column); //取高4位行地址
}
//显示 16x16 点阵图像、汉字、生僻字或 16x16
void display_graphic_16x16(u8 page, u8 column, unsigned char *dp)
{
u8 i, j;
LCD_SetPos(page, column); //发送地址,第一页
for (i = 0; i < 16; i++) //第一页的数据16字节,列号自动累加
{
LCD_WR_DATA8( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。
dp++;
}
LCD_SetPos(page + 1, column); //发送地址,第二页
for (i = 0; i < 16; i++) //第二页的数据16字节
{
LCD_WR_DATA8( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。
dp++;
}
}
unsigned char huan[] =
{
0x04, 0x24, 0x44, 0x84, 0x64, 0x9C, 0x40, 0x30, 0x0F, 0xC8, 0x08, 0x08, 0x28, 0x18, 0x00, 0x00,
0x10, 0x08, 0x06, 0x01, 0x82, 0x4C, 0x20, 0x18, 0x06, 0x01, 0x06, 0x18, 0x20, 0x40, 0x80, 0x00
};/*"欢",0*/
unsigned char ying[] =
{
0x40, 0x40, 0x42, 0xCC, 0x00, 0x00, 0xFC, 0x04, 0x02, 0x00, 0xFC, 0x04, 0x04, 0xFC, 0x00, 0x00,
0x00, 0x40, 0x20, 0x1F, 0x20, 0x40, 0x4F, 0x44, 0x42, 0x40, 0x7F, 0x42, 0x44, 0x43, 0x40, 0x00
};/*"迎",1*/
unsigned char shi[] =
{
0x80, 0x60, 0xF8, 0x07, 0x04, 0xE4, 0x24, 0x24, 0x24, 0xFF, 0x24, 0x24, 0x24, 0xE4, 0x04, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x80, 0x81, 0x45, 0x29, 0x11, 0x2F, 0x41, 0x41, 0x81, 0x81, 0x80, 0x00
};/*"使",0*/
unsigned char yong[] =
{
0x00, 0x00, 0xFE, 0x22, 0x22, 0x22, 0x22, 0xFE, 0x22, 0x22, 0x22, 0x22, 0xFE, 0x00, 0x00, 0x00,
0x80, 0x60, 0x1F, 0x02, 0x02, 0x02, 0x02, 0x7F, 0x02, 0x02, 0x42, 0x82, 0x7F, 0x00, 0x00, 0x00
};/*"用",1*/
int main(void)
{
u8 t;
u8 *temp;
u16 SET_VOLTAGE = 123;
SystemInit ();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(); //延时初始化
LCD_IO_init(); //显示屏IO初始化
Lcd_Init(); //显示屏寄存器初始化
LCD_Clear(); //显示屏清屏操作
uart_init(9600); //波特率使用115200
printf("欢迎使用\r\n");
while(1)
{
display_graphic_16x16(3, 16, 0, huan);
display_graphic_16x16(3, 32, 0, ying);
display_graphic_16x16(3, 48, 0, shi);
display_graphic_16x16(3, 64, 0, yong);
}
}