<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 一鍵多功能按鍵識別技術

          一鍵多功能按鍵識別技術

          作者: 時間:2011-02-27 來源:網(wǎng)絡 收藏

          1.實驗任務

          如圖4.9.1所示,開關SP1接在P3.7/RD管腳上,在AT89S51P1端口接有四個發(fā)光二極管,上電的時候,L1接在P1.0管腳上的發(fā)光二極管在閃爍,當每一次按下開關SP1的時候,L2接在P1.1管腳上的發(fā)光二極管在閃爍,再按下開關SP1的時候,L3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開關SP1的時候,L4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開關SP1的時候,又輪到L1在閃爍了,如此輪流下去。

          2.電路原理圖

          4.9.1

          3.系統(tǒng)板上硬件連線

          (1. 把“系統(tǒng)”區(qū)域中的P3.7/RD端口連接到“獨立式鍵盤”區(qū)域中的SP1端口上;

          (2. 把“系統(tǒng)”區(qū)域中的P1.0P1.4端口用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“L1L8”端口上;要求,P1.0連接到L1,P1.1連接到L2,P1.2連接到L3,P1.3連接到L4上。

          4.程序設計方法

          (1. 設計思想由來

          在我們生活中,我們很容易通過這個叫張三,那個叫李四,另外一個是王五;那是因為每個人有不同的名子,我們就很快認出,同樣,對于要通過一個按鍵來識別每種不同的功能,我們給每個不同的功能模塊用不同的ID號標識,這樣,每按下一次按鍵,ID的值是不相同的,所以單片機就很容易識別不同功能的身份了。

          (2. 設計方法

          從上面的要求我們可以看出,L1L4發(fā)光二極管在每個時刻的閃爍的時間是受開關SP1來控制,我們給L1L4閃爍的時段定義出不同的ID號,當L1在閃爍時,ID0;當L2在閃爍時,ID1;當L3在閃爍時,ID2;當L4在閃爍時,ID3;很顯然,只要每次按下開關K1時,分別給出不同的ID號我們就能夠完成上面的任務了。下面給出有關程序設計的框圖。

          5.程序框圖

          4.9.2

          6.匯編源程序

          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語言源程序

          #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;

          }

          }



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();