📄 w_lcd.c
字号:
#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 + -