亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? keyboard.c

?? 實現(xiàn)了dsPIC30f6012a通過SPC3與PLC通信
?? C
?? 第 1 頁 / 共 2 頁
字號:
//************************************************************************
//File Name:   Keyboard.c
//Include:    void Key_Scan(unsigned char *buffer, unsigned char *counter,
//                         unsigned char *step, unsigned char *key_value);
//                           -- Scan the keyboard and return a value.
//             void Key_Treat(unsigned char key_value);
//                    -- Treat the value which comes from Key_Scan func.
//Description: Scan the keyboard and treat with it.
//************************************************************************
#include "Headfiles.h"

//************************************************************************
//Func. Name:        Key_Scan Func.
//Input variables:   unsigned char *buffer -- Record the key value temporarily.
//                   unsigned char *counter-- Record the scan times.
//                   unsigned char *step   -- Record the scan step,
//                                            may be one of the following value:
//                                  "KEYBOARD_SCAN_START, KEYBOARD_SCAN_DELAY_1, 
//                                   KEYBOARD_SCAN_GETKEY, KEYBOARD_SCAN_DELAY_2,
//                                   KEYBOARD_SCAN_SPDUP_1, KEYBOARD_SCAN_SPDUP_2"
//                   unsigned char *key_value  -- Record the result of scan,
//                                            may be one of the following value:
//                                  "NON_KEY, LEFT_KEY, RIGHT_KEY, UP_KEY,
//                                   DOWN_KEY, ENTER_KEY, MENU_KEY"
//Output variables:  None
//Use sub-func.list: None
//Used by list:      MainFunc.c - void main(void);
//Description:       Scan the keyboard and return a reslut of the scan.If one key
//                is pressed, it will return logic 0; otherwise return logic 1.
//                   ------------------
//                  | MSP430      P1.0 |<--- key1 (UP_KEY)
//                  |  F167       P1.1 |<--- key2 (DOWN_KEY)
//                  |             P1.2 |<--- key3 (LEFT_KEY)
//                  |             P1.3 |<--- key4 (RIGHT_KEY)
//                  |             P1.4 |<--- key5 (MENU_KEY)
//                  |             P1.5 |<--- key6 (ENTER_KEY)
//********************************************************************************
void Key_Scan(unsigned char *buffer, unsigned char *counter, unsigned char *step, unsigned char *key_value)
{
    switch (*step)                   //"step" is signed with way the of the subfunc.
    {
        case KEYBOARD_SCAN_START :       //Keyboard scan func. starts from here.
            if (((PORTD >> 5) & 0x3F) != 0x3F)   //Scan the ports and make sure whether one of them is valued or not.
            {
                *buffer = (PORTD >> 5) & 0x3F;    //If valued, record it to the buffer.
                *counter = 0;             //Clear the counter.
                *step = KEYBOARD_SCAN_DELAY_1;  //Go to delay_1 step.
            }
            else                         //If not valued
            {
                *buffer = 0x00;          //Clear the buffer for next scan.
                *key_value = NON_KEY;        //Record the result of this scan, none key is pressed.
                *counter = 0;            //Clear the counter
                *step = KEYBOARD_SCAN_START; //Go to start step at the next scan.
            }
            break;
        case KEYBOARD_SCAN_DELAY_1 :     //Delay for preventing mechnical tremble in pressing the key.
            if (*counter >= 5)           //The counter is enough and go on.
            {
                *step = KEYBOARD_SCAN_GETKEY;  //Go to getkey step.
                *counter = 0;              //Clear the counter.
            }
            else                        //The counter is not enough and continue to count.
            {
                (*counter)++;            //Continue to count.
                *step = KEYBOARD_SCAN_DELAY_1;  //Back to the delay step at the next scan.
                *key_value = NON_KEY;      //Record none key is pressed.
            }
            break;
        case KEYBOARD_SCAN_GETKEY :       //Scan the keyboard and record the value is key is pressed.
            if (*buffer == ((PORTD >> 5) & 0x3F))  //Scan the keyboard and compare with the buffer
            {
                switch (*buffer)          //If the value in buffer is as same as the keyboard.
                {
                    case 0x1F : *key_value = UP_KEY;     break;
                    case 0x2F : *key_value = DOWN_KEY;   break;
                    case 0x37 : *key_value = LEFT_KEY;   break;
                    case 0x3B : *key_value = RIGHT_KEY;  break;
                    case 0x3D : *key_value = MENU_KEY;   break;
                    case 0x3E : *key_value = ENTER_KEY;  break;
                    default   : *key_value = NON_KEY;    break;  //Record the value to "value" variable.
                }
                //*step =  KEYBOARD_SCAN_DELAY_2;
                if (((PORTD >> 5 )& 0x3F) != 0x3F)
                {
                    *step = KEYBOARD_SCAN_DELAY_2;  //Go to the next step for acceleration.
                }
                else
                {
                    *step = KEYBOARD_SCAN_START;
                }
            }
            else                         //If the value in buffer is not as same as the keyboard.
            {
                *key_value = NON_KEY;
                *step = KEYBOARD_SCAN_START;
                *buffer = 0x00;
                *counter = 0;                 //Clear the value and Go to start step at the next scan.
            }
            break;
        case KEYBOARD_SCAN_DELAY_2 :       //Delay for acceleration of some keys.
            if (*counter >= 10)
            {
                if ((((PORTD >> 5) & 0x3F) == 0x3B) ||
                    (((PORTD >> 5) & 0x3F) == 0x37))
                {
                    *counter = 0;
                    *step = KEYBOARD_SCAN_SPDUP_1;   //Spdup1 for LEFT_KEY & RIGHT_KEY.
                }
                else
                {
                    *counter = 0;
                    *step = KEYBOARD_SCAN_SPDUP_2;  //Spdup2 for other keys.
                }
            }
            else                  //Delay is not over, continue counting to next scan.
            {
                (*counter)++;
                *step = KEYBOARD_SCAN_DELAY_2;
                *key_value = NON_KEY;
            }
            break;
        case KEYBOARD_SCAN_SPDUP_1 :
            if (*buffer == ((PORTD >> 5) & 0x3F))
            {
                if(*counter >= 20)
                {
                    switch (*buffer)
                    {
                        case 0x37 : *key_value = LEFT_KEY;   break;
                        case 0x3B : *key_value = RIGHT_KEY;  break;
                        default   : *key_value = NON_KEY;    break;
                    }
                    *counter -= 5;  //Control the ration of acceleration for LEFT_KEY & RIGHT_KEY.
                }
                else
                {
                    (*counter)++;
                    *key_value = NON_KEY;
                    *step = KEYBOARD_SCAN_SPDUP_1;
                }
            }
            else
            {
                *key_value = NON_KEY;
                *step = KEYBOARD_SCAN_START;
                *counter = 0;
                *buffer = 0x00;
            }
            break;
        case KEYBOARD_SCAN_SPDUP_2 :
            if (*buffer == ((PORTD >> 5) & 0x3F))
            {
                if(*counter >= 20)
                {
                     switch (*buffer)
                     {
                         case 0x1F : *key_value = UP_KEY;    break;
                         case 0x2F : *key_value = DOWN_KEY;  break;
                         default   : *key_value = NON_KEY;   break;
                     }
                     *counter -= 20;  //Control the ration of acceleration for UP_KEY & DOWN_KEY.
                }
                else
                {
                     (*counter)++;
                     *key_value = NON_KEY;
                     *step = KEYBOARD_SCAN_SPDUP_2;
                }
            }
            else
            {
                *key_value = NON_KEY;
                *step = KEYBOARD_SCAN_START;
                *counter = 0;
                *buffer = 0x00;
            }
            break;
        default : break;
    }
}
//*************************************************************************************
//Func. Name:        Key_Teart Func.
//Input variables:   unsigned char key_value  -- The result of scan,
//                                  may be one of the following value:
//                                  "NON_KEY, LEFT_KEY, RIGHT_KEY, UP_KEY,
//                                   DOWN_KEY, ENTER_KEY, MENU_KEY"
//Output variables:  None
//Use sub-func.list: Flash.c - void Flash_Write(void);  -- Write data into FLASH memory.
//                   Assistant.c - unsigned char Array_Ptr(void);
//                      -- Calculate the array subscript of data, as the following:
//                          "Control_Parameter[], Channel_Parameter[][],
//                           System_Parameter[], System_Parameter_Asic[]"
//                   Assistant.c - void Study_Self(unsigned channel);
//                      -- Record the referrence value of hydrulic pressure by some format.
//                         ref. value = P1 * 1.434 - P2;
//                   Assistant.c - void LCD_Arrow_Position(unsigned char arrow_min,
//                                                         unsigned char arrow_max);
//                      --Computing
//Used by list:      MainFunc.c - void main(void);
//Description:       Scan the keyboard and return a reslut of the scan.If one key
//                is pressed, it will return logic 0; otherwise return logic 1.
//************************************************************************************
void Key_Treat(unsigned char key_value)
{
    unsigned char data_ptr;
    
    if (key_value == ENTER_KEY)
    {
        switch (Interface)
        {
            case MAIN_VIEW : Interface = ENTER_ASK_VIEW;
                             LCD_Clear();
                             break;
            case ENTER_ASK_VIEW : EEPROM_Write();
                                  Interface = ENTER_ANS_VIEW;
                                  LCD_Clear();
                                  break;
            case ENTER_ANS_VIEW : Interface = MAIN_VIEW;
                                  LCD_Clear();
                                  break;
            case MENU_VIEW : switch (Arrow_Position)
                             {
                                 case 0 : Interface = CONTROL_SET_VIEW;
                                          Arrow_Position = 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡影院免费观看| 美女视频黄久久| 99久久er热在这里只有精品15| 久久美女高清视频| 丁香桃色午夜亚洲一区二区三区| 亚洲国产精品传媒在线观看| 国产成+人+日韩+欧美+亚洲| 国产精品丝袜一区| 一本到不卡精品视频在线观看| 洋洋av久久久久久久一区| 制服丝袜亚洲网站| 国产激情精品久久久第一区二区 | 欧美三级日韩三级| 日韩**一区毛片| 久久久亚洲欧洲日产国码αv| 成人h动漫精品一区二区| 亚洲欧美怡红院| 欧美日韩在线综合| 久久九九影视网| 欧美视频中文字幕| 一区二区三区不卡视频| 欧美色网站导航| 日韩av一区二| 国产欧美综合在线观看第十页| av网站免费线看精品| 一级中文字幕一区二区| 91麻豆精品国产91久久久 | 91老师国产黑色丝袜在线| 亚洲欧美一区二区三区久本道91| 欧美探花视频资源| 一二三四社区欧美黄| 日韩精品自拍偷拍| 成人av网址在线| 亚洲一区二区三区激情| 日韩西西人体444www| 国产激情视频一区二区三区欧美 | 欧美精品一区二区三区蜜桃 | 久久综合丝袜日本网| 粉嫩高潮美女一区二区三区| 亚洲另类中文字| 日韩一卡二卡三卡| 不卡的av中国片| 日本午夜一区二区| 中文字幕免费不卡| 在线免费视频一区二区| 蜜桃久久精品一区二区| 国产精品网站在线播放| 欧美日本一区二区| 国产高清亚洲一区| 午夜影院久久久| 日韩网站在线看片你懂的| 91热门视频在线观看| 久久精品av麻豆的观看方式| 国产精品免费丝袜| 日韩一级大片在线观看| 色婷婷久久久久swag精品| 国内精品伊人久久久久影院对白| 亚洲欧美另类久久久精品| 久久综合久久99| 欧美精选一区二区| 欧美性生活影院| 国产乱子伦视频一区二区三区| 国产精品你懂的在线欣赏| 制服丝袜av成人在线看| 国产精品一区二区免费不卡 | 日韩欧美国产综合在线一区二区三区| heyzo一本久久综合| 蜜桃av一区二区三区| 亚洲成人一区二区| 亚洲丝袜美腿综合| 国产亚洲欧美日韩日本| 日韩精品一区二区三区视频播放 | 欧美精品一区二区三区高清aⅴ | 蓝色福利精品导航| 午夜私人影院久久久久| 国产精品久久久久久久久动漫| 欧美电影免费观看高清完整版在线 | 国产精品天美传媒| 久久婷婷国产综合精品青草| 欧美日韩另类国产亚洲欧美一级| 91麻豆国产精品久久| 不卡区在线中文字幕| 粉嫩蜜臀av国产精品网站| 极品瑜伽女神91| 免费成人在线播放| 日本不卡一区二区三区 | 久久久国产精华| 欧美α欧美αv大片| 日韩一区二区不卡| 91精品国产一区二区人妖| 欧美浪妇xxxx高跟鞋交| 精品视频一区三区九区| 在线观看欧美日本| 欧美日韩一区不卡| 99久久亚洲一区二区三区青草 | 精品国产自在久精品国产| 欧美一区二区三区四区高清 | 制服丝袜成人动漫| 91精品国产一区二区三区蜜臀| 91麻豆精品国产综合久久久久久 | 精品亚洲成a人在线观看| 美女在线视频一区| 精品在线免费视频| 国产精品一区二区在线看| 丰满少妇久久久久久久| 成人免费看黄yyy456| 不卡在线视频中文字幕| 色狠狠av一区二区三区| 欧美综合一区二区三区| 7777精品伊人久久久大香线蕉 | 欧美日韩在线综合| 欧美一区二区在线播放| 精品1区2区在线观看| 欧美国产欧美综合| 一区二区三区四区乱视频| 日本亚洲最大的色成网站www| 九九九久久久精品| 成人免费电影视频| 在线观看日韩电影| 欧美成人高清电影在线| 国产精品视频在线看| 一区二区久久久久久| 美女高潮久久久| 丰满白嫩尤物一区二区| 欧美中文字幕不卡| 91麻豆精品国产91久久久使用方法 | 久久精品国产**网站演员| www.亚洲在线| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲一区二区3| 久久99精品久久久久久国产越南 | 亚洲一区日韩精品中文字幕| 亚洲制服丝袜av| 免费在线一区观看| 高清不卡一二三区| 欧美视频在线播放| 久久久蜜桃精品| 中文字幕一区二区三区乱码在线| 亚洲va欧美va天堂v国产综合| 午夜久久久久久久久| 懂色av中文一区二区三区| 欧美日韩久久久久久| 中文成人av在线| 亚洲国产乱码最新视频| 精品一区二区三区av| 色综合天天综合在线视频| 日韩精品一区二区三区蜜臀| 亚洲精品欧美激情| 蜜臀av国产精品久久久久| 成人av在线影院| 精品噜噜噜噜久久久久久久久试看 | 亚洲丝袜另类动漫二区| 日韩二区三区在线观看| 高清不卡一区二区| 欧美一区二视频| 亚洲男人天堂一区| 国产成人亚洲精品狼色在线| 欧美一区二区在线免费播放| 中文字幕日本不卡| 精品一二三四区| 在线看不卡av| 自拍av一区二区三区| 高清成人在线观看| 久久久久久久久久美女| 免费成人小视频| 91精品欧美久久久久久动漫 | 国产精品视频在线看| 激情av综合网| 欧美电影免费观看完整版| 丝袜a∨在线一区二区三区不卡| 色婷婷精品久久二区二区蜜臂av| 国产清纯美女被跳蛋高潮一区二区久久w | 国产欧美1区2区3区| 久草这里只有精品视频| 欧美疯狂性受xxxxx喷水图片| 亚洲精品福利视频网站| av在线不卡免费看| 国产欧美一区二区三区在线老狼 | 日本一区二区三区四区在线视频| 激情另类小说区图片区视频区| 日韩一区二区在线观看视频| 亚洲一区二区在线视频| 91亚洲永久精品| 亚洲青青青在线视频| 91成人在线观看喷潮| 这里只有精品电影| 免费在线观看日韩欧美| 欧美精品一区二区三区在线播放| 九九精品视频在线看| 国产午夜久久久久| 色婷婷亚洲综合| 青椒成人免费视频| 中文字幕不卡在线观看| 日本精品一级二级| 蜜桃av噜噜一区| 国产精品久久久久久久久晋中 | 7777精品伊人久久久大香线蕉超级流畅 | 久久久国产精品不卡| 99视频国产精品| 日韩国产欧美在线播放|