11.16学习笔记
好久没有更新博客了,最近在用51搞那个虚拟串口屏幕,代码和程序,还有图版都弄好了,但是坑爹的是,竟然忘记如何编写这个串口通信协议了,无奈,自己只好去重新放出以前的学习笔记,整理博客真的是一个好的习惯~~
这几些天,排版画面也搞了我好久,还有下载对应的datasheet也花了我不少的时间,我开始的时候不知道下载对应的datasheet来看,急于点灯搞得最后忙乎了好久,最近在看他写的示例代码,感觉有点难懂,当然要花时间来整理啦,我感觉学习屏幕就像是搞12864,开始起步阶段肯定有点难度,好了,吐槽就到这里,继续奋斗~~
屏幕的程序终于看懂一点了:这里看懂程序,观察程序的效果还是不错的
这里晒出程序的代码:
/************************************°æȨÉêÃ÷******************************************** ** ¹ãÖÝ´ó²Ê¹âµç¿Æ¼¼ÓÐÏÞ¹«Ë¾ ** http://www.gz-dc.com **-----------------------------------ÎļþÐÅÏ¢-------------------------------------------- ** ÎļþÃû³Æ: main.c ** ´´½¨Ê±¼ä: 2012-06-1 ** Îļþ˵Ã÷: Ö÷³ÌÐòÄ£¿é°üº¬³ÌÐòµÄ»ù±¾´¦ÀíÁ÷³Ì£¬¸ù¾ÝÐèÒªÌí¼ÓÏûÏ¢µÄÏìÓ¦´¦Àí¡£ ** ¼¼ÊõÖ§³Ö£º Tel: 020-82186683 Email: hmi@gz-dc.com Ð޸ļǼ ÈÕÆÚ: 2012-10-08 1) Ö¸Áî¶ÓÁÐqueue_find_cmdÌí¼ÓÖ¡Í·ÅÐ¶Ï 2) ½á¹¹ÌåCTRL_MSGÖ¸¶¨°´×Ö½Ú¶ÔÆ룬·ñÔò¿ÉÄÜ»á³öÏÖ¶ÔÆëÎÊÌâ 3) Ìí¼Óuint32»ù±¾ÀàÐͶ¨Ò壬²¢ÐÞ¸ÄÏà¹ØÖ¸Áî½âÎö /**------------------------------------------------------------------------------------*/ #include "hmi_driver.h" #include "hmi_user_uart.h" #include "cmd_process.h" #define CMD_MAX_BUFFER 20 uint8 cmd_buffer[CMD_MAX_BUFFER]; /************************************************************************************************************** * Ãû ³Æ£º serial * ¹¦ ÄÜ£º ´®¿Ú½ÓÊÕÖжϳÌÐò * Èë¿Ú²ÎÊý£º ÎÞ * ³ö¿Ú²ÎÊý£º ÎÞ ***************************************************************************************************************/ void serial() interrupt 4 { if(RI)//½ÓÊÕµ½´°¿ÚÊý¾Ý { RI= 0; queue_push(SBUF);//ѹÈëµ½Ö¸Á³åÇø } } /************************************************************************************************************** * Ãû ³Æ£º main * ¹¦ ÄÜ£º ³ÌÐòÈë¿Ú ***************************************************************************************************************/ void main() { uchar cmd_type = 0; uchar control_type = 0; qsize offset = 0; qsize size = 0; PCTRL_MSG msg = 0; delay_ms(20);//ÑÓʱ UartInit();//´®¿Ú³õʼ»¯ queue_reset();//Çå¿ÕÖ¸Áî½ÓÊÕ»º³åÇø while(1) { size = queue_find_cmd(cmd_buffer,CMD_MAX_BUFFER); //´Ó»º³åÇøÖлñÈ¡Ò»ÌõÖ¸Áî if(size<=0)//ûÓнÓÊÕµ½Ö¸Áî continue; msg = (PCTRL_MSG)cmd_buffer; cmd_type = msg->cmd_type;//Ö¸ÁîÀàÐÍ switch(cmd_type) { case CMD_TOUCH_PRESS_RETURN://°´Ï´¥ÃþÆÁ case CMD_TOUCH_RELEASE_RETURN://ËÉ¿ª´¥ÃþÆÁ OnRecvTouchXY(cmd_buffer[1],PTR2U16(cmd_buffer+2),PTR2U16(cmd_buffer+4)); break; case CMD_TYPE_CHANGE_SCREEN://Çл»»Ãæ OnRecvChangeScreen(PTR2U16(&msg->screen_id)); break; case CMD_TYPE_UPDATE_CONTROL://¿Ø¼þ¸üÐÂÏûÏ¢ control_type = msg->control_type;//¿Ø¼þÀàÐÍ switch(control_type) { case kCtrlButton: OnRecvButton(msg,size); break; //°´Å¥¿Ø¼þ´¦Àí case kCtrlText: OnRecvText(msg,size); break; //Îı¾¿Ø¼þ´¦Àí case kCtrlProgress: OnRecvProgress(msg,size); break; //½ø¶ÈÌõ¿Ø¼þ´¦Àí case kCtrlSlider: OnRecvSlider(msg,size); break; //»¬¶¯Ìõ¿Ø¼þ´¦Àí case kCtrlMeter: OnRecvMeter(msg,size); break; //ÒDZí¿Ø¼þ´¦Àí default: break; } break; } } } /************************************************************************************************************** * Ãû ³Æ£º OnRecvChangeScreen * ¹¦ ÄÜ£º »ÃæÇл»ÏûÏ¢ÏìÓ¦º¯Êý * Èë¿Ú²ÎÊý£º screen_id-Çл»ºóµÄ»ÃæID ***************************************************************************************************************/ void OnRecvChangeScreen(uint16 screen_id) { //TODO: Óû§´úÂë } /************************************************************************************************************** * Ãû ³Æ£º OnRecvTouchXY * ¹¦ ÄÜ£º ´¥Ãþ×ø±ê½ÓÊÕÏìÓ¦ * Èë¿Ú²ÎÊý£º press-1°´Ï´¥ÃþÆÁ£¬3ËÉ¿ª´¥ÃþÆÁ * Èë¿Ú²ÎÊý£º x-´¥ÃþX×ø±ê * Èë¿Ú²ÎÊý£º y-´¥Ãþy×ø±ê ***************************************************************************************************************/ void OnRecvTouchXY(uint8 press,uint16 x,uint16 y) { //TODO: Óû§´úÂë } /************************************************************************************************************** * Ãû ³Æ£º OnRecvButton * ¹¦ ÄÜ£º °´Å¥ÏûÏ¢ÏìÓ¦º¯Êý * Èë¿Ú²ÎÊý£º msg-Ö¸Á³åÇø£¬size-Ö¸Áî´óС ***************************************************************************************************************/ void OnRecvButton(PCTRL_MSG msg,qsize size) { uint16 screen_id = PTR2U16(&msg->screen_id);//»ÃæID uint16 control_id = PTR2U16(&msg->control_id);//¿Ø¼þID uint8 button_type = msg->param[0];//0»ÃæÇл»£¬1°´Å¥£¬2ÐéÄâ°´¼ü uint8 value = msg->param[1];//°´Å¥ÊýÖµ //TODO: Óû§´úÂë uint8 i=0; if(screen_id==0&&control_id==1) //Èç¹û»Ãæ0µÄÎı¾ÏÔʾ°´Å¥±»°´Ï { uchar powerdata[3]; SetTextValue(1,2,"2.00A" ); //Îı¾¿Ø¼þ²Ù×÷£¬¶Ô»Ãæ1µÄ¿Ø¼þ2½øÐÐд×Ö·û´®"2.00A" for( i=0;i<60;i++) //Îı¾¿Ø¼þ²Ù×÷£¬¶Ô»Ãæ1µÄ¿Ø¼þ3²»¶ÏдÈë±ä»¯µÄÊý¾Ý { powerdata[0] = 0x30+i/10; powerdata[1] = 0x30+i%10; powerdata[2] ='\0'; SetTextValue(1,3,powerdata);//дÈë²»¶Ï±ä»¯µÄÊý¾Ý delay_ms(20); } } else if(screen_id==0&&control_id==3) //Èç¹û»Ãæ0µÄÇúÏßÏÔʾ°´Å¥±»°´Ï { SetProgressValue(3,2,40); //Ç°¾°É«ÎªÀ¶É«µÄ½ø¶ÈÌõ£¨×îСֵ0£¬×î´óÖµ100£¬PCÈí¼þ½øÐÐÉèÖã©£¬³õʼΪ40 SetProgressValue(3,3,80); //Ç°¾°É«ÎªÂÌÉ«µÄ½ø¶ÈÌõ£¨×îСֵ0£¬×î´óÖµ100£¬PCÈí¼þ½øÐÐÉèÖã©£¬³õʼΪ80 for( i=0;i<100;i=i+5) //Ç°¾°É«ÎªºìÉ«µÄ½ø¶ÈÌõ£¨×îСֵ0£¬×î´óÖµ100£¬PCÈí¼þ½øÐÐÉèÖã©£¬³õʼΪ0 { SetProgressValue(3,4,i); //½ø¶ÈÌõ²»¶ÏÔö¼Ó delay_ms(20); } for( i=99;i>5;i=i-5) { SetProgressValue(3,4,i); //½ø¶ÈÌõ²»¶Ï¼õÉÙ delay_ms(20); } for( i=0;i<180;i=i+5) //ÒDZíת¶¯ { SetMeterValue(3,5,i); //ÒDZíµÝÔöת¶¯ delay_ms(20); } } } /************************************************************************************************************** * Ãû ³Æ£º OnRecvText * ¹¦ ÄÜ£º Îı¾¿Ø¼þÏûÏ¢ÏìÓ¦º¯Êý * Èë¿Ú²ÎÊý£º msg-Ö¸Á³åÇø£¬size-Ö¸Áî´óС ***************************************************************************************************************/ void OnRecvText(PCTRL_MSG msg,qsize size) { uint16 screen_id = PTR2U16(&msg->screen_id);//»ÃæID uint16 control_id = PTR2U16(&msg->control_id);//¿Ø¼þID //TODO: Óû§´úÂë } /************************************************************************************************************** * Ãû ³Æ£º OnRecvProgress * ¹¦ ÄÜ£º ½ø¶ÈÌõÏûÏ¢ÏìÓ¦º¯Êý * Èë¿Ú²ÎÊý£º msg-Ö¸Á³åÇø£¬size-Ö¸Áî´óС ***************************************************************************************************************/ void OnRecvProgress(PCTRL_MSG msg,qsize size) { uint16 screen_id = PTR2U16(&msg->screen_id);//»ÃæID uint16 control_id = PTR2U16(&msg->control_id);//¿Ø¼þID uint32 value = PTR2U32(msg->param);//ÊýÖµ //TODO: Óû§´úÂë } /************************************************************************************************************** * Ãû ³Æ£º OnRecvSlider * ¹¦ ÄÜ£º »¬¶¯ÌõÏûÏ¢ÏìÓ¦º¯Êý * Èë¿Ú²ÎÊý£º msg-Ö¸Á³åÇø£¬size-Ö¸Áî´óС ***************************************************************************************************************/ void OnRecvSlider(PCTRL_MSG msg,qsize size) { uint16 screen_id = PTR2U16(&msg->screen_id);//»ÃæID uint16 control_id = PTR2U16(&msg->control_id);//¿Ø¼þID uint32 value = PTR2U32(msg->param);//ÊýÖµ //TODO: Óû§´úÂë SetBackLight(value%255);//µ÷½Ú±³¹â } /************************************************************************************************************** * Ãû ³Æ£º OnRecvMeter * ¹¦ ÄÜ£º ÒDZíÏûÏ¢ÏìÓ¦º¯Êý * Èë¿Ú²ÎÊý£º msg-Ö¸Á³åÇø£¬size-Ö¸Áî´óС ***************************************************************************************************************/ void OnRecvMeter(PCTRL_MSG msg,qsize size) { uint16 screen_id = PTR2U16(&msg->screen_id);//»ÃæID uint16 control_id = PTR2U16(&msg->control_id);//¿Ø¼þID uint32 value = PTR2U32(msg->param);//ÊýÖµ //TODO: Óû§´úÂë }
其实要改写的东西并不多,但是效果却十分的明显,只能是这块屏幕太给力了