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

📄 lcd.c

📁 ARM SAMSUN 44B07 LCDTEST CODE
💻 C
字号:
#include "..\inc\uTypes.h"
#include "..\inc\44b0x.h"
#include "..\inc\console.h"
#include "..\inc\sysUtils.h"

#define LCM_DELAY  1000
#define M5D(n) ((n) & 0x1fffff)

//RS 信号接在 (GPC7)
//RW 信号接在 (GPC6)
//E  信号接在 (GPC5)
#define SCR_XSIZE 	(320)  
#define SCR_YSIZE 	(240)
#define LCD_XSIZE 	(320)
#define LCD_YSIZE 	(240)
#define MVAL			(13)
#define SET_LCM_RS() \
        rPDATC |= MASK_BIT(7)
#define CLR_LCM_RS() \
        rPDATC &= ~MASK_BIT(7)

#define SET_LCM_RW() \
        rPDATC |= MASK_BIT(6)
#define CLR_LCM_RW() \
        rPDATC &= ~MASK_BIT(6)
                
#define SET_LCM_E() \
        rPDATC |= MASK_BIT(5)
#define CLR_LCM_E() \
        rPDATC &= ~MASK_BIT(5)
unsigned int (*frameBuffer1)[320/32];//开辟与每一行对应的数组指针
unsigned int (*frameBuffer4)[320/16];//每一行为一个数组,此数组的大小与行中像素点的数目有关
unsigned int (*frameBuffer16)[320/8];//大小计算:行像素点数目*每个像素点所占的位数/32
//unsigned int (*frameBuffer256)[320E/4];//除以32的原因是,数组中的每个元素占用4*8bit
        

        
#define LCM_WRITE(data) \
        rPDATD = data

#define LCM_READ() rPDATD

void lcmDelay (int nDelay);
void lcmWriteCmd (U8 byCmd);
void lcmWriteData (U8 byData);
int lcmIsBusy (void);
        
void lcmInit ()
{
  //先初始化端口
  //PORT C GROUP
	//BUSWIDTH=16													*/
	/*  PC15	14		13		12		11		10		9		8	*/
	/*	o		o		RXD1	TXD1	o		o		o		o	*/
	/*	NC		NC		Uart1	Uart1	NC		NC		NC		NC	*/
	/*  01		01		11		11		01		01		01		01	*/

	/*  PC7		6		5		4		3		2		1		0	*/
	/*  o		o		o		o		o		o		o		o	*/
	/*  NC		NC		NC		NC		LED		LED		LED		LED	*/
	/*  01		01		01		01		01		01		01		01	*/
	rPDATC = 0x0000;	//All IO is low
	rPCONC = 0x5f555555;	
	rPUPC  = 0x3000;	//PULL UP RESISTOR should be enabled to I/O

	//PORT D GROUP
	/*  PORT D GROUP(I/O OR LCD)										*/
	/*  BIT7		6		5		4		3		2		1		0	*/
	/*  VF			VM		VLINE	VCLK	VD3		VD2		VD1		VD0	*/
	/*	01			01		01		01		01		01		01		01	*/
	rLCDCON1=(0)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_G4<<12);//LCDCON1寄存器清零
	rLCDCON2=(240-1)|(79<<10)|(10<<21); 
	rLCDSADDR1= (0x1<<27) | ( ((U32)frameBuffer4>>22)<<21 ) | M5D((U32)frameBuffer4>>1);
	rLCDSADDR2= M5D((((U32)frameBuffer4+(320*LCD_YSIZE/4))>>1)) | (MVAL<<21);
	rLCDSADDR3= (320/8) | ( ((320-LCD_XSIZE)/8)<<9 );
	rBLUELUT=0xfa40; 
	rDITHMODE=0x0;//抖动模式设定
	rDP1_2 =0xa5a5; //以下为抖动时间设定     
	rDP4_7 =0xba5da65;
	rDP3_5 =0xa5a5f;
	rDP2_3 =0xd6b;
	rDP5_7 =0xeb7b5ed;
	rDP3_4 =0x7dbe;
	rDP4_5 =0x7ebdf;
	rDP6_7 =0x7fdfbfe;

	rLCDCON1=(1)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_G4<<12);
	
	lcmDelay (100);
	    
  //lcmWriteCmd (0x30); //功能设定, 基本指令集合
  
  //lcmWriteCmd (0x02); //DDRAM的计数器(AC)到"00H",降游标移动到开头原点位置

  //lcmWriteCmd (0x04);
  
  lcmWriteCmd (0x0c); //打开显示
  
  lcmWriteCmd (0x06);
  
  lcmWriteCmd (0x01);
  
}

void lcmWriteCmd (U8 byCmd)
{
  lcmDelay (LCM_DELAY);
  
  CLR_LCM_RS ();
  CLR_LCM_RW ();
  lcmDelay (LCM_DELAY);
  
  LCM_WRITE (byCmd);
  
  SET_LCM_E ();
  
  lcmDelay (LCM_DELAY);
  
  CLR_LCM_E ();
  
  lcmDelay (LCM_DELAY);
  
}

void lcmWriteData (U8 byData)
{

  SET_LCM_RS ();
  CLR_LCM_RW ();
  lcmDelay (LCM_DELAY);
  
  LCM_WRITE (byData);
  
  SET_LCM_E ();
  
  lcmDelay (LCM_DELAY);
  
  CLR_LCM_E ();
  
  lcmDelay (LCM_DELAY);
}

void lcmRead ()
{

}

void lcmDelay (int nDelay)
{
  int i;
 for (i = 0; i < 1; ++ i);
}

void lcmSetPos (int nPos)
{
  lcmWriteCmd (nPos | 0x80);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -