機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
按鍵處理 處理一鍵多能
按鍵處理 處理一鍵多能
 更新時間:2008-7-27 16:08:00  點擊數(shù):2
【字體: 字體顏色

按鍵處理 處理一鍵多能


發(fā)布時間:2008年1月5日 2時22分


編寫了這幾個按鍵處理程序,經(jīng)過AT89S51和4*4鍵盤的配合測試,發(fā)現(xiàn)效果良好,達(dá)到了較好的實時性。

這里只給出簡單單擊處理源程序

//一般短按鍵處理程序
//占用定時器0,閃爍時間10ms
//有效仿抖,時時性較高只能處理單擊按鍵,目前和4*4鍵盤掃描程序一起使用

//------------------------------------
// 單擊鍵盤控制程序
// 作者:張子墨
// 最后更新時間:2006/11/21
// 當(dāng)前版本:0.90
// 測試MCU:AT89S51
//------------------------------------

#i nclude <at89s53.h>
#i nclude "4_4KeyScan.c"     //配套鍵盤掃描程序,獲得鍵碼
#i nclude "12864_Driver.c"    //臨時顯示效果使用

#define TIMER0VALUE_H 0xDC    //定時器0高位
#define TIMER0VALUE_L 0x00    //定時器0低位  //11.0592晶振定時10ms

unsigned char Key_Num = 0x00;    //本次鍵碼
unsigned char Key_Backup = 0x00;   //備份鍵碼

bit Key_Dis_F = 0;     //按鍵禁止響應(yīng)
bit Key_Scan_F = 0;     //按鍵檢測使能,中斷每10MS置有效

//-----------------------------
//
//測試程序用的全局變量,對于主功能沒有影響
//
//-----------------------------
unsigned char i = 0;

//-----------------------------
//
// 定時器0初始化函數(shù)
//
//-----------------------------

void Timer0Init (void)
{
 TMOD |= 0x01;      //定時器0工作模式1
 IE |= 0x82;      //EA = 1;ET0 = 1;
 TH0 = TIMER0VALUE_H;
 TL0 = TIMER0VALUE_L;
 TR0 = 1;
}

//-----------------------------
//
// 定時器0中斷服務(wù)函數(shù)
//
//-----------------------------

void Timer0SRV (void) interrupt 1 using 2
{
 TH0 = TIMER0VALUE_H;     //重裝初值
 TL0 = TIMER0VALUE_L;
 TR0 = 1;
 Key_Scan_F = 1;      //允許掃描鍵盤
}

//-----------------------------
//
// 臨時測試按鍵效果函數(shù),實際應(yīng)用修改為散轉(zhuǎn)函數(shù)
//
//-----------------------------

void ShortKeyAction (void)
{
 Font[i++] = Key_Num;
 SentAData(Key_Num);
 if(i>32)
 {
  i = 0;
  SentAIns (0x01);
  SentAIns (0x80);
 }
}

//-----------------------------
//
// 按鍵掃描控制函數(shù)
//
//-----------------------------

void KeyDeal (void)
{
 Key_Scan_F = 0;      //表示10ms周期內(nèi)掃描完成,等待新的周期
 Key_Num = KeyCodeConvert (GetKeyCode());  //獲得最新鍵盤編碼 根據(jù)實際情況,使用不同的掃描程序
 if((Key_Num!=0x00)&&(Key_Num == Key_Backup))  //如果有按鍵并且與上次相同
 {
  if(!Key_Dis_F)     //如果當(dāng)前按鍵沒有操作
  {
   ShortKeyAction();   //進入處理散轉(zhuǎn)
   Key_Dis_F = 1;    //表示按鍵處理完成
  }
 }
 else       //否則沒有按鍵或者按鍵變化
 {
  Key_Backup = Key_Num;    //重新記錄按鍵碼
  Key_Dis_F = 0;     //按鍵標(biāo)志沒有處理
 }
}

  • 上一篇: 51單片機與串口通信(含代碼)
  • 下一篇: 計時/計數(shù)方式循環(huán)顯示0—99
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

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

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