• 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] ='';
                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: Óû§´úÂë
    }
    View Code

    其实要改写的东西并不多,但是效果却十分的明显,只能是这块屏幕太给力了

  • 相关阅读:
    Springboot配置文件解析器
    ThreadLocal的简单使用和实现原理
    hashCode()方法对HashMap的性能影响
    Thread中的join()方法
    Windows使用MongoDB,以及索引创建
    Android--我的Butterknife黄油刀怎么找不到控件了!!!
    Android--RecyclerView的封装使用
    Android--自定义加载框
    Android--Retrofit+RxJava的简单封装(三)
    Android--Retrofit+RxJava(二)
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3424734.html
Copyright © 2020-2023  润新知