📄 lcd320.c
字号:
#include <stdarg.h>
#include <stdio.h>
#include "def.h"
#include "44b.h"
#include "LCD320.h"
#include "Color.h"
#define LCDCON1_ENVID (1)
#define LCDCON1_INVVD (1<<1) //2
#define LCDCON1_INVFRAME (1<<2) //4,第1位为1
#define LCDCON1_INVLINE (1<<3) //8,第2位为1
#define LCDCON1_INVCLK (1<<4)
#define LCDCON1_MMODE (1<<7) //,第7位为1
#define L248 (8)
#define CLKVAL (20) // 60Mhz, fr=100Hz (CLKVAL=38.6)
//#define M5D(n) ((n) & 0x1fffff)
U32* pLCDBuffer16=(U32*)0xc000000;//U32 无符号整型
U32 LCDBuffer[LCDHEIGHT][LCDWIDTH];
void LCD_Init()
{
int i;
U32 LCDBASEU,LCDBASEL,LCDBANK;
LCDDisplayOpen(FALSE);
rLCDCON1=(0);
// disable
rLCDCON2=(239)|(119<<10)|(15<<21);
//320x240LCD LINEBLANK=15 (without any calculation)
LCDBANK=0xc000000>>22;//((U32)LCDBuffer16)>>22;
LCDBASEU=0x0;//((U32)LCDBuffer16)&0x3fffff;
LCDBASEL=LCDBASEU+(160)*240;
rLCDSADDR1= (0x3<<27) |(LCDBANK<<21)|LCDBASEU;//| ((((U32)LCDBuffer16)>>1)&0x7ffffff);
// color_mode, LCDBANK, LCDBASEU
rLCDSADDR2= (0<<29)|(0<<21)|LCDBASEL;
rLCDSADDR3= (320/2)|(0<<9);
//No virtual screen.
//rREDLUT=0xfca86420;
//rGREENLUT=0xfca86420;
//rBLUELUT=0xfffff840;
rREDLUT=0xfca86420;
rGREENLUT=0xfca86420;
rBLUELUT=0xfffffa50;
rLCDCON1=LCDCON1_ENVID|0<<1|0<<2|0<<3|(2<<5)|1<<7|(0x3<<8)|(0x3<<10)|(CLKVAL<<12);//|LCDCON1_MMODE;
// enable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,CLKVAL=?
for(i=0;i<80*240;i++)
*(pLCDBuffer16+i)=0x0;
Delay(5000);
LCDDisplayOpen(TRUE);
}
void LCDDisplayOpen(U8 isOpen)
{
if(isOpen){
rPDATB&=~LCDDisplayPin;
}
else{
rPDATB|=LCDDisplayPin;
}
}
/*********************************缓冲区数据输出给LCD驱动器************************/
void LCD_Refresh()
{
int i,j;
U32 lcddata;
U32 pixcolor; //一个像素点的颜色
U8* pbuf=(U8*)LCDBuffer[0];//U8 无符号字符型
for(i=0;i<LCDWIDTH*LCDHEIGHT/4;i++)
{
lcddata=0;
for(j=24;j>=0;j-=8)
{
pixcolor=(pbuf[0]&0xe0)|((pbuf[1]>>3)&0x1c)|(pbuf[2]>>6); //变换RGB
lcddata|=pixcolor<<j;
pbuf+=4;
}
*(pLCDBuffer16+i)=lcddata;
}
}
/**********************************画点**********************************************/
void LCD_PutPixel(s16 x,s16 y,u32 color)
{
LCDBuffer[x][y]=color;
//LCD_Refresh(); //是否及时刷新更改的像素点
}
/**********************************清屏**********************************************/
void LCD_Clear()
{
u16 i=0,j=0;
for(i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
LCDBuffer[i][j]=black;
}
}
LCD_Refresh();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -