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

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

?? 新建 文本文檔 .c.txt

?? 104鍵PS2接口標準鍵盤程序(C語言),通過測試可以!程序簡單易懂。基于ICCAVR編譯器
?? TXT
字號:
AVR單片機PC鍵盤程序
kb.c

/*****************************
** low level kexboard routines                VERSION 1.0
******************************/
#include "kb.h"
#include "scancodes.h"

#define BUFF_SIZE 64

unsigned char edge, bitcount;                // 0 = neg.  1 = pos.

unsigned char kb_buffer[BUFF_SIZE];
unsigned char *inpt, *outpt;
unsigned char buffcnt;


void InitKeyBoard(void)
{
    inpt =  kb_buffer;                        // Initialize buffer
    outpt = kb_buffer;
    buffcnt = 0;

    MCUCR = 2;                                // INT0 interrupt on falling edge
    edge = 0;                                // 0 = falling edge  1 = rising edge
    bitcount = 11;               
    #asm("sei")                              // interrupt enable
}

interrupt [EXT_INT0] void INT0_interrupt(void)
{
    static unsigned char data;                // Holds the received scan code

        if(bitcount < 11 && bitcount > 2)    // Bit 3 to 10 is data. Parity bit,
        {                                    // start and stop bits are ignored.
            data = (data >> 1);
            if(PIND & 8)
                data = data | 0x80;            // Store a '1'
        }

        if(--bitcount == 0)                    // All bits received
        {
            decode(data);
            bitcount = 11;
        }
 }


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)                    // If shift not pressed,
                {                            // do a table look-up
                    for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);
                    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++);
                    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
           // clr();
            break;  
            
        } 
    }    
} 

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;
    }
}

int getchar_kb(void)
{
    int 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;
}

void print_hexbyte(unsigned char i)
{
    unsigned char h, l;
    
    h = i & 0xF0;               // High nibble
    h = h>>4;
    h = h + '0';
    
    if (h > '9')
        h = h + 7;

    l = (i & 0x0F)+'0';         // Low nibble
    if (l > '9')
        l = l + 7;

    put_kbbuff(h);
    put_kbbuff(l);
}

kb.h// Keyboard communication routines

#ifndef __KB_INCLUDED
#define __KB_INCLUDED

#include <90s4434.h>

#define CLOCK   2
#define DATAPIN 3

#define ISC00 0
#define ISC01 1

void InitKeyBoard(void);
interrupt [EXT_INT0] void INT0_interrupt(void);
void decode(unsigned char sc);
void put_kbbuff(unsigned char c);
int getchar_kb(void);  
void print_hexbyte(unsigned char i);
#endif

 

 

scannodes.h

 

// Unshifted characters
flash unsigned char unshifted[68][2] = {
0x0d,9,
0x0e,'|',
0x15,'q',
0x16,'1',
0x1a,'z',
0x1b,'s',
0x1c,'a',
0x1d,'w',
0x1e,'2',
0x21,'c',
0x22,'x',
0x23,'d',
0x24,'e',
0x25,'4',
0x26,'3',
0x29,' ',
0x2a,'v',
0x2b,'f',
0x2c,'t',
0x2d,'r',
0x2e,'5',
0x31,'n',
0x32,'b',
0x33,'h',
0x34,'g',
0x35,'y',
0x36,'6',
0x39,',',
0x3a,'m',
0x3b,'j',
0x3c,'u',
0x3d,'7',
0x3e,'8',
0x41,',',
0x42,'k',
0x43,'i',
0x44,'o',
0x45,'0',
0x46,'9',
0x49,'.',
0x4a,'-',
0x4b,'l',
0x4c,'?,
0x4d,'p',
0x4e,'+',
0x52,'?,
0x54,'?,
0x55,'\\',
0x5a,13, 
0x5b,'?,
0x5d,'\\',
0x61,'<',
0x66,8,
0x69,'1',
0x6b,'4',
0x6c,'7',
0x70,'0',
0x71,',',
0x72,'2',
0x73,'5',
0x74,'6',
0x75,'8',
0x79,'+',
0x7a,'3',
0x7b,'-',
0x7c,'*',
0x7d,'9',
0,0
};

