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: Óû§´úÂë
}
View Code

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

posted @ 2013-11-15 09:46  跨七海的风  阅读(396)  评论(1编辑  收藏  举报