zoukankan      html  css  js  c++  java
  • 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; //ÒÇ±í¿Ø¼þ´¦Àí
                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

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

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3424734.html
Copyright © 2011-2022 走看看