// Shifted characters
flash unsigned char shifted[68][2] = {
0x0d,9,
0x0e,'?,
0x15,'Q',
0x16,'!',
0x1a,'Z',
0x1b,'S',
0x1c,'A',
0x1d,'W',
0x1e,'"',
0x21,'C',
0x22,'X',
0x23,'D',
0x24,'E',
0x25,'?,
0x26,'#',
0x29,' ',
0x2a,'V',
0x2b,'F',
0x2c,'T',
0x2d,'R',
0x2e,'%',
0x31,'N',
0x32,'B',
0x33,'H',
0x34,'G',
0x35,'Y',
0x36,'&',
0x39,'L',
0x3a,'M',
0x3b,'J',
0x3c,'U',
0x3d,'/',
0x3e,'(',
0x41,';',
0x42,'K',
0x43,'I',
0x44,'O',
0x45,'=',
0x46,')',
0x49,':',
0x4a,'_',
0x4b,'L',
0x4c,'?,
0x4d,'P',
0x4e,'?',
0x52,'?,
0x54,'?,
0x55,'`',
0x5a,13, 
0x5b,'^',
0x5d,'*',
0x61,'>',
0x66,8,
0x69,'1',
0x6b,'4',
0x6c,'7',
0x70,'0',
0x71,',',
0x72,'2',
0x73,'5',
0x74,'6',
0x75,'8',
0x79,'+',
0x7a,'3',
0x7b,'-',
0x7c,'*',
0x7d,'9',
0,0
};


 

main.c

/********************************************
Chip type           : AT90S4434
Clock frequency     : 8,000000 MHz
Memory model        : Tiny
Internal SRAM size  : 256
External SRAM size  : 0
Data Stack size     : 64
*********************************************/

#include <90s4434.h>
#include "kb.h" 
#include <delay.h>   


// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15
#endasm
#include <lcd.h>

// Declare your global variables here

