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

📄 lcm.c

📁 ST最新的Cortext-M3内核的ARM触摸屏演示工程
💻 C
字号:
#include "public.h"
//RS--PE15
//CS1--PE12
//CS2--PE11
//BUSY--PE10
//RST--PE8
//WR--PE14
//RD--PE13
//DB0..7--PE0..7

#define LCM_RS_PORT (GPIOE)
#define LCM_RS_DDR (DDRE)
#define LCM_RS (GPIO_Pin_15)

#define LCM_CS_PORT (GPIOE)
#define LCM_CS_DDR (DDRB)
#define LCM_CS (GPIO_Pin_12)

#define LCM_WR_PORT (GPIOE)
#define LCM_WR_DDR (DDRB)
#define LCM_WR (GPIO_Pin_14)

#define LCM_RD_PORT (GPIOE)
#define LCM_RD_DDR (DDRB)
#define LCM_RD (GPIO_Pin_13)

#define LCM_BUSY_PIN (GPIOE)
#define LCM_BUSY_DDR (DDRB)
#define LCM_BUSY_PORT (GPIOE)
#define LCM_BUSY (GPIO_Pin_10)

#define LCM_RST_PORT (GPIOE)
#define LCM_RST_DDR (DDRG)
#define LCM_RST (GPIO_Pin_8)
/*
#define LCM_INT (PE5)
#define LCM_INT_PIN (PINE)
#define LCM_INT_DDR (DDRE)
#define LCM_INT_PORT (PORTE)
*/
//#define LCM_BL_PORT (PORTG)
//#define LCM_BL_PIN (PING)
//#define LCM_BL_DDR (DDRG)
//#define LCM_BL (PG3)

#define LCM_DIN (GPIOE)
#define LCM_DOUT (GPIOE)
#define LCM_DDR (DDRA)

volatile u8 lcm_timer = 0;

const uint8_t init_paras[] =
{
	0X00,0X01,0X02,0X03,0X10,0X11,0X12,0X21,0X31,0X41,0X51,0X20,0X30,0X40,0X50,0X60,
	0X61,0X70,0X71,0X72,0X80,0X81,0X91,0X90,0XA0,0XA1,0XA2,0XA3,0XB0,0XB1,0XC0,0XC1,
	0XC8,0XC9,0XCA,0XD0,0XE0,0XF0,0XF1,

	0XC9,0XE2,0X10,0X80,0X2B,0X00,0XB5,0X27,0XEF,0X00,0X00,0X27,0XEF,0X00,0X00,0X00,
	0X00,0X00,0X00,0XEF,0XAA,0X00,0X00,0X06,0X11,0X00,0X00,0X00,0X27,0XEF,0X00,0X3e,
	0X80,0X80,0X00,0X80,0X00,0XA0,0X5f
};
//INITTAB1:
//DB 000H,001H,002H,003H,010H,011H,012H,021H,031H,041H,051H,020H,030H,040H,050H,060H
//DB 061H,070H,071H,072H,080H,081H,091H,090H,0A0H,0A1H,0A2H,0A3H,0B0H,0B1H,0C0H,0C1H
//DB 0C8H,0C9H,0CAH,0D0H,0E0H,0F0H,0F1H
//INITTAB2:
//DB 0C9H,0E2H,010H,080H,02BH,000H,091H,027H,0EFH,000H,000H,027H,0EFH,000H,000H,000H
//DB 000H,000H,000H,0EFH,0AAH,000H,000H,006H,011H,000H,000H,000H,027H,0EFH,000H,036H
//DB 080H,080H,000H,080H,000H,0A0H,01FH
//void delays(uint8_t dt)
//{
//	for(;dt;dt--)
//	{
#define DLT 6

void delays(uint8_t dly)
{
    uint8_t i;
    for( ; 0 != dly; dly--)
    {
        for(i = 10; 0 != i; i--)
        {    
        }
    }
}

void long_delay(uint32_t dly)
{
	for( ; 0x00000000 != dly; dly--)
	{
		delays(100);
	}
}

void lcm_dbus_dir(uint8_t dir)
{
    GPIO_InitTypeDef GPIO_InitStructure;
   	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | \
   		                          GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; 
	if(LCM_DBUS_IN == dir)
	{
    	/* Configure PE.00 -- PE.07 as input floating; LCM_DB0..7*/
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	}
	else
	{
    	/* Configure PE.00 -- PE.07 as input floating; LCM_DB0..7*/
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	}
   	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
}

