欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
MSP430學(xué)習(xí) PS2鍵盤(pán)控制程序
[打印本頁(yè)]
作者:
英語(yǔ)
時(shí)間:
2016-11-23 19:37
標(biāo)題:
MSP430學(xué)習(xí) PS2鍵盤(pán)控制程序
PS2鍵盤(pán)控制
#include <msp430x14x.h>
#include "code.h"
typedef unsigned char uchar;
typedef unsigned int uint;
#define BufferSize 32
extern uchar kb_buffer[BufferSize];
extern uchar input;
extern uchar output;
extern uchar flag;
/*******************************************
函數(shù)名稱(chēng):PushBuff
功 能:將一個(gè)字符壓入顯示緩存,如果緩存以
滿(mǎn)則覆蓋前面的數(shù)據(jù)
參 數(shù):c--要顯示的字符
返回值 :無(wú)
********************************************/
void PutChar(uchar c)
{
kb_buffer[input] = c;
if (input < (BufferSize-1))
input++;
else
input = 0;
}
/*******************************************
函數(shù)名稱(chēng):PopChar
功 能:從顯示緩存中取出一個(gè)字符
參 數(shù):無(wú)
返回值 :取出的字符
********************************************/
uchar GetChar(void)
{
uchar temp;
if(output == input)
return 0xff;
else
{
temp = kb_buffer[output];
if(output < (BufferSize-1))
{
output++;
}
else
{
output = 0;
}
return temp;
}
}
/*******************************************
函數(shù)名稱(chēng):Init_KB
功 能:初始化與鍵盤(pán)相關(guān)的IO
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
void Init_KB(void)
{
P1DIR =0XCF;
P1OUT=0XFF;
}
/*******************************************
函數(shù)名稱(chēng):Decode
功 能:對(duì)來(lái)自鍵盤(pán)的信息進(jìn)行解碼,轉(zhuǎn)換成對(duì)
應(yīng)的ASCII編碼并壓入緩存
參 數(shù):sc--鍵盤(pán)發(fā)送過(guò)來(lái)的信息
返回值 :是否收到有效數(shù)據(jù):0--否,1--是
說(shuō)明 :本程序只能對(duì)基本按鍵(即鍵被按下時(shí)產(chǎn)
生三個(gè)字節(jié)的掃描碼的按鍵)做出解碼,
包括所有的可顯示字符鍵和Table,
Back Space和Enter三個(gè)特殊功能鍵。
基本按鍵的掃描碼由三個(gè)字節(jié)組成,第1個(gè)字節(jié)為接通
碼,第2、3字節(jié)為斷開(kāi)碼;其中第1字節(jié)和第3字節(jié)相
同,中間字節(jié)為斷開(kāi)標(biāo)志0xf0。
********************************************/
uchar Decode(uchar sc)
{
static uchar shift = 0; //Shift鍵是否按下標(biāo)志:1--按下,0--未按
static uchar up = 0; //鍵已放開(kāi)標(biāo)志: 1--放開(kāi),0--按下
uchar i,flag = 0;
if(sc == 0xf0) //如果收到的是掃描碼的第2個(gè)字節(jié)---0xf0:按鍵斷開(kāi)標(biāo)志
{
up = 1;
return 0;
}
else if(up == 1) //如果收到的是掃描碼的第3個(gè)字節(jié)
{
up = 0;
if((sc == 0x12) || ( sc==0x59)) shift = 0;
return 0;
}
//如果收到的是掃描碼的第1個(gè)字節(jié)
if((sc == 0x12) || (sc == 0x59)) //如果是左右shift鍵
{
shift = 1; //設(shè)置Shift按下標(biāo)志
flag = 0;
}
else
{
if(shift) //對(duì)按下Shift的鍵進(jìn)行解碼
{
for(i = 0;(shifted[i][0] != sc) && shifted[i][0];i++);
if (shifted[i][0] == sc)
{
PutChar(shifted[i][1]);
flag = 1;
}
}
else //直接對(duì)按鍵進(jìn)行解碼
{
for(i = 0;(unshifted[i][0] != sc) && unshifted[i][0];i++);
if(unshifted[i][0] == sc)
{
PutChar(unshifted[i][1]);
flag = 1;
}
}
}
if(flag) return 1;
else return 0;
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1