《键盘C语言程序》word版.docx
《《键盘C语言程序》word版.docx》由会员分享,可在线阅读,更多相关《《键盘C语言程序》word版.docx(10页珍藏版)》请在冰豆网上搜索。
《键盘C语言程序》word版
查看文章
在DSP2812上的键盘C++程序
#include"main.h"
classSystemObjSystem;
classTimerObjTimer;
classLcdObjLcd;
classKeyboardObjKeyboard;
intmain(void)
{
Lcd.SetDisplayPos(0,0);//汉字定位到上行左端
Lcd.Display("汉字显示演示12");
Lcd.SetDisplayPos(1,0);//汉字定位到上行左端
Lcd.Display("汉字显示演示34");
Lcd.SetDisplayPos(2,0);//汉字定位到上行左端
Lcd.Display("汉字显示演示56");
Lcd.SetDisplayPos(3,0);//汉字定位到上行左端
Lcd.Display("汉字显示演示78");
EALLOW;
// PieCtrlRegs.PIEACK.all=0xFFFF;//PIEACK_GROUP1;
PieCtrlRegs.PIEACK.bit.ACK7=1;
EDIS;
EINT; //EnableGlobalinterruptINTM
ERTM; //EnableGlobalrealtimeinterruptDBGM
for(;;)
asm("nop");
//Resetthewatchdogcounter
KickDog();
}
#include"keyboard.h"
KeyboardObj:
:
KeyboardObj(void)
Init();
voidKeyboardObj:
Init(void)
for(inti=0;i { PressCount[i]=0; } Count=0;}voidKeyboardObj::Exec(void){typedefvoid(KeyboardObj::*FunctionPtr)(void);//函数指针staticconstFunctionPtrKeyboardCommandTab[3][KeyboardNumbers]={ { &KeyboardObj::Key01, &KeyboardObj::Key02, &KeyboardObj::Key03, &KeyboardObj::Key04, &KeyboardObj::Key05, &KeyboardObj::Key06, &KeyboardObj::Key07, &KeyboardObj::Key08 },//放键表 { &KeyboardObj::Key11, &KeyboardObj::Key12, &KeyboardObj::Key13, &KeyboardObj::Key14, &KeyboardObj::Key15, &KeyboardObj::Key16, &KeyboardObj::Key17, &KeyboardObj::Key18 },//短压表 { &KeyboardObj::Key21, &KeyboardObj::Key22, &KeyboardObj::Key23, &KeyboardObj::Key24, &KeyboardObj::Key25, &KeyboardObj::Key26, &KeyboardObj::Key27, &KeyboardObj::Key28 }//长压表};unsignedcharKeyCount; Count%=KeyboardNumbers; KeyCount=PressCount[Count];//取压键次数 if(Scan()==Count+1)//有键压下 { KeyCount++;//压键计数 if(KeyCount>=KeyboardPushTimes) { if(KeyCount==KeyboardPushTimes)//短压键 {// System.BeepOn(); (::Keyboard.*KeyboardCommandTab[1][Count])(); } if(KeyCount==KeyboardLongPushTimes)//长压键 { (::Keyboard.*KeyboardCommandTab[2][Count])(); KeyCount=KeyboardPushTimes; } } } else//无键压下 { if(KeyCount>0)//以前有键压下 { if(KeyCount>KeyboardPushTimes) { KeyCount=KeyboardPushTimes; } else { KeyCount--;//放键计数 if(KeyCount==0)//键释放 { System.BeepOff(); (::Keyboard.*KeyboardCommandTab[0][Count])(); } } } else { KeyCount=0; } } PressCount[Count]=KeyCount; Count++; Count%=KeyboardNumbers;}unsignedcharKeyboardObj::Scan(void){volatileunsignedcharKeyVal=0; Count%=KeyboardNumbers; KeyVal=LedKeyRegs; switch(Count) { case0: if(!(KeyVal&ConstKEY1)) { KeyVal=Count+1; } break; case1: if(!(KeyVal&ConstKEY2)) { KeyVal=Count+1; } break; case2: if(!(KeyVal&ConstKEY3)) { KeyVal=Count+1; } break; case3: if(!(KeyVal&ConstKEY4)) { KeyVal=Count+1; } break; case4: if(!(KeyVal&ConstKEY5)) { KeyVal=Count+1; } break; case5: if(!(KeyVal&ConstKEY6)) { KeyVal=Count+1; } break; case6: if(!(KeyVal&ConstKEY7)) { KeyVal=Count+1; } break; case7: if(!(KeyVal&ConstKEY8)) { KeyVal=Count+1; } break; } returnKeyVal;}//KEY1放键事件处理voidKeyboardObj::Key01(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY1键释放事件");}//KEY2放键事件处理voidKeyboardObj::Key02(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY2键释放事件");}//KEY3放键事件处理voidKeyboardObj::Key03(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY3键释放事件");}//KEY4放键事件处理voidKeyboardObj::Key04(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY4键释放事件");}//KEY5放键事件处理voidKeyboardObj::Key05(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY5键释放事件");}//KEY6放键事件处理voidKeyboardObj::Key06(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY6键释放事件");}//KEY7放键事件处理voidKeyboardObj::Key07(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY7键释放事件");}//KEY8放键事件处理voidKeyboardObj::Key08(void){ Lcd.SetDisplayPos(3,0);//汉字定位到上行左端 Lcd.Display("KEY8键释放事件");}//KEY1压键事件处理voidKeyboardObj::Key11(void){//特别注意菜农的组合键用法,可以看出"零耗时键盘"的非典之处 if(PressCount[7]>=KeyboardPushTimes)//KEY8已先压下 { Key8_Key1();//执行KEY8_KEY1组合键事件 } else {// System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY1键单击事件"); }}//KEY2压键事件处理voidKeyboardObj::Key12(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY2键单击事件");}//KEY3压键事件处理voidKeyboardObj::Key13(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY3键单击事件");}//KEY4压键事件处理voidKeyboardObj::Key14(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY4键单击事件");}//KEY5压键事件处理voidKeyboardObj::Key15(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY5键单击事件");}//KEY6压键事件处理voidKeyboardObj::Key16(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY6键单击事件");}//KEY7压键事件处理voidKeyboardObj::Key17(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY7键单击事件");}//KEY8压键事件处理voidKeyboardObj::Key18(void){//特别注意菜农的组合键用法,可以看出"零耗时键盘"的非典之处 if(PressCount[0]>=KeyboardPushTimes)//KEY1已先压下 { Key1_Key8();//执行KEY1_KEY8组合键事件 } else {// System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY8键单击事件"); }}//KEY1长压键事件处理voidKeyboardObj::Key21(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY1键长压事件");}//KEY2长压键事件处理voidKeyboardObj::Key22(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY2键长压事件");}//KEY3长压键事件处理voidKeyboardObj::Key23(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY3键长压事件");}//KEY4长压键事件处理voidKeyboardObj::Key24(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY4键长压事件");}//KEY5长压键事件处理voidKeyboardObj::Key25(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY5键长压事件");}//KEY6长压键事件处理voidKeyboardObj::Key26(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY6键长压事件");}//KEY7长压键事件处理voidKeyboardObj::Key27(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY7键长压事件");}//KEY8长压键事件处理voidKeyboardObj::Key28(void){ System.BeepOn(); Lcd.SetDisplayPos(2,0);//汉字定位到上行左端 Lcd.Display("KEY8键长压事件");}//KEY1-KEY8组合键事件处理voidKeyboardObj::Key1_Key8(void){ Lcd.SetDisplayPos(1,0);//汉字定位到上行左端 Lcd.Display("KEY1KEY8键事件");}//KEY8-KEY1组合键事件处理voidKeyboardObj::Key8_Key1(void){ Lcd.SetDisplayPos(1,0);//汉字定位到上行左端 Lcd.Display("KEY8KEY1键事件");}类别:Dsp||添加到搜藏|分享到i贴吧|浏览(247)|评论 (0) 上一篇:DSP281x_Adc.h修改以便访问 下一篇:DSP2812串口波特率正确和良好的... 最近读者:欢迎您的下载,资料仅供参考!
PressCount[i]=0;
Count=0;
Exec(void)
typedefvoid(KeyboardObj:
*FunctionPtr)(void);//函数指针
staticconstFunctionPtrKeyboardCommandTab[3][KeyboardNumbers]=
&KeyboardObj:
Key01,
Key02,
Key03,
Key04,
Key05,
Key06,
Key07,
Key08
},//放键表
Key11,
Key12,
Key13,
Key14,
Key15,
Key16,
Key17,
Key18
},//短压表
Key21,
Key22,
Key23,
Key24,
Key25,
Key26,
Key27,
Key28
}//长压表
};
unsignedcharKeyCount;
Count%=KeyboardNumbers;
KeyCount=PressCount[Count];//取压键次数
if(Scan()==Count+1)//有键压下
KeyCount++;//压键计数
if(KeyCount>=KeyboardPushTimes)
if(KeyCount==KeyboardPushTimes)//短压键
// System.BeepOn();
(:
Keyboard.*KeyboardCommandTab[1][Count])();
if(KeyCount==KeyboardLongPushTimes)//长压键
Keyboard.*KeyboardCommandTab[2][Count])();
KeyCount=KeyboardPushTimes;
else//无键压下
if(KeyCount>0)//以前有键压下
if(KeyCount>KeyboardPushTimes)
else
KeyCount--;//放键计数
if(KeyCount==0)//键释放
System.BeepOff();
Keyboard.*KeyboardCommandTab[0][Count])();
KeyCount=0;
PressCount[Count]=KeyCount;
Count++;
unsignedcharKeyboardObj:
Scan(void)
volatileunsignedcharKeyVal=0;
KeyVal=LedKeyRegs;
switch(Count)
case0:
if(!
(KeyVal&ConstKEY1))
KeyVal=Count+1;
break;
case1:
(KeyVal&ConstKEY2))
case2:
(KeyVal&ConstKEY3))
case3:
(KeyVal&ConstKEY4))
case4:
(KeyVal&ConstKEY5))
case5:
(KeyVal&ConstKEY6))
case6:
(KeyVal&ConstKEY7))
case7:
(KeyVal&ConstKEY8))
returnKeyVal;
//KEY1放键事件处理
Key01(void)
Lcd.Display("KEY1键释放事件");
//KEY2放键事件处理
Key02(void)
Lcd.Display("KEY2键释放事件");
//KEY3放键事件处理
Key03(void)
Lcd.Display("KEY3键释放事件");
//KEY4放键事件处理
Key04(void)
Lcd.Display("KEY4键释放事件");
//KEY5放键事件处理
Key05(void)
Lcd.Display("KEY5键释放事件");
//KEY6放键事件处理
Key06(void)
Lcd.Display("KEY6键释放事件");
//KEY7放键事件处理
Key07(void)
Lcd.Display("KEY7键释放事件");
//KEY8放键事件处理
Key08(void)
Lcd.Display("KEY8键释放事件");
//KEY1压键事件处理
Key11(void)
//特别注意菜农的组合键用法,可以看出"零耗时键盘"的非典之处
if(PressCount[7]>=KeyboardPushTimes)//KEY8已先压下
Key8_Key1();//执行KEY8_KEY1组合键事件
Lcd.Display("KEY1键单击事件");
//KEY2压键事件处理
Key12(void)
System.BeepOn();
Lcd.Display("KEY2键单击事件");
//KEY3压键事件处理
Key13(void)
Lcd.Display("KEY3键单击事件");
//KEY4压键事件处理
Key14(void)
Lcd.Display("KEY4键单击事件");
//KEY5压键事件处理
Key15(void)
Lcd.Display("KEY5键单击事件");
//KEY6压键事件处理
Key16(void)
Lcd.Display("KEY6键单击事件");
//KEY7压键事件处理
Key17(void)
Lcd.Display("KEY7键单击事件");
//KEY8压键事件处理
Key18(void)
if(PressCount[0]>=KeyboardPushTimes)//KEY1已先压下
Key1_Key8();//执行KEY1_KEY8组合键事件
Lcd.Display("KEY8键单击事件");
//KEY1长压键事件处理
Key21(void)
Lcd.Display("KEY1键长压事件");
//KEY2长压键事件处理
Key22(void)
Lcd.Display("KEY2键长压事件");
//KEY3长压键事件处理
Key23(void)
Lcd.Display("KEY3键长压事件");
//KEY4长压键事件处理
Key24(void)
Lcd.Display("KEY4键长压事件");
//KEY5长压键事件处理
Key25(void)
Lcd.Display("KEY5键长压事件");
//KEY6长压键事件处理
Key26(void)
Lcd.Display("KEY6键长压事件");
//KEY7长压键事件处理
Key27(void)
Lcd.Display("KEY7键长压事件");
//KEY8长压键事件处理
Key28(void)
Lcd.Display("KEY8键长压事件");
//KEY1-KEY8组合键事件处理
Key1_Key8(void)
Lcd.Display("KEY1KEY8键事件");
//KEY8-KEY1组合键事件处理
Key8_Key1(void)
Lcd.Display("KEY8KEY1键事件");
类别:
Dsp|
|添加到搜藏|分享到i贴吧|浏览(247)|评论 (0)
上一篇:
DSP281x_Adc.h修改以便访问 下一篇:
DSP2812串口波特率正确和良好的...
最近读者:
欢迎您的下载,资料仅供参考!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1