📄 lcd_19264.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 + -