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

📄 lcd_19264.c

📁 按键是比较复杂。可以用状态机表示。 每10mS执行一次键盘扫描任务 0、无键
💻 C
字号:
#include "lcd_19264.h"
#include "delay.h"
#include "ascii_5x8.h"
/*
#define LCD_CSA_H()	(GPIO_WriteHigh(LCD_CS_PORT, LCD_CSA_PIN))
//#define LCD_CSA_H()     (LCD_CS_PORT->ODR |= (1<<LCD_CSA_PIN))
#define LCD_CSA_L()	(GPIO_WriteLow(LCD_CS_PORT, LCD_CSA_PIN))
#define LCD_CSB_H()	(GPIO_WriteHigh(LCD_CS_PORT, LCD_CSB_PIN))
#define LCD_CSB_L()	(GPIO_WriteLow(LCD_CS_PORT, LCD_CSB_PIN))
#define LCD_E_H()	(GPIO_WriteHigh(LCD_CONTROL_PORT, LCD_E_PIN))
#define LCD_E_L()	(GPIO_WriteLow(LCD_CONTROL_PORT, LCD_E_PIN))
#define LCD_RS_H()	(GPIO_WriteHigh(LCD_CONTROL_PORT, LCD_RS_PIN))
#define LCD_RS_L()	(GPIO_WriteLow(LCD_CONTROL_PORT, LCD_RS_PIN))
#define LCD_RW_H()	(GPIO_WriteHigh(LCD_CONTROL_PORT, LCD_RW_PIN))
#define LCD_RW_L()	(GPIO_WriteLow(LCD_CONTROL_PORT, LCD_RW_PIN))
*/

#define LCD_CSA_H()	(PG_ODR|=0X01)
#define LCD_CSA_L()	(PG_ODR&=~0x01)
#define LCD_CSB_H()	(PG_ODR|=0X02)
#define LCD_CSB_L()	(PG_ODR&=~0X02)
#define LCD_E_H()	(PA_ODR|=(1<<4))
#define LCD_E_L()	(PA_ODR&=~(1<<4))
#define LCD_RS_H()	(PA_ODR|=(1<<6))
#define LCD_RS_L()	(PA_ODR&=~(1<<6))
#define LCD_RW_H()	(PA_ODR|=(1<<5))
#define LCD_RW_L()	(PA_ODR&=~(1<<5))

#define LCD_DATA_INPUT_MODE()   (GPIO_Init(LCD_DATA_PORT, LCD_DATA_PIN, GPIO_MODE_IN_FL_NO_IT))
#define LCD_DATA_OUTPUT_MODE()  (GPIO_Init(LCD_DATA_PORT, LCD_DATA_PIN, GPIO_MODE_OUT_PP_HIGH_FAST))
#define LCD_SET_DATA(x)	        (PB_ODR = x&0xf0, PC_ODR=(x<<4), PE_ODR=(x&0x01))
#define LCD_READ_DATA()	        (GPIO_ReadInputData(LCD_DATA_PORT))

static u8 dirty;
@near volatile static u8 DisplayBuffer[8][192];

void LCD_WriteCommand(u8 cmd, u8 ChipSel)
{
	LCD_E_L();
	LCD_RW_L();

	if( ChipSel == LCD_LEFT )
	{
        LCD_CSB_L();
		LCD_CSA_L();
	}
	else if( ChipSel == LCD_MID )
	{
        // CSB_CSA
		LCD_CSB_L();
        LCD_CSA_H();
	}
	else
	{
        LCD_CSB_H();
		LCD_CSA_L();
	}

	LCD_RS_L();	// Command signal
	delay_us(3);
	LCD_E_H();

	LCD_SET_DATA(cmd);
	//GPIO_Write(LCD_DATA_PORT, cmd);
    //GPIO_Write(LCD_DATA2_PORT, cmd<<5);
    delay_us(3);

	LCD_E_L();
	LCD_RW_H();
    LCD_E_H();
	LCD_CSB_H();
	LCD_CSA_H();


}

