專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

單片機(jī)一鍵多功能按鍵識(shí)別技術(shù)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2008年09月19日   【字體:

    在一些單片機(jī)系統(tǒng)中,有時(shí)候需要采用一些一鍵多功能的技術(shù),這里我給大家介紹一下。開(kāi)關(guān)SP1接在P3.7/RD管腳上,在AT89S51單片機(jī)的P1端口接有四個(gè)發(fā)光二極管,上電的時(shí)候,L1接在P1.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開(kāi)關(guān)SP1的時(shí)候,L2接在P1.1管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)SP1的時(shí)候,L3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)SP1的時(shí)候,L4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)SP1的時(shí)候,又輪到L1在閃爍了,如此輪流下去。這樣就實(shí)現(xiàn)了具有一鍵多功能的按鍵識(shí)別技術(shù)。簡(jiǎn)單吧


單片機(jī)系統(tǒng)板上硬件連線(xiàn)

  把“單片機(jī)系統(tǒng)”區(qū)域中的P3.7/RD端口連接到“獨(dú)立式鍵盤(pán)”區(qū)域中的SP1端口上把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0-P1.4端口用8芯排線(xiàn)連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“L1-L8”端口上;要求,P1.0連接到L1,P1.1連接到L2,P1.2連接到L3,P1.3連接到L4上。具體的電路圖在單片機(jī)論壇http://www.torrancerestoration.com51區(qū)上有。歡迎發(fā)表您的高見(jiàn)。本文為郭子喻先生原創(chuàng)作品希望大家支持。


匯編源程序
ID          EQU 30H
SP1         BIT P3.7
L1          BIT P1.0
L2          BIT P1.1
L3          BIT P1.2
L4          BIT P1.3
            ORG 0
            MOV ID,#00H
START:      JB K1,REL
            LCALL DELAY10MS
            JB K1,REL
            INC ID
            MOV A,ID
            CJNE A,#04,REL
            MOV ID,#00H
REL:        JNB K1,$
            MOV A,ID
           CJNE A,#00H,IS0
            CPL L1
            LCALL DELAY
            SJMP START
IS0:       CJNE A,#01H,IS1
            CPL L2
            LCALL DELAY
            SJMP START
IS1:       CJNE A,#02H,IS2
            CPL L3
            LCALL DELAY
            SJMP START
IS2:       CJNE A,#03H,IS3
            CPL L4
            LCALL DELAY
            SJMP START
IS3:        LJMP START
DELAY10MS:    MOV R6,#20
LOOP1:       MOV R7,#248
             DJNZ R7,$
             DJNZ R6,LOOP1
             RET
DELAY:      MOV R5,#20
LOOP2:      LCALL DELAY10MS
            DJNZ R5,LOOP2
            RET
            END
7.C語(yǔ)言源程序
#include <AT89X51.H>
unsigned char ID;
void delay10ms(void)
{
  unsigned char i,j;
  for(i=20;i>0;i--)
  for(j=248;j>0;j--);
}
void delay02s(void)
{
  unsigned char i;
  for(i=20;i>0;i--)
    {delay10ms();
    }
}
void main(void)
{ while(1)
    { if(P3_7==0)
        {delay10ms();
          if(P3_7==0)
            {
              ID++;
              if(ID==4)
                {
                  ID=0;
                }
              while(P3_7==0);
            }
        }
      switch(ID) 
        { case 0:
            P1_0=~P1_0;
            delay02s();
            break;
          case 1:
            P1_1=~P1_1;
            delay02s();
            break;
          case 2:
            P1_2=~P1_2;
            delay02s();
            break;
          case 3:
            P1_3=~P1_3;
            delay02s();
            break;
        }
    }

轉(zhuǎn)載請(qǐng)保留51黑鏈接!

關(guān)閉窗口