void main(void)
{

// Declare your local variables here
    unsigned char key;

// Input/Output Ports initialization
// Port A
PORTA=0x00;
DDRA=0x00;

// Port B
PORTB=0x00;
DDRB=0x00;

// Port C
PORTC=0x00;
DDRC=0x00;

// Port D
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Output Compare
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Output Compare
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Output Compare
// OC2 output: Disconnected
TCCR2=0x00;
ASSR=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Oon
// INT1: Off 
GIMSK= 0x40;        // Enable INT0 interrupt
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// LCD module initialization
//lcd_init(20);            // Init 20 Zeichendisplay
 lcd_init(16);         // Init 16 Zeichendisplay

 InitKeyBoard();               // Initialize keyboard reception
 
 while(1)
    {
        key = getchar_kb();
        lcd_putchar(key);
        delay_ms(5);   
      
    }

}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美女视频19| 亚洲在线免费播放| 一区二区三区 在线观看视频| 日本中文字幕一区二区视频| 国产成人av一区二区| 欧美电影一区二区| 一区二区中文字幕在线| 精东粉嫩av免费一区二区三区 | 中文字幕在线一区免费| 日韩国产在线观看一区| av在线不卡免费看| 久久先锋资源网| 日韩影院在线观看| 色欧美88888久久久久久影院| 国产亚洲美州欧州综合国| 天天av天天翘天天综合网| 99久久国产综合精品色伊| wwwwww.欧美系列| 日韩成人免费在线| 欧美日韩你懂得| 一区二区三区电影在线播| 99这里只有精品| 国产精品亲子乱子伦xxxx裸| 国产一区 二区| 精品免费一区二区三区| 美女视频黄免费的久久 | 亚洲欧美日韩国产中文在线| 国产成人av电影在线播放| 欧美精品一区二区三区在线| 日日摸夜夜添夜夜添精品视频| 欧美三级资源在线| 亚洲一区二区在线免费观看视频| 91蜜桃视频在线| 亚洲欧美日韩在线| 在线观看精品一区| 亚洲一区二区在线播放相泽| 在线观看欧美精品| 亚洲图片有声小说| 欧美另类z0zxhd电影| 亚洲123区在线观看| 欧美日韩aaa| 男人操女人的视频在线观看欧美| 欧美精品免费视频| 麻豆精品一区二区三区| 欧美xxxxx牲另类人与| 国产美女精品人人做人人爽| 久久综合九色综合欧美98| 国精产品一区一区三区mba视频| 精品日韩一区二区三区| 国产经典欧美精品| 亚洲视频一区在线| 欧美性xxxxxxxx| 青草av.久久免费一区| 久久久一区二区| 99精品热视频| 亚洲风情在线资源站| 欧美一区二区国产| 成人午夜在线播放| 亚洲一区中文日韩| 精品日韩av一区二区| 成人听书哪个软件好| 一区二区三区加勒比av| 日韩一区二区电影在线| 成人黄色软件下载| 午夜激情一区二区| 国产亚洲精品福利| 欧美三区免费完整视频在线观看| 美女国产一区二区三区| 中文字幕色av一区二区三区| 欧美日产国产精品| 丁香婷婷综合色啪| 亚洲成人777| 国产精品美女久久久久久久久 | 亚洲国产裸拍裸体视频在线观看乱了| 日韩一区二区三区在线视频| 国产精品白丝jk黑袜喷水| 一区二区三国产精华液| 久久久久国产精品厨房| 欧美日韩国产精品自在自线| 国产suv精品一区二区三区| 亚洲成人在线网站| 国产精品久久久久久久久免费丝袜 | 日韩国产高清在线| 国产精品久久99| 日韩写真欧美这视频| 91视视频在线观看入口直接观看www | 欧美视频一区在线| 成人综合婷婷国产精品久久| 日韩精品一区第一页| 国产精品国产三级国产普通话蜜臀| 91精品国产色综合久久久蜜香臀| 99精品欧美一区| 国产一区二区三区国产| 婷婷一区二区三区| 亚洲精品乱码久久久久久久久| 久久免费美女视频| 欧美一区二区三区精品| 欧美午夜寂寞影院| 91麻豆文化传媒在线观看| 国产一区二区调教| 蜜桃精品视频在线观看| 婷婷激情综合网| 亚洲一二三区不卡| 一区二区三区美女视频| 一区二区中文视频| 1000部国产精品成人观看| 国产人妖乱国产精品人妖| 亚洲精品在线一区二区| 日韩亚洲欧美在线| 日韩欧美一卡二卡| 日韩欧美国产综合一区| 3atv在线一区二区三区| 欧美福利一区二区| 欧美电影在哪看比较好| 欧美一区二区三区免费大片| 欧美一卡2卡三卡4卡5免费| 91精品国产综合久久久久久漫画 | 99久久精品国产一区| 国产精品69毛片高清亚洲| 国产一区二区在线看| 国产在线国偷精品免费看| 精品亚洲aⅴ乱码一区二区三区| 久久99久久久久| 极品少妇一区二区| 国产精品一二二区| 成人黄色小视频| 色婷婷av一区二区三区之一色屋| 91美女福利视频| 欧美日韩国产小视频| 欧美一区二区三区在线| 亚洲精品在线观看网站| 久久久99精品久久| 中文字幕在线观看一区二区| 一区二区三区日韩精品| 天天综合天天综合色| 韩国精品免费视频| 懂色av一区二区夜夜嗨| 在线一区二区视频| 欧美一区二区三区人| 中文子幕无线码一区tr| 一区二区三区四区乱视频| 午夜成人免费电影| 国产麻豆日韩欧美久久| 99视频精品免费视频| 在线不卡中文字幕| 久久精品视频在线看| 夜夜爽夜夜爽精品视频| 成人黄色小视频| 在线免费视频一区二区| 欧美成人精精品一区二区频| 国产精品色哟哟| 视频一区二区三区在线| 国产精品18久久久久久vr| 欧洲一区二区三区免费视频| 欧美大片日本大片免费观看| 专区另类欧美日韩| 久久国产婷婷国产香蕉| 91视频观看免费| 欧美成人在线直播| 亚洲精品伦理在线| 激情图区综合网| 欧美日韩国产123区| 国产欧美视频一区二区| 日韩不卡手机在线v区| 成人福利视频网站| 精品美女被调教视频大全网站| 亚洲青青青在线视频| 狠狠色丁香婷婷综合久久片| 欧美午夜电影网| 欧美极品美女视频| 男女男精品视频| 在线观看91视频| 亚洲欧美综合在线精品| 国产在线精品一区二区| 欧美一区三区四区| 玉米视频成人免费看| jlzzjlzz欧美大全| 久久嫩草精品久久久精品一| 蜜桃av一区二区三区| 欧美在线三级电影| 日韩毛片在线免费观看| 国产馆精品极品| 精品国产乱码久久久久久久| 天堂资源在线中文精品| 欧美色图激情小说| 亚洲乱码一区二区三区在线观看| 成人精品国产一区二区4080| 久久午夜电影网| 国产在线精品一区二区不卡了| 日韩一二在线观看| 日本欧美肥老太交大片| 欧美日韩一级二级| 亚洲第一主播视频| 91久久精品一区二区| 一二三区精品福利视频| 欧美伊人精品成人久久综合97| 一区二区三区四区中文字幕| 日本精品裸体写真集在线观看| 亚洲天堂网中文字| 91毛片在线观看|