欧美视频综合-欧美视频中文字幕-欧美视频在线观在线看-欧美视频在线观看网站-直接观看黄网站免费视频-正在播放久久

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
單片機鍵盤的掃描查詢方式輸入
單片機鍵盤的掃描查詢方式輸入
 更新時間:2009-11-2 15:41:57  點擊數:0
【字體: 字體顏色

//本程序用于pic單片機外接鍵盤的識別,通過編程,使按下K1鍵時第一個數碼管顯示1,按下K2鍵時第一
//個數碼管上顯示2,按下K3鍵時第一個數碼管上顯示3,按下K4鍵時第一個數碼管上顯示4,
//對鍵盤的掃描采用查詢方式。

#include "p18f458.h"

static volatile int table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
volatile unsigned char data;
unsigned int i;
unsigned char j=0;

/*初始化子程序*/
void initial()
{
 TRISA=0x00;     /*A口設置為輸出*/
 TRISB=0XF0;     /*RB1輸出,RB4輸入*/
 TRISC=0x00;     /*SDO引腳為輸出,SCK引腳為輸出*/
 TRISE=0x00;     /*E口設置為輸出*/
 INTCON=0x00;    /*關閉所有中斷*/
 SSPCON1=0x30;    /*SSPEN=1;CKP=1,FOSC/4*/
 SSPSTAT=0xC0;    /*時鐘下降沿發送數據*/
 PIR1=0;      /*清除SSPIF標志*/ 
}

/*軟件延時子程序*/
void DELAY()
{
 for(i = 6553; --i ;)
 continue;
}

/*鍵盤掃描子程序*/
int  KEYSCAN()

 PORTBbits.RB1=0;
 PORTAbits.RA3=0;
 PORTE=0;     /*將K1,K2,K3,K4四條列線置0*/
 while(1)
 {
  if (PORTBbits.RB4==0)
  break;
 }       /*等待有鍵按下,RB4為0表示有鍵按下*/
 DELAY();     /*軟件延時*/
 if (PORTBbits.RB4==0)
  KEYSERVE();    /*如果仍有鍵按下,則調用鍵服務子程序*/
 else j=0x00;     /*如果為干擾,則令返回值為0*/
 return(j);
}
 
/*鍵服務子程序*/
int  KEYSERVE()
{
 PORTBbits.RB1=0;    /*K1,K2置低電平,K3,K4置高電平*/
 PORTAbits.RA3=0;    /*RB4為0,表示按鍵為K1,K2中的一個*/
 PORTE=3;     /*RB4為1,表示按鍵為K3,K4中的一個*/
 if(PORTBbits.RB4==0)
 {
  PORTBbits.RB1=0;   /*K1置低電平,K2置高電平*/
  PORTAbits.RA3=1;   /*RB4為0,表示按鍵為K1;RB4為1,表示按鍵為K2*/
  if(PORTBbits.RB4==0) j=0X01;
  else {j=0X02; PORTAbits.RA3=0;}
 }
 else
 {
  PORTEbits.RE0=0;   /*K3置低電平,K4置高電平*/
  PORTEbits.RE1=1;   /*RB4為0,表示按鍵為K3;RB4為1,表示按鍵為K4*/
  if(PORTBbits.RB4==0) j=0X03;
  else {j=0X04; PORTEbits.RE1=0;}  
 }
 while(1)
 {
  if(PORTBbits.RB4==1) break; /*為了防止一次按鍵多次識別,等鍵松開才返回*/
 }
 return(j);
}

/*顯示子程序*/
void SPILED(char data)
{
 PORTAbits.RA5=0;    /*LACK送低電平,為鎖存做準備*/
 SSPBUF=data;     /*啟動發送*/
 do
 {
 ;
 }while(PIR1bits.SSPIF==0);  /*等待發送完畢*/
 PIR1bits.SSPIF=0;    /*清除SSPIF標志*/
 PORTAbits.RA5=1;    /*最后給鎖存信號,代表顯示任務完成*/
}

/*鍵盤掃描查詢方式輸入主程序*/
main()
{
 initial();      /*系統初始化*/  
 while(1)
 {
  KEYSCAN();
  if(j!=0)     /*如果j=0,證明先前的按鍵為干擾,則不予顯示*/
  {
   data=table[j];
   SPILED(data);   /*發送顯示段碼顯示*/
  }
   }
}

  • 上一篇: RS-232接口實現計算機和單片機通信程序
  • 下一篇: 沒有了
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1