機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
指針函數(shù)的一個(gè)范例
指針函數(shù)的一個(gè)范例
 更新時(shí)間:2008-7-27 16:00:40  點(diǎn)擊數(shù):4
【字體: 字體顏色
作者:曉奇
#define ubyte unsigned char
#define uint unsigned int
#define ulong unsigned long

ubyte kbCode;                   // 按鍵編碼紀(jì)錄
ubyte kbStatus;                 // 鍵盤當(dāng)前狀態(tài),可以理解為菜單層次

// 按鍵的四種不同工作狀態(tài)對應(yīng)的函數(shù)指針對照表,每三字節(jié)對應(yīng)一個(gè)按鍵
// 按鍵碼,鍵盤狀態(tài),對應(yīng)處理程序編號
// 本表對應(yīng)于日常操作,不是修改狀態(tài)
ubyte code TAB0[46]={
    0x11,0x00,0x01,             // 按鍵'1'      func1
    0x12,0x00,0x01,             // 按鍵'2'      func1
    0x14,0x00,0x01,             // 按鍵'3'      func1
    0x1a,0x00,0x01,             // 按鍵'4'      func1
    0x2a,0x00,0x01,             // 按鍵'5'      func1
    0x4a,0x00,0x01,             // 按鍵'6'      func1
    0x01,0x00,0x01,             // 按鍵'7'      func1
    0x02,0x00,0x01,             // 按鍵'8'      func1
    0x04,0x00,0x01,             // 按鍵'9'      func1
    0x10,0x00,0x01,             // 按鍵'0'      func1
    0x20,0x00,0x01,             // 按鍵'.'      func1
    0x08,0x00,0x02,             // 按鍵'Clear'  func2
    0x18,0x00,0x03,             // 按鍵'U/D'    func3
    0x8a,0x01,0x04,             // 按鍵'shift'  func4
    0x40,0x02,0x05,             // 按鍵'last'   func5
    0x00};                      // 本表結(jié)束標(biāo)志

ubyte code TAB1[40]={
    0x12,0x03,0x06,             // 按鍵'2'      func6
    0x14,0x03,0x07,             // 按鍵'3'      func7
    0x2a,0x03,0x08,             // 按鍵'5'      func8
    0x4a,0x03,0x09,             // 按鍵'6'      func9
    0x01,0x03,0x12,             // 按鍵'7'      func18
    0x8a,0x03,0x14,             // 按鍵'shift'  func20
    0x11,0x01,0x0a,             // 按鍵'1'      func10
    0x1a,0x01,0x0b,             // 按鍵'4'      func11
    0x04,0x01,0x0c,             // 按鍵'9'      func12
    0x10,0x01,0x0d,             // 按鍵'0'      func13
    0x80,0x01,0x0e,             // 按鍵'Enter'  func14
    0x08,0x00,0x02,             // 按鍵'Clear'  func2
    0x20,0x03,0x13,             // 按鍵'.'      func19
    0x00};                      // 本表結(jié)束標(biāo)志

ubyte code TAB2[7]={
    0x40,0x02,0x0f,             // 按鍵'last'   func15
    0x08,0x00,0x02,             // 按鍵'Clear'  func2
    0x00};                      // 本表結(jié)束標(biāo)志

ubyte code TAB3[40]={
    0x11,0x03,0x10,             // 按鍵'1'      func16
    0x12,0x03,0x10,             // 按鍵'2'      func16
    0x14,0x03,0x10,             // 按鍵'3'      func16
    0x1a,0x03,0x10,             // 按鍵'4'      func16
    0x2a,0x03,0x10,             // 按鍵'5'      func16
    0x4a,0x03,0x10,             // 按鍵'6'      func16
    0x01,0x03,0x10,             // 按鍵'7'      func16
    0x02,0x03,0x10,             // 按鍵'8'      func16
    0x04,0x03,0x10,             // 按鍵'9'      func16
    0x10,0x03,0x10,             // 按鍵'0'      func16
    0x20,0x03,0x10,             // 按鍵'.'      func16
    0x08,0x00,0x02,             // 按鍵'clear'  func2
    0x80,0x01,0x11,             // 按鍵'Enter'  func17
    0x00};                      // 本表結(jié)束標(biāo)志

ubyte code *TAB[4]={TAB0,TAB1,TAB2,TAB3};       // 總指針表

// 指針函數(shù)列表
code void(code *KeyProcTab[])()={
      NoKey,            /*0#  (00H)#*/
      func1,            /*1#  (01H)#*/
      func2,            /*2#  (02H)#*/
      func3,            /*3#  (03H)#*/
      func4,            /*4#  (04H)#*/
      func5,            /*5#  (05H)#*/
      func6,            /*6#  (06H)#*/
      func7,            /*7#  (07H)#*/
      func8,            /*8#  (08H)#*/
      func9,            /*9#  (09H)#*/
      func10,           /*10# (0AH)#*/
      func11,           /*11# (0BH)#*/
      func12,           /*12# (0CH)#*/
      func13,           /*13# (0DH)#*/
      func14,           /*14# (0EH)#*/
      func15,           /*15# (0FH)#*/
      func16,           /*16# (10H)#*/
      func17,           /*17# (11H)#*/
      func18,           /*18# (12H)#*/
      func19,           /*19# (13H)#*/
      func20            /*20# (14H)#*/
};

void NoKey()
{
    return;
}

void func0()
{
    ;
}
void func1()
{
    ;
}
....................
void func20()
{
    ;
}


//////////////////////////////////////////////////////////////////////
// 鍵盤監(jiān)控,根據(jù)當(dāng)前狀態(tài)特征指向不同的指針表,并調(diào)用相應(yīng)的函數(shù)     //
//////////////////////////////////////////////////////////////////////
void mon(ubyte key)
{
   ubyte code *data pTab;
   kbCode=key;
   pTab=*(TAB+kbStatus);                // 根據(jù)當(dāng)前狀態(tài)特征指向分指針表
   while(*pTab != key && *pTab != 0)    // 按照按鍵代碼查表
   {
        pTab += 3;                          // 查表
   }
   if(*pTab!=0){
      pTab++;
      kbStatus=*pTab;                       // 取狀態(tài)特征字節(jié)
      pTab++;                               // 指向執(zhí)行函數(shù)
      (*KeyProcTab[*pTab])();               // 指針函數(shù)調(diào)用
   }
}
  • 上一篇: 24c02讀寫程序絕對好用的
  • 下一篇: 115.2k串行口通信程序
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1