PIC18F57Q43具有较充实的存储空间,为此可以利用它来存储和显示图片的内容。 为配合图片的显示,这里也配以0.96寸的彩色LCD屏作为显示器件,该显示屏的分辨率为160*80。 图1 引脚配置 图2 引脚命名 该显示屏的初始化函数为: - void Lcd_Init(void)
- {
- OLED_RST_Clr();
- __delay_ms(200);
- OLED_RST_Set();
- __delay_ms(200);
- LCD_WR_REG(0x11);
- __delay_ms(100);
- LCD_WR_REG(0x21);
- LCD_WR_REG(0xB1);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_REG(0xB2);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_REG(0xB3);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_REG(0xB4);
- LCD_WR_DATA8(0x03);
- LCD_WR_REG(0xC0);
- LCD_WR_DATA8(0x62);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x04);
- LCD_WR_REG(0xC1);
- LCD_WR_DATA8(0xC0);
- LCD_WR_REG(0xC2);
- LCD_WR_DATA8(0x0D);
- LCD_WR_DATA8(0x00);
- LCD_WR_REG(0xC3);
- LCD_WR_DATA8(0x8D);
- LCD_WR_DATA8(0x6A);
- LCD_WR_REG(0xC4);
- LCD_WR_DATA8(0x8D);
- LCD_WR_DATA8(0xEE);
- LCD_WR_REG(0xC5);
- LCD_WR_DATA8(0x0E);
- LCD_WR_REG(0xE0);
- LCD_WR_DATA8(0x10);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x07);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x07);
- LCD_WR_DATA8(0x0A);
- LCD_WR_DATA8(0x12);
- LCD_WR_DATA8(0x27);
- LCD_WR_DATA8(0x37);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x0D);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x10);
- LCD_WR_REG(0xE1);
- LCD_WR_DATA8(0x10);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x0F);
- LCD_WR_DATA8(0x06);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x08);
- LCD_WR_DATA8(0x0A);
- LCD_WR_DATA8(0x13);
- LCD_WR_DATA8(0x26);
- LCD_WR_DATA8(0x36);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x0D);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x10);
- LCD_WR_REG(0x3A);
- LCD_WR_DATA8(0x05);
- LCD_WR_REG(0x36);
- LCD_WR_DATA8(0x78);
- LCD_WR_REG(0x29);
- OLED_BLK_Set();
- }
相应的以色彩清除屏幕的函数为: - void LCD_Clear(u16 Color)
- {
- u16 i,j;
- LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
- for(i=0;i<LCD_W;i++)
- {
- for (j=0;j<LCD_H;j++)
- {
- LCD_WR_DATA(Color);
- }
- }
- }
实现字符串显示的函数为: - void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
- {
- while(*p!='\0')
- {
- if(x>LCD_W-16)
- {
- x=0;
- y+=16;
- }
- if(y>LCD_H-16)
- {
- y=x=0;
- LCD_Clear(RED);
- }
- LCD_ShowChar(x,y,*p,0,color);
- x+=8;
- p++;
- }
- }
实现满屏图片显示的函数为: - void LCD_ShowPicturea(u16 x1,u16 y1,u16 x2,u16 y2)
- {
- int i;
- LCD_Address_Set(x1,y1,x2,y2);
- for(i=0;i<12800;i++)
- {
- LCD_WR_DATA8(gImage_FJ[i*2]);
- LCD_WR_DATA8(gImage_FJ[i*2+1]);
- }
- }
实现字符串及图片显示的测试主程序为: - int main(void)
- {
- SYSTEM_Initialize();
- Lcd_Init();
- LCD_Clear(BLACK);
- LCD_ShowString(20,10,"PIC18F57Q43 TEST",RED);
- LCD_ShowString(20,30,"0.96' OLED",YELLOW);
- __delay_ms(2000);
- LCD_ShowPicturea(0,0,159,79);
- __delay_ms(2000);
- LCD_ShowPictureb(0,0,159,79);
- while(1)
- {
- LED0_Toggle();
- __delay_ms(500);
- }
- }
经编译与下载,其输出信息如图3所示。 图3 下载提示信息 在完成下载后,其显示效果如图4至图6所示。 图4 显示字符串 图5 显示风景图片 图6 显示人物图片
|