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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kb.c

?? WINAVR編寫的PS2鍵盤驅動
?? C
字號:
/*---------------------------------------------------------
 *Filename:kb.c
 *Function:PS2鍵盤程序,忽略起始位、奇偶校驗位、停止位
 *Author:ken
 *Date:2007-8-18
----------------------------------------------------------*/
#include "kb.h"
#include "scancodes.h"
#include <avr/io.h>
#include <avr/interrupt.h>

#define BUFF_SIZE 64
#define PSDAT PD6
#define PSCLK PD2

unsigned char edge, bitcount;               //edge表示是下降沿讀取,還是上升沿讀取;bitcount是一幀的位數

unsigned char kb_buffer[BUFF_SIZE];
unsigned char *inpt, *outpt;
unsigned char buffcnt;                      //用于記錄當前的緩沖區讀或寫的位置



/*-----------------------------------------------------------
InitKeyBoard :鍵盤程序初始化函數
輸入參數     :無
輸出參數     :無
作者         :ken
日期         :2007-8-18
------------------------------------------------------------*/ 
void InitKeyBoard(void)
{
    inpt =  kb_buffer;                        // 初始化鍵盤緩沖區
    outpt = kb_buffer;
    buffcnt = 0;

    MCUCR = (1<<ISC01);                      // INT0下降沿有效
    edge = 0;                                // 0 = 下降沿  1 = 上升沿
    bitcount = 11;                           // PS2傳輸一幀數據是11位,一個起始位,一個奇偶校驗位,一個停止位。
    sei();                                   // 開全局中斷
}


/*-----------------------------------------------------------
INT0_interrupt:處理鍵盤中斷服務程序
輸入參數      :無
輸出參數      :無
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
SIGNAL(SIG_INTERRUPT0)                           //PSCLK與PD2即INT0連接,下降沿讀取PSDAT的數據
{
    static unsigned char data;                 // data用來保存接收到的數據。

        if(bitcount < 11 && bitcount > 2)       // 3-10位是數據位. 忽略起始位,校驗位,停止位
        {                                      
            data = (data >> 1);                 //因為PS2協議是低位在前的,所以要右移
            if(PIND & (1<<PSDAT))              
                data = data | 0x80;             
        }

        if(--bitcount == 0)                    // 11位數據都接收完,進入解碼程序
        {
            decode(data);
            bitcount = 11;
        }
 }

/*-----------------------------------------------------------
decode        :解碼鍵碼程序
輸入參數 sc   :8bit原始代碼數據
輸出參數      :無
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
void decode(unsigned char sc)
{
    static unsigned char is_up=0, shift = 0, mode = 0;
    unsigned char i;
 
    if (!is_up)              // Last data received was the up-key identifier
    {
        switch (sc)
        {
          case 0xF0 :        // The up-key identifier
            is_up = 1;
            break;

          case 0x12 :        // Left SHIFT
            shift = 1;
            break;

          case 0x59 :        // Right SHIFT
            shift = 1;
            break;

          case 0x05 :        // F1
            if(mode == 0)
                mode = 1;    // Enter scan code mode
            if(mode == 2)
                mode = 3;    // Leave scan code mode
            break;

          default:
            if(mode == 0 || mode == 3)        // If ASCII mode
            {
                if(!shift)                    //  識別有沒有按下shift鍵
                {                            // for語句又于尋找鍵盤碼
                    for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);//輸出沒按shift鍵的碼
                    if (unshifted[i][0] == sc) {
                        put_kbbuff(unshifted[i][1]);
                    }
                } else {                    // If shift pressed
                    for(i = 0; shifted[i][0]!=sc && shifted[i][0]; i++);//輸出按下shift鍵的碼
                    if (shifted[i][0] == sc) {
                        put_kbbuff(shifted[i][1]);
                    }
                }
            } 
			else{                                   // Scan code mode
                print_hexbyte(sc);            // Print scan code
                put_kbbuff(' ');

            }
            break;
        }
    } else {
        is_up = 0;                            // Two 0xF0 in a row not allowed
        switch (sc)
        {
          case 0x12 :                        // Left SHIFT
            shift = 0;
            break;
            
          case 0x59 :                        // Right SHIFT
            shift = 0;
            break;

          case 0x05 :                        // F1
            if(mode == 1)
                mode = 2;
            if(mode == 3)
                mode = 0;
            break;
          case 0x06 :                        // F2
            break;  
            
        } 
    }    
} 


/*-----------------------------------------------------------
put_kbbuff    :鍵碼保存到緩沖區
輸入參數 c    :經解碼所得鍵碼數據
輸出參數      :無
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
void put_kbbuff(unsigned char c)
{
    if (buffcnt<BUFF_SIZE)                        // If buffer not full
    {
        *inpt = c;                                // Put character into buffer
        inpt++;                                    // Increment pointer

        buffcnt++;

        if (inpt >= kb_buffer + BUFF_SIZE)        // Pointer wrapping
            inpt = kb_buffer;
    }
}


/*-----------------------------------------------------------
getchar_kb    :鍵碼接收程序
輸入參數      :無
輸出參數      :鍵碼
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
unsigned char getchar_kb(void)
{
    unsigned char byte;
    while(buffcnt == 0);                           // Wait for data

    byte = *outpt;                                 // Get byte
    outpt++;                                       // Increment pointer

    if (outpt >= kb_buffer + BUFF_SIZE)            // Pointer wrapping
        outpt = kb_buffer;
    
    buffcnt--;                                     // Decrement buffer count

    return byte;
}

/*-----------------------------------------------------------
print_hexbyte :直接保存原始8bit代碼到緩沖區,不經解碼
輸入參數 i    :原始8bit代碼
輸出參數      :無
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
void print_hexbyte(unsigned char i)
{
    unsigned char h, l;
    
    h = i & 0xF0;               // 高4位
    h = h>>4;
    h = h + '0';
    
    if (h > '9')
        h = h + 7;

    l = (i & 0x0F)+'0';         // 低4位
    if (l > '9')
        l = l + 7;

    put_kbbuff(h);
    put_kbbuff(l);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av网站| 国产校园另类小说区| 国产成人精品网址| 亚洲黄色性网站| 国产欧美日韩视频一区二区| 日韩美一区二区三区| 欧美一区二区三区视频免费| 欧美日韩和欧美的一区二区| 91啪九色porn原创视频在线观看| 欧美日韩成人综合| 久久国产精品第一页| 国产精品网曝门| 亚洲欧美日韩国产中文在线| 国产精品水嫩水嫩| 欧美精品丝袜中出| 91丝袜呻吟高潮美腿白嫩在线观看| 不卡一区二区在线| 在线观看国产91| 欧美mv和日韩mv国产网站| 国产精品高潮呻吟| 亚洲国产日韩精品| 国产白丝精品91爽爽久久| 欧美性生活久久| 中日韩av电影| 免费视频一区二区| 在线观看av一区二区| 久久精品男人天堂av| 亚洲成人激情自拍| 国产高清精品网站| 精品国产一区二区三区久久久蜜月 | 91免费国产视频网站| 91精品国产91久久久久久一区二区 | 色综合久久天天综合网| 久久精品视频一区二区三区| 一区二区三区中文字幕精品精品 | 欧美国产成人精品| 国内久久精品视频| 日韩欧美一级二级| 韩国av一区二区三区四区| 欧美精品 日韩| 毛片av一区二区三区| 欧美一区二区三区小说| 国产精品乱子久久久久| 精久久久久久久久久久| 精品国产123| 成人毛片在线观看| 亚洲激情在线播放| 欧美日韩午夜在线| 老司机免费视频一区二区| 欧美日韩一区在线观看| 亚洲一区二区三区中文字幕| 成人久久18免费网站麻豆| 国产精品卡一卡二卡三| www.日韩av| 一个色综合网站| 精品国产一区二区三区忘忧草 | 一本在线高清不卡dvd| 日本韩国欧美一区| 欧美激情一区在线观看| 99re热这里只有精品视频| 日韩码欧中文字| 9191成人精品久久| 国产麻豆精品theporn| 波多野结衣中文字幕一区二区三区 | 国产最新精品免费| 国产精品每日更新| 欧美日本乱大交xxxxx| 精品一区二区成人精品| 亚洲精品国产高清久久伦理二区| 欧美日韩一级二级| av电影在线观看不卡| 天天综合日日夜夜精品| 2023国产精品视频| 欧美在线一区二区三区| 99vv1com这只有精品| av在线一区二区三区| 成人黄色国产精品网站大全在线免费观看 | 国产精品美女久久久久久久网站| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲成人一二三| 久久久久国产精品麻豆ai换脸| 91丨九色丨蝌蚪丨老版| 成人精品视频一区二区三区 | 91小视频免费观看| 韩国v欧美v日本v亚洲v| 亚洲一二三四在线| 久久久久久99久久久精品网站| 色激情天天射综合网| 99精品视频一区| 日本高清无吗v一区| 波多野结衣亚洲一区| 99视频有精品| 在线观看亚洲专区| 欧美日韩在线电影| 3atv一区二区三区| 欧美天天综合网| 国产色产综合产在线视频| 国产精品乱码一区二三区小蝌蚪| 欧美精品一区二区三区四区| 国产香蕉久久精品综合网| 亚洲国产精华液网站w| 国产精品久久久久aaaa| 一区二区三区在线视频播放| 亚洲乱码中文字幕综合| 免费人成精品欧美精品| 黄页视频在线91| 色婷婷综合久久久中文字幕| 欧美日韩国产综合视频在线观看| 国产成人在线电影| 日韩亚洲欧美高清| 亚洲影院久久精品| 国产精品久久久久久久久晋中| 国产精品护士白丝一区av| 偷拍日韩校园综合在线| 欧美日韩色一区| 精品亚洲国内自在自线福利| 麻豆极品一区二区三区| 一本大道av一区二区在线播放| 精品国产乱码久久久久久浪潮| 国产精品久久久久影院老司| 国内成+人亚洲+欧美+综合在线| 色综合视频一区二区三区高清| 日韩一级黄色片| 一区二区三区国产豹纹内裤在线| 91视视频在线观看入口直接观看www | 久久99精品久久久久久动态图 | 久久免费看少妇高潮| 亚洲电影在线播放| 在线看国产一区二区| 国产精品无码永久免费888| 国产乱码精品一区二区三区av| 欧美一级一区二区| 精品亚洲欧美一区| 欧美高清在线一区二区| 成人妖精视频yjsp地址| 久久综合资源网| 在线精品亚洲一区二区不卡| 一区二区三区在线观看视频| 91色乱码一区二区三区| 中文字幕一区av| 欧美日韩一区二区在线观看 | 最新国产精品久久精品| 国产精品一区二区三区四区| 亚洲女同一区二区| 欧美日韩国产美女| 国产精品一区二区久激情瑜伽| 一区二区日韩av| 欧美mv日韩mv| 色欧美乱欧美15图片| 国产 欧美在线| 免费三级欧美电影| 亚洲激情网站免费观看| 91首页免费视频| 欧美亚洲国产怡红院影院| 九色综合狠狠综合久久| 一区二区成人在线视频| 欧美国产精品v| 久久久精品tv| 精品剧情v国产在线观看在线| 欧美性猛片xxxx免费看久爱| 91福利在线看| 在线视频国内自拍亚洲视频| 懂色av中文一区二区三区| 日韩电影在线观看电影| 亚洲在线视频一区| 蜜臀国产一区二区三区在线播放| 日本成人中文字幕在线视频| 亚洲一区二区三区精品在线| 一区二区在线观看不卡| 欧美日韩高清一区二区| 欧美一二三在线| 国产精品天干天干在观线| 国产精品福利电影一区二区三区四区| 精品捆绑美女sm三区| 久久午夜电影网| 亚洲婷婷综合色高清在线| 亚洲国产综合91精品麻豆| 在线视频你懂得一区二区三区| 国产成人av自拍| 91精品1区2区| 欧美一区二区三区在线观看视频| 色天天综合色天天久久| 日韩一级片网址| 一区二区欧美视频| 国产一区二区影院| 欧美人体做爰大胆视频| 欧美喷水一区二区| 亚洲电影激情视频网站| 成人aaaa免费全部观看| 欧美老年两性高潮| 综合激情成人伊人| 毛片av中文字幕一区二区| 国产精品一区二区三区网站| 日韩精品影音先锋| 亚洲午夜三级在线| 97se亚洲国产综合自在线不卡| 久久久天堂av| 久久精品国产第一区二区三区| 国内精品久久久久影院薰衣草| 91精品婷婷国产综合久久竹菊|