?? main.c
字號:
//******************************************************
//Beijing Winsilicon Technology LT.CO,
//File Name: main.c
//Description: Keyboard Test
//Author: JuGuang,Lee
//Date:
//******************************************************
#include "s3c4510b_add.h"
void delay(unsigned int x);
void InitUART(int Port,int Baudrate);
void PrintUART0(char *s);
int key_scan(void);
int C_Entry()
{
int i=0;
//P0~P3:switch,I,P4~P7:LED,O,P8~P11:ROW,O,P12~P15:COL,I
IOPMOD=0x0FF0;
InitUART(0,0x500);
PrintUART0("\r\n\r\nPress any key to test...\r\n\r\n");
while(1)
{
i=key_scan();
}
}
//*********************************************************
//函數名: PrintUART0();
//描述: 向UART0發送一個字符串;
//參數: 要發送的字符串;
//返回值: 無
//*********************************************************
void PrintUART0(char *s)
{
for(;*s!='\0';s++)
{
while(!(USTAT0&0x40));
UTXBUF0=*s;
}
}
//*********************************************************
//函數名: InitUART();
//描述: 初始化指定的串行口;
//參數: 串行口號;數據通信協議;
//返回值: 無
//*********************************************************
void InitUART(int Port,int Baudrate)
{
if(Port==0)
{ULCON0=0x03;
UCON0=0x09;
UBRDIV0=Baudrate;
}
if(Port==1)
{ULCON1=0x03;
UCON1=0x09;
UBRDIV1=Baudrate;
}
}
//*********************************************************
//函數名: delay(();
//描述: 軟件延時;
//參數: 延時時間;
//返回值: 無
//*********************************************************
void delay(unsigned int x)
{
unsigned int i,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xa0;j++)
for(k=0;k<0xff;k++);
}
//*********************************************************
//函數名: key_scan();
//描述: 鍵盤掃描;
//參數: 無
//返回值: 無
//*********************************************************
int key_scan()
{
static unsigned int step=0,ROW=0,COL=0,i=0,KEY_CODE,KEY_CODE1;
unsigned char LED;
switch(step)
{
case 0:
KEY_CODE=0;KEY_CODE1=0;
LED=IOPDATA&0x3F0FF;//P8~P11=0;
IOPDATA=LED;
LED=(IOPDATA&0xF000)>>8;
if(LED!=0xf0)
{
step++; //有鍵按下,取行號
LED=(~LED)&0xf0;
for(i=1;i<5;i++)
{
LED=LED<<1;
if(LED==0)
{
ROW=i<<4;
break;
}
}
}
break;
case 1:
for(i=0;i<4;i++)
{
IOPDATA=0x01<<(8+i);
LED=(IOPDATA&0xF000)>>8;
if(LED==0xf0) //鍵釋放或找到被按下的鍵的列值
{
step++;
COL=i+0x0a;
KEY_CODE=ROW|COL;
break;
}
}
if(i==4)
step=0;
break;
case 2:
delay(1);
step++;
break;
case 3:
LED=IOPDATA&0x3F0FF;//P8~P11=0;
IOPDATA=LED;
LED=(IOPDATA&0xF000)>>8;
if(LED!=0xf0)
{
step++; //有鍵按下,取行號
LED=(~LED)&0xf0;
for(i=1;i<5;i++)
{
LED=LED<<1;
if(LED==0)
{
ROW=i<<4;
break;
}
}
}
else
step=0;
break;
case 4:
for(i=0;i<4;i++)
{
IOPDATA=0x01<<(8+i);
LED=(IOPDATA&0xF000)>>8;
if(LED==0xf0) //鍵釋放或找到被按下的鍵的列值
{
step++;
COL=i+0x0a;
KEY_CODE1=ROW|COL;
break;
}
}
if(i==4)
step=0;
break;
case 5:
if(KEY_CODE==KEY_CODE1) //鍵確認
step++;
else
step=0;
break;
case 6:
IOPDATA=IOPDATA&0x3F0FF;
LED=(IOPDATA&0xF000)>>8;
if(LED==0xf0)
step++;
break;
case 7:
switch(KEY_CODE)
{
case 0x1a:
PrintUART0("KEY_CODE=0x01\n\r");
break;
case 0x1b:
PrintUART0("KEY_CODE=0x02\n\r");
break;
case 0x1c:
PrintUART0("KEY_CODE=0x03\n\r");
break;
case 0x1d:
PrintUART0("KEY_CODE=0xF1\n\r");
break;
case 0x2a:
PrintUART0("KEY_CODE=0x04\n\r");
break;
case 0x2b:
PrintUART0("KEY_CODE=0x05\n\r");
break;
case 0x2c:
PrintUART0("KEY_CODE=0x06\n\r");
break;
case 0x2d:
PrintUART0("KEY_CODE=0xF2\n\r");
break;
case 0x3a:
PrintUART0("KEY_CODE=0x07\n\r");
break;
case 0x3b:
PrintUART0("KEY_CODE=0x08\n\r");
break;
case 0x3c:
PrintUART0("KEY_CODE=0x09\n\r");
break;
case 0x3d:
PrintUART0("KEY_CODE=0xF3\n\r");
break;
case 0x4a:
PrintUART0("KEY_CODE=確認\n\r");
break;
case 0x4b:
PrintUART0("KEY_CODE=0x00\n\r");
break;
case 0x4c:
PrintUART0("KEY_CODE=取消\n\r");
break;
case 0x4d:
PrintUART0("KEY_CODE=0xF4\n\r");
break;
}
step=0;
break;
}
return 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -