11.16学习笔记

好久没有更新博客了,最近在用51搞那个虚拟串口屏幕,代码和程序,还有图版都弄好了,但是坑爹的是,竟然忘记如何编写这个串口通信协议了,无奈,自己只好去重新放出以前的学习笔记,整理博客真的是一个好的习惯~~

 

这几些天,排版画面也搞了我好久,还有下载对应的datasheet也花了我不少的时间,我开始的时候不知道下载对应的datasheet来看,急于点灯搞得最后忙乎了好久,最近在看他写的示例代码,感觉有点难懂,当然要花时间来整理啦,我感觉学习屏幕就像是搞12864,开始起步阶段肯定有点难度,好了,吐槽就到这里,继续奋斗~~

 

屏幕的程序终于看懂一点了:这里看懂程序,观察程序的效果还是不错的

这里晒出程序的代码:

/************************************°æȨÉêÃ÷********************************************

**                             ¹ãÖÝ´ó²Ê¹âµç¿Æ¼¼ÓÐÏÞ¹«Ë¾                                

**                             http://www.gz-dc.com

**-----------------------------------ÎļþÐÅÏ¢--------------------------------------------

** ÎļþÃû³Æ:   main.c 

** ´´½¨Ê±¼ä:   2012-06-1

** Îļþ˵Ã÷:   Ö÷³ÌÐòÄ£¿é°üº¬³ÌÐòµÄ»ù±¾´¦ÀíÁ÷³Ì£¬¸ù¾ÝÐèÒªÌí¼ÓÏûÏ¢µÄÏìÓ¦´¦Àí¡£

** ¼¼ÊõÖ§³Ö£º  Tel: 020-82186683 Email: [email protected]



Ð޸ļǼ

ÈÕÆÚ: 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

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

你可能感兴趣的:(学习笔记)