⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd320.c

📁 3c44B0实验箱上液晶屏的控制程序
💻 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 + -