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

📄 w_lcd.c

📁 安的利34A57液晶程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include  "My_Arm7_Func.h"
#include "const_public.h"
#include "var_public.h"
#include "LCD_var_psq.h"
#include "string.h"

//#include "LCD_GB_psq.h"


//*******SED1335 Oscilator**********************************************
#define OSC            10000000   //10Mhz
#define LCDX 160
#define LCDY 160

#define VRAMSIZE       ((LCDX/8)*LCDY)       //图形模式一屏占据的RAM SIZE
#define FFRAME         60                    //60 hz


//*******SED1335 command code in hex************************************
#define SystemSet      0x40
#define SleepIn        0x53
#define DispOn         0x59
#define DispOff        0x58
#define Scroll         0x44
#define	CursorForm     0x5d
#define	CG_Add         0x5c
#define	CursorRight    0x4c
#define	CursorLeft     0x4d
#define	CursorUp       0x4e
#define	CursorDown     0x4f
#define	HDotScroll     0x5a
#define OverLayer      0x5b
#define CursorWrite    0x46
#define CursorRead     0x47
#define MemWrite       0x42
#define MemRead        0x43


//*******Sed1335 system set parameter define***************************
#define	IV		(0x03<<4)     //inverse
#define WS      (0)        //Single panel
#define	M0		(1<<0)     //internal cg or external cg
#define	M1		(1<<1)     //cg ram continue or not
#define	M2		(1<<2)     //16 pix height 0r 8 pix height

#define	WF		(1<<7)					//AC for lcd 2 frame driver
#define	FX		(0x07)					//font width

#define	FY		(0x00)					//font height,graphic mode 0

#define	CR		(LCDX/8-1)              //windows width of bytes
#define	TCR		(OSC/FFRAME/9/LCDY)		//time by lp

#define	LF		LCDY				//scan lines
#define	APL		(LCDX/8)			//width of vertical screen
#define	APH		0x00

//*******Sed1335 scroll parameter define*******************************
#define	SAD1L	0x00			//first layer start address
#define	SAD1H	0x00
#define	SL1		LF				//first layer scan lines

#define	SAD2L	(VRAMSIZE&0xff)
#define	SAD2H	((VRAMSIZE>>8)&0xff)
#define	SL2		LF

#define	SAD3L	((2*VRAMSIZE)&0xff)
#define	SAD3H	(((2*VRAMSIZE)>>8)&0xff)

#define	SAD4L	((2*VRAMSIZE)&0xff)
#define	SAD4H	(((2*VRAMSIZE)>>8)&0xff)

//*******Sed1335 scrform parameter define******************************
#define	CM		(1<<7)			//cursor shape:black cursor
#define	CRX		(0x07)			//cursor width=8
#define	CRY		(0x06)			//cursor heigth=7

//*******SED1335 Horizontal pix shift**********************************
#define HDOT    (0x00)

//*******Sed1335 Display Control define********************************
#define NODISPLAY          (0x00)        //no display
#define NOFLASH            (0x01)        //display no flash
#define FLASH2HZ           (0x02)        //display with 2hz flash
#define FLASH16HZ          (0x03)        //display with 16hz flash

#define CURSOR             (FLASH2HZ)    //cursor display with 2hz flash
#define SCREEN1            (NOFLASH<<2)  //screen1 display no flash
#define SCREEN2            (NOFLASH<<4)  //screen2 display no flash
#define SCREEN3            (NOFLASH<<6)  //screen3 dislpay no flash

//*******Sed1335 Overlayer define**************************************
#define TEXTMODE           (0x00)        //screen1 & 3 text mode
#define GRAPHICMODE        (0x03<<2)     //screen1 & 3 graphic mode

#define MIXOR              (0x00)        //overlayer with or mode
#define MIXXOR             (0x01)        //overlayer with xor mode
#define MIXAND             (0x02)        //overlayer with and mode
#define MIXPOR             (0x03)        //overlayer with priority or mode

#define OV2LAYER           (0x00)        //2 layer mixed
#define OV3LAYER           (0x01<<4)     //3 layer mixed


/********************************系统模式字**********************************************/
 const INT8U SystemSetCode[]={IV|WS|M2|M1|M0,
                                     WF|FX,
                                     FY,
                                     CR,
                                     TCR,
                                     LF,
                                     APL,APH};
 const INT8U ScrollCode[]={SAD1L,SAD1H,SL1,
                                  SAD2L,SAD2H,SL2,
                                  SAD3L,SAD3H,
                                  SAD4L,SAD4H};
 const INT8U CursorFormCode[]={CRX,CM|CRY};
 const INT8U HDotScrollCode[]={HDOT};
 const INT8U OverLayerCode[]={OV2LAYER|GRAPHICMODE};//|MIXXOR};
 const INT8U DispOnCode[]={SCREEN1};//SCREEN1|NOFLASH};//SCREEN1//|CURSOR|SCREEN2|SCREEN3};
 const INT8U DispOffCode[]={SCREEN1};//|CURSOR|SCREEN2|SCREEN3};
 const INT8U CursorAdd1[]={SAD1L,SAD1H};
 const INT8U CursorAdd2[]={SAD2L,SAD2H};
 const INT8U CursorAdd3[]={SAD3L,SAD3H};
 const INT8U CursorAdd4[]={SAD4L,SAD4H};
