|
本帖最后由 zhuisuoji 于 2015-6-19 18:28 编辑
红牛板已经好几年了,很少玩,最近看到emWin比较火,于是也尝试一下,结果很失望,功力不够!
就一个鼠标拖尾问题搞了将近1个星期,也硬着头皮去啃了N遍英文版本的emWin.PDF及ssd1963.PDF文件,当然也少不了坛里高手的杰作,但问题依旧.
问度娘也没有了办法,关键最烦的还是要忍受无数次的MDK罢工.
但我移植其它液晶驱动没有这个现象.
问坛里也没几个理哟,这是之前我发的求助帖子:http://www.amobbs.com/forum.php?mod=viewthread&tid=5625212&pid=8633423&page=1&extra=#pid8633423
功夫不负有心人,昨晚终于搞定了.
本来想搞搞气氛犒劳一下自己,顶到100楼才公布答案的,也不知道坛友是否支持?
http://v.youku.com/v_show/id_XMTI2NTg0NjQwMA==.html
以下是方法:
用的模板是LCDConf_FlexColor_Template.c
下面是代码,在关键部分都作了说明:
- /********************************************************************
- *
- * LcdWriteData
- *
- * Function description:
- * Writes a value to a display register
- */
- static void LcdWriteData(U16 Data) {
- // ... TBD by user
- LCD_RAM = Data;
- }
- /********************************************************************
- *
- * LcdWriteDataMultiple
- *
- * Function description:
- * Writes multiple values to a display register.
- */
- static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
- while (NumItems--) {
- // ... TBD by user
- LCD_RAM = * pData++;
- }
- }
- /********************************************************************
- *
- * LcdReadDataMultiple
- *
- * Function description:
- * Reads multiple values from a display register.
- */
- static void LcdReadDataMultiple(U16 * pData, int NumItems) {
- while (NumItems--) {
- LcdWriteReg(CMD_RD_MEMSTART);//--每次都需要发送读取命令(0x2E),这里会影响读取速度,但目前只有这样了
- * pData++ = LCD_RAM;
- }
- }
- /*********************************************************************
- *
- * Public functions
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * LCD_X_Config
- *
- * Function description:
- * Called during the initialization process in order to set up the
- * display driver configuration.
- *
- */
- void LCD_X_Config(void) {
- GUI_DEVICE * pDevice;
- CONFIG_FLEXCOLOR Config = {0};
- GUI_PORT_API PortAPI = {0};
- unsigned TouchOrientation;
- //
- // Set display driver and color conversion
- //
- pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);
- GUIDRV_FlexColor_SetReadFunc66720_B16(pDevice, GUIDRV_FLEXCOLOR_READ_FUNC_II);//--这个很重要,空读1次,第2次接收GUICC_M565数据
- //
- // Display driver configuration, required for Lin-driver
- //
- LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
- LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
- //
- // Set orientation of touch screen (only required when using
- //
- TouchOrientation = GUI_SWAP_XY ;
-
- GUI_TOUCH_SetOrientation(TouchOrientation);
-
- GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 239, GUI_TOUCH_AD_TOP, GUI_TOUCH_AD_BOTTOM);
- GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 319, GUI_TOUCH_AD_LEFT,GUI_TOUCH_AD_RIGHT);
- //
- // Orientation
- //
- Config.Orientation = 0;//GUI_SWAP_XY | GUI_MIRROR_Y
- //Config.NumDummyReads = 0; //--读第2次才开始数据的读取,这里起不到作用注释掉,改用上面来设置
- GUIDRV_FlexColor_Config(pDevice, &Config);
- //
- // Set controller and operation mode
- //
- PortAPI.pfWrite16_A0 = LcdWriteReg;
- PortAPI.pfWrite16_A1 = LcdWriteData;
- PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
- PortAPI.pfReadM16_A1 = LcdReadDataMultiple;
- GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66720, GUIDRV_FLEXCOLOR_M16C0B16);
- }
- /*********************************************************************
- *
- * LCD_X_DisplayDriver
- *
- * Function description:
- * This function is called by the display driver for several purposes.
- * To support the according task the routine needs to be adapted to
- * the display controller. Please note that the commands marked with
- * 'optional' are not cogently required and should only be adapted if
- * the display controller supports these features.
- *
- * Parameter:
- * LayerIndex - Index of layer to be configured
- * Cmd - Please refer to the details in the switch statement below
- * pData - Pointer to a LCD_X_DATA structure
- *
- * Return Value:
- * < -1 - Error
- * -1 - Command not handled
- * 0 - Ok
- */
- int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {
- int r;
- (void) LayerIndex;
- (void) pData;
-
- switch (Cmd) {
- case LCD_X_INITCONTROLLER: {
- //
- // Called during the initialization process in order to set up the
- // display controller and put it into operation. If the display
- // controller is not initialized by any external routine this needs
- // to be adapted by the customer...
- //
- // ...
- LCD_Initializtion();
- return 0;
- }
- default:
- r = -1;
- }
- return r;
- }
- /*************************** End of file ****************************/
复制代码
下面是有关emWin的设置摘要说明:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|