在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PORTB的電平變化中斷進(jìn)行鍵盤(pán)輸入

      PORTB的電平變化中斷進(jìn)行鍵盤(pán)輸入

      作者: 時(shí)間:2012-12-31 來(lái)源:網(wǎng)絡(luò) 收藏

      //該程序通過(guò)的""進(jìn)行鍵盤(pán)的輸入,使按下K1鍵時(shí)第一個(gè)數(shù)碼管顯示1,按下K2
      //鍵時(shí)第一個(gè)數(shù)碼管上顯示2,按下K3鍵時(shí)第一個(gè)數(shù)碼管上顯示3,按下K4鍵時(shí)第一個(gè)數(shù)碼管上顯示4
      //對(duì)鍵盤(pán)的掃描采用中斷方式

      #include"p18f458.h"

      unsigned chardata;
      unsigned inti;
      unsigned charj;
      const char table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};

      voidInterruptHandlerHigh(void);

      /*初始化子程序*/
      /* http://www.51hei.com 提供此程序*/
      void initial()
      {
      INTCON=0x08;/*關(guān)閉所有中斷,B口變位中斷允許*/
      INTCON2=0x01;/*使能B口弱上拉,B口變位中斷高優(yōu)先級(jí)*/
      RCONbits.IPEN=1;/*使能中斷優(yōu)先級(jí)*/
      TRISA=0x00;/*A口設(shè)置為輸出*/
      TRISB=0XF0;/*RB1輸出,RB4輸入*/
      TRISC=0x00;/*SDO引腳為輸出,SCK引腳為輸出*/
      TRISE=0x00;/*E口設(shè)置為輸出*/
      SSPCON1=0x30;/*SSPEN=1;CKP=1,F(xiàn)OSC/4*/
      SSPSTAT=0xC0;/*時(shí)鐘下降沿發(fā)送數(shù)據(jù)*/
      PIR1=0;/*清除SSPIF標(biāo)志*/
      data=0X00;/*待顯示的寄存器賦初值*/
      bits.RB1=0;
      PORTAbits.RA3=0;
      PORTE=0;/*將K1,K2,K3,K4四條列線(xiàn)置0*/
      =PORTB;/*讀B口的值,為變位中斷創(chuàng)造條件*/
      }

      /*鍵服務(wù)子程序*/
      voidKEYSERVE()
      {
      PORTBbits.RB1=0;/*K1,K2置低電平,K3,K4置高電平*/
      PORTAbits.RA3=0;/*RB4為0,表示按鍵為K1,K2中的一個(gè)*/
      PORTE=3;/*RB4為1,表示按鍵為K3,K4中的一個(gè)*/
      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;}
      }
      }

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

      /*顯示子程序*/
      voidSPILED(char data)
      {
      PORTAbits.RA5=0;/*LACK送低電平,為鎖存做準(zhǔn)備*/
      SSPBUF=data;/*啟動(dòng)發(fā)送*/
      do
      {
      ;
      }while(PIR1bits.SSPIF==0);/*等待發(fā)送完畢*/
      PIR1bits.SSPIF=0;/*清除SSPIF標(biāo)志*/
      PORTAbits.RA5=1;/*最后給鎖存信號(hào),代表顯示任務(wù)完成*/
      }

      /*高優(yōu)先級(jí)中斷向量*/
      #pragma code InterruptVectorHigh=0x08
      voidInterruptVectorHigh (void)
      {
      _asm
      goto InterruptHandlerHigh /*跳到中斷程序*/
      _endasm
      }

      /*高優(yōu)先級(jí)中斷程序*/
      #pragma code
      #pragma interrupt InterruptHandlerHigh
      voidInterruptHandlerHigh ()
      {
      INTCONbits.RBIF=0;/*中斷標(biāo)志清0*/
      DELAY();/*軟件延時(shí)*/
      PORTB=PORTB;/*讀PORTB的值,并改變中斷發(fā)生的條件,可屏蔽*/
      /*一次按鍵松開(kāi)時(shí)產(chǎn)生的無(wú)效的中斷,又可以防止按鍵*/
      /*時(shí)間過(guò)長(zhǎng)發(fā)生連續(xù)中斷*/
      if(PORTBbits.RB4==0)
      {
      KEYSERVE();/*進(jìn)行鍵盤(pán)的識(shí)別*/
      PORTBbits.RB1=0;
      PORTAbits.RA3=0;
      PORTE=0;/*將K1,K2,K3,K4四條列線(xiàn)置0,以防止鍵掃描時(shí)改變*/
      /*K1,K2,K3,K4的電平,從而改變中斷條件*/
      INTCONbits.RBIF=0;/*鍵掃描時(shí)可能會(huì)產(chǎn)生"電平變化"而使置1,再清除一次*/
      /*RBIF以求避免額外中斷*/
      data=table[j];/*獲得需要送出顯示的段碼*/
      SPILED(data);
      }
      }

      /*主程序*/
      main()
      {
      initial();/*系統(tǒng)初始化*/
      INTCONbits.GIE=1;/*總中斷允許*/
      while(1)
      {
      }/*等待中斷*/
      }



      評(píng)論


      技術(shù)專(zhuān)區(qū)

      關(guān)閉