void lcm_reg_write(uint8_t reg_name,uint8_t reg_data)
{
    //GPIO_InitTypeDef GPIO_InitStructure;

    /* Configure PE.00 -- PE.07 as input floating; LCM_DB0..7*/
    /*GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | \
    	                          GPIO_Pin_5 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOE, &GPIO_InitStructure);*/
	lcm_dbus_dir(LCM_DBUS_OUT);
  
	//LCM_DDR = 0XFF;
	lcm_reg_wr(reg_name);
	delays(DLT);;
	lcm_reg_wr(reg_data);
}

void lcm_reg_wr(uint8_t d)
{
//	while(!(LCM_BUSY_PIN & (1<<LCM_BUSY)));
	//LCM_DOUT = d;
    GPIO_Write(LCM_DOUT, d | 0xff00);
	delays(DLT);
	//LCM_CS_PORT &= (~(1<<LCM_CS));	//cs=0
    GPIO_ResetBits(LCM_CS_PORT, LCM_CS);
	delays(DLT);
	//LCM_RD_PORT |= (1<<LCM_RD);	//rd=1
    GPIO_SetBits(LCM_RD_PORT, LCM_RD);
	delays(DLT);
	//LCM_RS_PORT &= (~(1<<LCM_RS)); //rs=0
    GPIO_ResetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_WR_PORT &= (~(1<<LCM_WR)); //wr=0
    GPIO_ResetBits(LCM_WR_PORT, LCM_WR);
	delays(DLT);;
	//LCM_WR_PORT |= (1<<LCM_WR);//wr=1
    GPIO_SetBits(LCM_WR_PORT, LCM_WR);
	delays(DLT);
	//LCM_RS_PORT |= (1<<LCM_RS);//rs=1
    GPIO_SetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_CS_PORT |= (1<<LCM_CS);//cs=1
    GPIO_SetBits(LCM_CS_PORT, LCM_CS);
}

void lcm_data_write(uint8_t data)
{
	//while(!(LCM_BUSY_PIN & (1<<LCM_BUSY)));
	while(Bit_RESET == GPIO_ReadInputDataBit(LCM_BUSY_PIN, LCM_BUSY))
	{
	}
	//LCM_DDR=0XFF;
	lcm_dbus_dir(LCM_DBUS_OUT);
	delays(DLT);
	delays(DLT);
	//LCM_DOUT = data;
	GPIO_Write(LCM_DOUT, 0xff00 | data);
	delays(DLT);
	//LCM_CS_PORT &= (~(1<<LCM_CS));	//cs=0
    GPIO_ResetBits(LCM_CS_PORT, LCM_CS);
	
	delays(DLT);
	//LCM_RD_PORT |= (1<<LCM_RD);	//rd=1
	GPIO_SetBits(LCM_RD_PORT, LCM_RD);
	delays(DLT);
	//LCM_RS_PORT |= (1<<LCM_RS); //rs=1
	GPIO_SetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_WR_PORT &= (~(1<<LCM_WR)); //wr=0
    GPIO_ResetBits(LCM_WR_PORT, LCM_WR);
	delays(DLT);;
	//LCM_WR_PORT |= (1<<LCM_WR);//wr=1
	GPIO_SetBits(LCM_WR_PORT, LCM_WR);
	delays(DLT);;
	//LCM_RS_PORT |= (1<<LCM_RS);//rs=1
	GPIO_SetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_CS_PORT |= (1<<LCM_CS);//cs=1
	GPIO_SetBits(LCM_CS_PORT, LCM_CS);
}

uint8_t lcm_reg_read(uint8_t reg_name)
{
	//LCM_DDR = 0XFF;
	lcm_dbus_dir(LCM_DBUS_OUT);
	//while(!(LCM_BUSY_PIN & (1<<LCM_BUSY)));
	while(Bit_RESET == GPIO_ReadInputDataBit(LCM_BUSY_PIN, LCM_BUSY))
	{
	}
	lcm_reg_wr(reg_name);
	
	//LCM_DDR=0X00;
	delays(DLT);
	//LCM_DOUT=0XFF;
	lcm_dbus_dir(LCM_DBUS_IN);
	
	delays(DLT);
	//LCM_CS_PORT &= (~(1<<LCM_CS));	//cs=0
	GPIO_ResetBits(LCM_CS_PORT, LCM_CS);
	delays(DLT);
	//LCM_WR_PORT |= (1<<LCM_WR);	//wr=1
	GPIO_SetBits(LCM_WR_PORT, LCM_WR);
	delays(DLT);
	//LCM_RS_PORT &= (~(1<<LCM_RS)); //rs=0
	GPIO_ResetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_RD_PORT &= (~(1<<LCM_RD)); //rd=0
	GPIO_ResetBits(LCM_RD_PORT, LCM_RD);
	delays(DLT);;
	//reg_name=LCM_DIN;
	reg_name = GPIO_ReadInputData(LCM_DIN);
	delays(DLT);
	//LCM_RD_PORT |= (1<<LCM_RD);//rd=1
	GPIO_SetBits(LCM_RD_PORT, LCM_RD);
	delays(DLT);
	//LCM_RS_PORT |= (1<<LCM_RS);//rs=1
	GPIO_SetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_CS_PORT |= (1<<LCM_CS);//cs=1
	GPIO_SetBits(LCM_CS_PORT, LCM_CS);
	delays(DLT);
	//LCM_DDR = 0XFF;
	lcm_dbus_dir(LCM_DBUS_OUT);
	return reg_name;
}

uint8_t lcm_data_read(void)
{
	uint8_t reg_name;
	//while(!(LCM_BUSY_PIN & (1<<LCM_BUSY)));
	while(Bit_RESET == GPIO_ReadInputDataBit(LCM_BUSY_PIN, LCM_BUSY))
	{
	}
	delays(DLT);
	//LCM_DDR=0X00;
	delays(DLT);
	//LCM_DOUT=0XFF;
	lcm_dbus_dir(LCM_DBUS_IN);
	delays(DLT);
	//LCM_CS_PORT &= (~(1<<LCM_CS));	//cs=0
	GPIO_ResetBits(LCM_CS_PORT, LCM_CS);
	delays(DLT);
	//LCM_WR_PORT |= (1<<LCM_WR);	//wr=1
	GPIO_SetBits(LCM_WR_PORT, LCM_WR);
	delays(DLT);
	//LCM_RS_PORT |= (1<<LCM_RS); //rs=1
	GPIO_SetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_RD_PORT &= (~(1<<LCM_RD)); //rd=0
	GPIO_ResetBits(LCM_RD_PORT, LCM_RD);
	delays(DLT);
	//reg_name=LCM_DIN;
	reg_name = GPIO_ReadInputData(LCM_DIN);
	delays(DLT);
	//LCM_RD_PORT |= (1<<LCM_RD);//rd=1
	GPIO_SetBits(LCM_RD_PORT, LCM_RD);
	delays(DLT);
	//LCM_RS_PORT |= (1<<LCM_RS);//rs=1
	GPIO_SetBits(LCM_RS_PORT, LCM_RS);
	delays(DLT);
	//LCM_CS_PORT |= (1<<LCM_CS);//cs=1
	GPIO_SetBits(LCM_CS_PORT, LCM_CS);
	delays(DLT);
	//LCM_DDR = 0XFF;
	lcm_dbus_dir(LCM_DBUS_OUT);
	return reg_name;
}

void lcm_init(void)
{
	const uint8_t * paddr = init_paras;	
	uint8_t i;
 	//LCM_RST_PORT &= (~(1<<LCM_RST));
	GPIO_ResetBits(LCM_RST_PORT, LCM_RST);
	//LCM_CS_PORT |= (1<<LCM_CS);
	GPIO_SetBits(LCM_CS_PORT, LCM_CS);
	//LCM_RS_PORT |= (1<<LCM_RS);
	GPIO_SetBits(LCM_RS_PORT, LCM_RS);
	//LCM_WR_PORT |= (1<<LCM_WR);
	GPIO_SetBits(LCM_WR_PORT, LCM_WR);
	//LCM_RD_PORT |= (1<<LCM_RD);
	GPIO_SetBits(LCM_RD_PORT, LCM_RD);
	
	lcm_timer=10;
	while(lcm_timer);

	//LCM_RST_PORT |= (1<<LCM_RST);
	GPIO_SetBits(LCM_RST_PORT, LCM_RST);
	//LCM_BL_PORT |= (1<<LCM_BL);

	lcm_timer=160;
	while(lcm_timer);

	for(i=39;i;i--)
	{
		uint8_t addr, data;
		addr = *paddr++;
		data = *(paddr + 38);
		lcm_reg_write(addr, data);
	}

	lcm_set_disp_2layers();
	lcm_set_access_2layers();
	set_active_window(0,0,40,240);
	lcm_clr();
	lcm_set_layer_xor();
}

void lcm_clr(void)
{
	lcm_reg_write(LCMR_PNTR,0);
	lcm_reg_write(LCMR_FNCR,(lcm_reg_read(LCMR_FNCR) | 0X08));
	lcm_reg_write(LCMR_WLCR,0XC5);
	long_delay(20);
}

⌨️ 快捷键说明

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