📄 lcdlib.c
字号:
#define LCDCON1 (*(volatile unsigned *)0x1f00000)
#define LCDCON2 (*(volatile unsigned *)0x1f00004)
#define LCDCON3 (*(volatile unsigned *)0x1f00040)
#define LCDSADDR1 (*(volatile unsigned *)0x1f00008)
#define LCDSADDR2 (*(volatile unsigned *)0x1f0000c)
#define LCDSADDR3 (*(volatile unsigned *)0x1f00010)
#define REDLUT (*(volatile unsigned *)0x1f00014)
#define GREENLUT (*(volatile unsigned *)0x1f00018)
#define BLUELUT (*(volatile unsigned *)0x1f0001c)
#define DP1_2 (*(volatile unsigned *)0x1f00020)
#define DP4_7 (*(volatile unsigned *)0x1f00024)
#define DP3_5 (*(volatile unsigned *)0x1f00028)
#define DP2_3 (*(volatile unsigned *)0x1f0002c)
#define DP5_7 (*(volatile unsigned *)0x1f00030)
#define DP3_4 (*(volatile unsigned *)0x1f00034)
#define DP4_5 (*(volatile unsigned *)0x1f00038)
#define DP6_7 (*(volatile unsigned *)0x1f0003c)
#define DITHMODE (*(volatile unsigned *)0x1f00044)
#define PCOND (*(volatile unsigned *)0x1d2001c)
#include "lcdlib.h"
typedef unsigned int U32;
//#define MODE_MONO
//#define MODE_G4
#define MODE_G16
#ifdef MODE_MONO
unsigned char frameBuffer[240][320/8];
#endif
#ifdef MODE_G4
unsigned char frameBuffer[240][320*2/8];
#endif
#ifdef MODE_G16
unsigned char frameBuffer[240][320*4/8];
#endif
void LCD_INIT(void)
{
PCOND=0xaaaa; //LCD控制
#ifdef MODE_MONO
LCDCON1=(0)|(1<<5)|(0x3<<8)|(0x3<<10)|(5<<12); //4位单扫描模式,禁止视频输出
LCDCON2=(240-1)|((320/4-1)<<10)|(10<<21);
LCDSADDR1=(0x0<<27)|(((U32)frameBuffer>>22)<<21)|\
(0x1fffff&((U32)frameBuffer>>1)); //黑白模式,禁止自刷新
LCDSADDR2=(0x1fffff&(((U32)frameBuffer+(320*240/8))>>1))|(1<<29); //字节交换使能
LCDSADDR3=320/16;
LCDCON1=(1)|(1<<5)|(0x3<<8)|(0x3<<10)|(5<<12); //允许视频输出
#endif
#ifdef MODE_G4
BLUELUT=0xfa40;
DITHMODE=0x0;
DP1_2 =0xa5a5;
DP4_7 =0xba5da65;
DP3_5 =0xa5a5f;
DP2_3 =0xd6b;
DP5_7 =0xeb7b5ed;
DP3_4 =0x7dbe;
DP4_5 =0x7ebdf;
DP6_7 =0x7fdfbfe;
LCDCON1=(0)|(1<<5)|(0x3<<8)|(0x3<<10)|(5<<12); //4位单扫描模式,禁止视频输出
LCDCON2=(240-1)|((320/4-1)<<10)|(10<<21);
LCDSADDR1=(0x1<<27)|(((U32)frameBuffer>>22)<<21)|\
(0x1fffff&((U32)frameBuffer>>1)); //4级灰度模式,禁止自刷新
LCDSADDR2=(0x1fffff&(((U32)frameBuffer+(320*240*2/8))>>1))|(1<<29); //字节交换使能
LCDSADDR3=320*2/16;
LCDCON1=(1)|(1<<5)|(0x3<<8)|(0x3<<10)|(5<<12); //允许视频输出
#endif
#ifdef MODE_G16
DITHMODE=0x12210;
DP1_2 =0xa5a5;
DP4_7 =0xba5da65;
DP3_5 =0xa5a5f;
DP2_3 =0xd6b;
DP5_7 =0xeb7b5ed;
DP3_4 =0x7dbe;
DP4_5 =0x7ebdf;
DP6_7 =0x7fdfbfe;
LCDCON1=(0)|(1<<5)|(0x3<<8)|(0x3<<10)|(5<<12); //4位单扫描模式,禁止视频输出
LCDCON2=(240-1)|((320/4-1)<<10)|(10<<21);
LCDSADDR1=(0x2<<27)|(((U32)frameBuffer>>22)<<21)|\
(0x1fffff&((U32)frameBuffer>>1)); //16级灰度模式,禁止自刷新
LCDSADDR2=(0x1fffff&((((U32)frameBuffer+(320*240*4/8))>>1)))|(1<<29); //字节交换使能
LCDSADDR3= 320*4/16;
LCDCON1=(1)|(1<<5)|(0x3<<8)|(0x3<<10)|(5<<12); //允许视频输出
#endif
}
void LCD_CLS(void)
{
unsigned char i,k;
for(i=0;i<240;i++)
#ifdef MODE_MONO
for(k=0;k<40;k++)
#endif
#ifdef MODE_G4
for(k=0;k<80;k++)
#endif
#ifdef MODE_G16
for(k=0;k<160;k++)
#endif
frameBuffer[i][k]=0;
}
void lcdtest(void)
{
int i,k;
LCD_INIT();
LCD_CLS();
for(i=10;i<220;i++)
for(k=10;k<150;k++)
frameBuffer[i][k]=0xff;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -