修改了之后的代码:
1、将之前增加的数据脚输入输出模式选择的函数去掉了,换成了宏定义
#define LCD_PIN_DATBUS_OUT() (LCD_GPIO_PORT->CRL = 0X33333333) #define LCD_PIN_DATBUS_IN() (LCD_GPIO_PORT->CRL = 0X88888888)
#define LCD_DATBUS_WRITE(DAT) (LCD_GPIO_PORT->BSRR = (0X00FF0000 | ((DAT) & 0X00FF)))
3、读忙函数:
static bool LcdIsIdle(void)
{
LCD_PIN_DATBUS_IN();
LCD_READ_SELECT();
LCD_INST_SELECT();
LCD_ENABLE();
if(1 == LCD_READ_BUSY())
{
LCD_DISABLE();
return false;
}
LCD_DISABLE();
return true;
}
4、写指令函数
static ErrorNo LCD_WriteCmd(uint8_t cmd, uint8_t cs)
{
uint8_t BusyDelay = 255;
switch(cs)
{
case LCD_SELECT_CS_1:
LCD_CS1_SELECT();
LCD_CS2_N_SELECT();
break;
case LCD_SELECT_CS_2:
LCD_CS2_SELECT();
LCD_CS1_N_SELECT();
break;
case LCD_SELECT_CS_ALL:
LCD_CS1_SELECT();
LCD_CS2_SELECT();
break;
default: break;
}
do
{
if(0 == BusyDelay)
{
return 0x01;
}
BusyDelay--;
}while(!(LcdIsIdle()));
LCD_PIN_DATBUS_OUT();
LCD_INST_SELECT();
LCD_WRITE_SELECT();
LCD_ENABLE();
LCD_DATBUS_WRITE(cmd);
LCD_DISABLE();
return 0X00;
}
5、写数据函数
static ErrorNo LCD_WriteData(uint8_t data, uint8_t cs)
{
uint8_t BusyDelay = 255;
switch(cs)
{
case LCD_SELECT_CS_1:
LCD_CS1_SELECT();
LCD_CS2_N_SELECT();
break;
case LCD_SELECT_CS_2:
LCD_CS2_SELECT();
LCD_CS1_N_SELECT();
break;
case LCD_SELECT_CS_ALL:
LCD_CS1_SELECT();
LCD_CS2_SELECT();
break;
default: break;
}
do
{
if(0 == BusyDelay)
{
return 0x01;
}
BusyDelay--;
}while(!(LcdIsIdle()));
LCD_PIN_DATBUS_OUT();
LCD_DATA_SELECT();
LCD_WRITE_SELECT();
LCD_ENABLE();
LCD_DATBUS_WRITE(data);
LCD_DISABLE();
return 0X00;
}
实际我真心不熟悉这种编程,看了一遍又一遍,数据手册也能看懂,让我按照数据手册上的步骤时序写,我可以写出来,但是合作大家一块写的话,我就不行了,还是比较生疏,只能在jobs的程序中改改,实际也没改什么,读的让我能看懂,幸好我接的这四个函数中只调用了liklon一个函数(LCD_WriteCmd),还是比较简单的。虽然最终完成效果可能达不到预期,但是我的收获是读懂了这种写程序的方法,和其他人合作等,希望我继续进步吧。
/*********************************************************************************************************
** Function name: ErrorNo LCD_SetFirstLine(uint8_t lineNum)
** Descriptions: 设置显示起始行寄存器的内容
** Input parameters: lineNum:0-63
** Returned value: err,无错返回:0x00
*********************************************************************************************************/
ErrorNo LCD_SetFirstLine(uint8_t lineNum)
{
ErrorNo err;
lineNum |= CMD_FIRST_LINE;
err = LCD_WriteCmd(lineNum, CS1 | CS2);
return err;
}
/*********************************************************************************************************
** Function name: static ErrorNo LCD_SetXDirect(uint8_t page)
** Descriptions: 设置页地址(X方向),8行一页,模块共64行即8页(0-7)
** Input parameters: uint8_t page 页地址
** Returned value: 无
*********************************************************************************************************/
static ErrorNo LCD_SetXDirect(uint8_t page)
{
page |= CMD_PAGE_NUM;
LCD_WriteCmd(page, CS1 | CS2);
}
/*********************************************************************************************************
** Function name: static ErrorNo LCD_SetYDirect(uint8_t row)
** Descriptions: 设置Y地址(Y方向),即列号(0-63)。
**
** Input parameters: uint8_t row Y地址
** Returned value: None 无
*********************************************************************************************************/
static ErrorNo LCD_SetYDirect(uint8_t row)
{
row |= CMD_ROW_NUM;
LCD_WriteCmd(row, CS1 | CS2);
}
/*********************************************************************************************************
** Function name: ErrorNo LCD_SetStartPoint(uint8_t point_x, uint8_t point_y)
** Descriptions: 设置起始点的X、Y值。当y > 63时,cs2选通,否则cs1选通
** Input parameters: uint8_t point_x, uint8_t point_y
** Returned value: None 无
*********************************************************************************************************/
ErrorNo LCD_SetStartPoint(uint8_t point_x, uint8_t point_y)
{
if(point_y > ROW_MAX)
{
point_y = point_y - ROW_MAX - 1;
LCD_SetXDirect(point_x);
LCD_SetYDirect(point_y);
}
else
{
LCD_SetXDirect(point_x);
LCD_SetYDirect(point_y);
}
}
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金