/******************************************************************************/
/******************************************************************************************/
 
 
const INT8U  CHNULLBYTE[]={0x00};
const INT8U  CHFILLBYTE[]={0xFF};
/*  空白 */
const INT8U LCD_NULL[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};


/*  空白 */
const INT8U LCD_FILL[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};

/******************************************************************************************/
/******************************************************************************************/
void Delayn10MS(INT32U n)
{
	INT32U i;
	for(i=0;i<n*25000;i++);
       
}



void InitLcdIo(void)
{
        w_pio_init_puck(LCD_D0,W_PIO_OUTPUT,W_PIO_PULL_OFF,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_D1,W_PIO_OUTPUT,W_PIO_PULL_OFF,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_D2,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
        w_pio_init_puck(LCD_D3,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_D4,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_D5,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_D6,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
        w_pio_init_puck(LCD_D7,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	
        w_pio_init_puck(LCD_RST,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
        w_pio_init_puck(LCD_CS,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_A0,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_WR,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	w_pio_init_puck(LCD_RD,W_PIO_OUTPUT,W_PIO_PULL_ON,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
        w_pio_init_puck(LCD_LED,W_PIO_OUTPUT,W_PIO_PULL_OFF,W_PIO_DRAIN_OFF,W_PIO_INT_OFF,W_PIO_FILTER_OFF);
	
}

/********************************************************************************/
void InvertStrBit(INT8U *Src,INT8U *Pdst,INT16U len)
{
  INT8U i;
  
  for(i=0;i<len;i++)
    Pdst[i]=~Src[i];
  
}

void DelaynuS(INT32U n)
{
	INT32U i;
	for(i=0;i<n;i++);
       
}

void LCD_WraByteToBus(INT8U aByte)   //在确定的行和列写一个字节
{
  INT8U TempVar,TempSet;
  INT8U i;
  
  TempVar=1;
  i=0;
  
  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D0_OUT(TempSet);
  i++;
  
  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D1_OUT(TempSet);
  i++;
  
  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D2_OUT(TempSet);
  i++;
  
  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D3_OUT(TempSet);
  i++;

  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D4_OUT(TempSet);
  i++;
  
  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D5_OUT(TempSet);
  i++;

  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D6_OUT(TempSet);
  i++;
  
  TempSet=(INT8U)((aByte&(TempVar<<i))>>i);  
  LCD_D7_OUT(TempSet);

}
/*
void write_bus(INT8U pdata)
{
uint32  tmp;
        tmp=pdata<<16;
        IO0SET=RD;
	IO0CLR=WR;
        IO1CLR=IO1;
        IO1SET=tmp;
        Delay(100);
        IO0SET=WR;	
}*/

void write_bus(INT8U pdata)
{
    
        LCD_RD_OUT(1); 
	LCD_WR_OUT(0); 
        //IO1CLR=IO1;
        LCD_WraByteToBus(pdata);
        DelaynuS(30);
        LCD_WR_OUT(1); 
}

/*******************************************************
    A0          RD               WR
    0           0                1		读状态标志
    1		0		1   读显示数据或者光标地址
    0		1		0   写显示数据或者参数
    1		1		0		写指令代码
********************************************************/
void SetLcdReg(INT8U cdata,INT8U const  *pdata,INT8U n)
{
INT8U i;
	LCD_CS_ON;
	LCD_A0_OUT(1);
	write_bus(cdata);
	LCD_A0_OUT(0);
	for(i=0;i<n;++i)
	{
	    write_bus(*pdata);
		++pdata;
	}
	LCD_CS_OFF;
}

void WriteLcdData(INT8U const *pdata,INT16U n)
{
INT8U i,j;

	LCD_CS_ON;
	LCD_A0_OUT(1);
	write_bus(MemWrite);
	LCD_A0_OUT(0);
//	for(i=0;i<n;++i)
//	{
	i=0;
	for(;;)
	{
//		WaitCP1();
//		while((IO0PIN&CP1)!=0);// Delay(10);
		//while((IO0PIN&CP1)==0);// Delay(10);
		for(j=0;j<8;++j)
		{
	    	write_bus(*pdata);
			++pdata;
			if(++i == n)
			{
				LCD_CS_OFF;
				return;
			}
		}
	}
	//LCD_CS_OFF;
}

void TestLcdIO(void)

⌨️ 快捷键说明

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