⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minikeyb.c

📁 单手PC键盘(at90s8515)
💻 C
字号:
// miniKeyb.c

#define __AVRCODE__
#include "types.h"

#include <io.h>
#include "uart.h"
#include "delay.h"
#include "keyb.h"
#include "ps2proto.h"
#include <interrupt.h>
#include <signal.h>

volatile u08  Timer, TimerType, TimerSave, TimerTypeSave;

void TMR0_Init( void );


int main( void )
{
    u08 data;

    UART_Init();
    TMR0_Init();
    KEYB_Init();
    PS2_Init();

    for (;;)
    {
//        data = UART_PeekByte();
//        if (data)
//            PS2_SendScan(data);

        if (KEYB_DebounceKeyboard())    // true if debounced
        {
            KEYB_ProcessControlKeys_Immediate();
            if ((data=KEYB_GetKeyToSend()))
            {
                KEYB_ProcessControlKeys_SaveLock( TRUE );
                PS2_SendScan( data );
                KEYB_ProcessControlKeys_SaveLock( FALSE );
            }
        }
        PS2_Proto();
    }
}


#define TMR0_CK_STOP	0x0
#define TMR0_CK_1	0x1
#define TMR0_CK_8	0x2
#define TMR0_CK_64	0x3
#define TMR0_CK_256     0x4
#define TMR0_CK_1024	0x5
#define TMR0_CK_EXT_FE	0x6
#define TMR0_CK_EXT_RE	0x7

void TMR0_Init( void )
{
  register u08 tmp;

  Timer=0;
  outp(0x00, TCNT0);		// clear counter of timer0
  outp(TMR0_CK_64, TCCR0);	// 64 prescale
  tmp = inp(TIMSK);		// get timer interrupt mask
  outp(tmp|BV(TOIE0), TIMSK);	// timer0 enable
}

// this routine runs every clock/(256*64)=7.3728M/16384=450Hz.
SIGNAL(SIG_OVERFLOW0)
{
  if (Timer)
    Timer--;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -