论坛» 嵌入式开发» MCU

院士
2014-11-25 14:01 11楼
想法很好!编写速度也很快! 不过目测是不通过的。
专家
2014-11-25 14:26 12楼
这个想法很好啊,跟着一起学习。
高工
2014-11-26 14:55 13楼

修改了之后的代码:

1、将之前增加的数据脚输入输出模式选择的函数去掉了,换成了宏定义


#define LCD_PIN_DATBUS_OUT() (LCD_GPIO_PORT->CRL = 0X33333333) #define LCD_PIN_DATBUS_IN() (LCD_GPIO_PORT->CRL = 0X88888888)


2、写数据到液晶数据8个管脚



#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; }


工程师
2014-11-26 23:45 14楼
liklon第一步积淀任务完成,下来就是我的了。
工程师
2014-11-27 23:14 15楼

实际我真心不熟悉这种编程,看了一遍又一遍,数据手册也能看懂,让我按照数据手册上的步骤时序写,我可以写出来,但是合作大家一块写的话,我就不行了,还是比较生疏,只能在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); } }

工程师
2014-11-27 23:15 16楼
接下来去参加学长的婚礼,回来继续。。。
工程师
2014-11-28 08:30 17楼
昨晚做梦竟然都梦见这个程序了。
助工
2014-11-28 17:50 18楼
看来是STM32的高手啊
菜鸟
2016-12-17 15:49 19楼
共19条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]