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

📄 key.c~

📁 该设备是一款基于AVR mega16L单片机的电子书阅读器
💻 C~
字号:
/****************************************************************************** 
 * PC/AT keyboard driver. 
 * Based in part on Atmel's application note AVR313. www.atmel.com
******************************************************************************/
#include <mega16.h>
#include <key.h>
#include <scancodes.h> 
#include <delay.h>  
unsigned char flash huanying[]=
{
/*------------------------------------------------------------------------------
;  若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;  源文件 / 文字 : C:\Documents and Settings\a\桌面\ghjgh.bmp字模
;  宽×高(像素): 128×64
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/1024字节
;  数据转换日期  : 2008-5-21 2:12:21
------------------------------------------------------------------------------*/
0x80,0x40,0x10,//宽的像素数,高的像素数,宽的字节数,参数设置可选
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x18,0x40,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0E,0x00,0x3F,0xFF,0x80,0x18,0x70,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x00,0x3F,0xFF,0x80,0x18,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x0C,0x00,0x00,0x0F,0x00,0x18,0x38,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xFF,0xF0,0x00,0x1C,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x0C,0x30,0x00,0x70,0x00,0x18,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x03,0x0C,0x30,0x00,0x60,0x00,0x18,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x03,0x0C,0x30,0x00,0x60,0x80,0x18,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x03,0xFF,0xF0,0xFF,0xFF,0xE0,0x18,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x03,0x0C,0x30,0xFF,0xFF,0xEF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x03,0x0C,0x30,0x00,0x60,0x07,0xDF,0xFC,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x0B,0x0C,0x30,0x00,0x60,0x00,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x1B,0xFF,0xF0,0x00,0x60,0x00,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,
0x10,0x01,0x00,0x33,0x0C,0x3C,0x00,0x60,0x00,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,
0x08,0x01,0x00,0x63,0x0C,0x0C,0x00,0x60,0x00,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,
0x04,0x01,0x00,0xC0,0x0C,0x0C,0x00,0x60,0x00,0x18,0x78,0x00,0x00,0x00,0x00,0x00,
0x02,0x01,0xC1,0x80,0x0C,0x0C,0x07,0xE0,0x00,0x18,0x30,0x00,0x00,0x00,0x00,0x00,
0x01,0x1F,0xFB,0x00,0x0F,0xFE,0x03,0xE0,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xB8,0x1E,0x00,0x07,0xFC,0x00,0xC0,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xE0,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x80,0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x80,0x01,0x86,0x60,0x08,0x00,0x00,0x0C,0xC1,0xFE,0x00,0x00,0x00,0x00,0x00,
0x01,0x80,0x01,0x06,0xC0,0x08,0x40,0x00,0x7D,0xF1,0x02,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0x03,0x04,0xFE,0x7F,0xC0,0x00,0x11,0x51,0xFE,0x00,0x00,0x00,0x00,0x00,
0x00,0xE0,0x06,0x0D,0xC0,0x09,0x00,0x00,0x7D,0x51,0x02,0x00,0x00,0x00,0x00,0x00,
0x00,0xF0,0x0C,0x0D,0x40,0x0A,0x00,0x00,0x39,0xF1,0xFE,0x00,0x00,0x00,0x00,0x00,
0x01,0x1C,0x3C,0x1D,0x40,0xFF,0xF0,0x00,0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,
0x02,0x0F,0xF2,0x14,0x78,0x18,0x02,0x00,0x11,0xF1,0xFF,0x00,0x00,0x00,0x00,0x00,
0x04,0x01,0x01,0x04,0x40,0x3F,0x86,0x00,0x78,0xC0,0x10,0x00,0x00,0x00,0x00,0x00,
0x08,0x01,0x00,0x84,0x40,0x48,0x80,0x00,0x2C,0xEB,0xFF,0x80,0x00,0x00,0x00,0x00,
0x10,0x01,0x00,0x44,0x78,0x8F,0x82,0x00,0x25,0xF8,0x28,0x00,0x00,0x00,0x00,0x00,
0x20,0x01,0x00,0x24,0x41,0x08,0x86,0x00,0x1F,0x40,0xC4,0x00,0x00,0x00,0x00,0x00,
0x40,0x01,0x00,0x14,0x40,0x08,0x80,0x00,0x76,0x79,0x83,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x04,0x40,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xC1,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x01,0x02,0x10,0x0F,0x50,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x1D,0x73,0x90,0xE9,0x6E,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xD5,0x52,0x1E,0xAF,0x4A,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x55,0x52,0x10,0xA8,0x4A,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xDD,0x7A,0x1E,0xAF,0x4E,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/******************************************************************************
 * InitializeKeyboard()
 * Initializes the ports and control registers needed for running the keyboard.
******************************************************************************/
unsigned char edge;        /* 0 = neg.  1 = pos. */
unsigned char bitcount;
void InitializeKeyboard( void )
{   
   GICR =0x40;     /* enable INT0 interrupt */
   #asm("sei");                /* enable global intterupts */
   MCUCR =0x02;    /* trigger INT0 on falling edge */
   DDRD&=~0x0c; 
   PORTD|=0x0c;
    /* PD2, PD3 are inputs */	
   edge = 0;
   bitcount = 11;
   return;
}
/******************************************************************************
 * interrupt [EXT_INT0] void ext_int0_isr (void)
 * When the keyboard triggers the external interrupt this function is called
 * to retrieve the data.
******************************************************************************/
interrupt [EXT_INT0] void ext_int0_isr (void)
{
   static unsigned char    scancode = 0;
    if(!edge)                               // Routine entered at falling edge
    {
        if( ( bitcount < 11 ) && ( bitcount > 2 ) )    
        {
           // Bit 3 to 10 is data. Parity bit, start and stop bits are ignored.
            scancode = ( scancode >> 1 );
            if( PIND&0x08 )            //如果数据是1 PD3是键盘数据输入端,PO2是中断口
            {
                scancode = scancode | 0x80;  // Store a '1' for this bit
            }
        }
          MCUCR=0x03;                 // Set interrupt on rising edge
          edge = 1;        
    } 
    else                                     // Routine entered at rising edge
    {                                
        MCUCR =0x02;                 // Set interrupt on falling edge
        edge = 0;
        if(--bitcount == 0)                  // All bits received
        {
           bitcount = 11;
           key= Decode( scancode );
        }
    }
}
unsigned char Decode( unsigned char scancode )
{      
       int i = 0; 
       unsigned char temp = 0;
       static unsigned char   shift = 0;
       unsigned char key_value=0;
      if( ( scancode == 0x12 ) || ( scancode == 0x59 ) ) 
           {
              // left or right shift按住SHIFT键
              shift = 1;              
           }
           else                                             
           {
              // a key other than shift was pressed, do a table look-up      
              for( i = 0; i < 50; i++ )//查表,寻找对应键值
              {
	       temp = char_table[i*3];//PRG_RGB可能因为要用FLASH中数据要用此函数
          	                                                 //i*3应该是表中各键值对应初始地址,因为一块就要三个数据
               if ( temp == scancode ) 
                 {
                    if( shift )                              //如果按了SHIFT就取后面那个大些的字母
                    {
                       key_value = char_table[i*3+2];
                    }
                    else
                    {
		       key_value = char_table[i*3+1];
                    }
		    break;
                 }
              }		       
              shift = 0;             
           } 
         delay_ms(20);
         return  key_value;               
}


⌨️ 快捷键说明

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