void LCD_WriteData(u8 Data, u8 ChipSel)
{
	LCD_E_L();	
	LCD_RW_L();
    if( ChipSel == LCD_LEFT )
	{
        LCD_CSB_L();
		LCD_CSA_L();
	}
	else if( ChipSel == LCD_MID )
	{
        // CSB_CSA
		LCD_CSB_L();
        LCD_CSA_H();
	}
	else
	{
        LCD_CSB_H();
		LCD_CSA_L();
	}
	LCD_RS_H();	// Data signal
	delay_us(3);
	LCD_E_H();

	LCD_SET_DATA(Data);
    //GPIO_Write(LCD_DATA_PORT, Data);
   // GPIO_Write(LCD_DATA2_PORT, Data<<5);
    
    delay_us(3);

	LCD_E_L();
	LCD_RW_H();
    LCD_E_H();
	LCD_CSB_H();
	LCD_CSA_H();

}

u8 LCD_ReadData(void)
{
	u8 rData;

	LCD_E_L();
	LCD_RW_H();
    
    LCD_CSA_L();
    LCD_CSB_L();
	
	LCD_RS_H();

	LCD_E_H();
	delay_us(1);
	
	LCD_DATA_INPUT_MODE();
	rData = LCD_READ_DATA();
	LCD_DATA_OUTPUT_MODE();

	LCD_RW_L();
	LCD_E_H();
	LCD_CSA_H();
	LCD_CSB_H();

	return rData;

}

u8 LCD_ReadCommand(void)
{
	u8 rData;

	LCD_E_L();
	LCD_RW_H();

	LCD_CSA_L();
	LCD_CSB_L();
	
	LCD_RS_L();

	LCD_E_H();
	delay_us(1);

	LCD_DATA_INPUT_MODE();
	rData = LCD_READ_DATA();
	LCD_DATA_OUTPUT_MODE();

	LCD_RW_L();
	LCD_E_H();
	LCD_CSA_H();
	LCD_CSB_H();

	return rData;

}

void LCD_Init(void)
{
    int i;
    @near u8 *p;
    p = (u8*)DisplayBuffer;
/*
    GPIO_Init(LCD_DATA_PORT, LCD_DATA_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(LCD_DATA2_PORT, LCD_DATA2_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
	GPIO_Init(LCD_CONTROL_PORT, (LCD_E_PIN|LCD_RS_PIN|LCD_RW_PIN), GPIO_MODE_OUT_PP_HIGH_FAST);
	GPIO_Init(LCD_CS_PORT, (LCD_CSA_PIN|LCD_CSB_PIN), GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(LCD_RES_PORT, LCD_RES_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
*/

    PB_DDR = 0xf0;
    PB_CR1 = 0xf0;
    PB_CR2 = 0xf0;
    
    PC_DDR = 0xe0;                              // pc5\6\7
    PC_CR1 = 0xe0;
    PC_CR2 = 0xe0;
    
    PA_DDR |= (1<<4)|(1<<5)|(1<<6);              /* Output.                   */
    PA_CR1 |= (1<<4)|(1<<5)|(1<<6);              /* PushPull.                 */
    PA_CR2 |= (1<<4)|(1<<5)|(1<<6);              /* Output speed up to 10MHz. */
    
    PG_DDR |= 0X03;
    PG_CR1 |= 0X03;
    PG_CR2 |= 0X03;
    
    PE_DDR |= 0X01;
    PE_CR1 |= 0X01;
    PE_CR2 |= 0X01;
    PE_ODR |= 0X01;
    
    for(i = 0; i < 192*8; ++i, ++p)
        *p = 0;
    LCD_WriteCommand(LCD_DISPLAY_ON, LCD_LEFT);
    LCD_WriteCommand(LCD_DISPLAY_ON, LCD_MID);
    LCD_WriteCommand(LCD_DISPLAY_ON, LCD_RIGHT);
    LCD_WriteCommand(LCD_START_LINE+0, LCD_LEFT);
    
}

void LCD_BufferDrawPixel(u8 x, u8 y, DrawMode mode)
{
	char DX = (y >> 3);                 // 璁$畻鍑哄睘浜庡摢涓

⌨️ 快捷键说明

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