色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          AVR矩陣鍵盤程序

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          搞了一頓竟然連矩陣鍵盤的程序都不會寫

          do
          {
          i=(i<<1|i>>7);
          PORTD=i;
          DDRD=0X0F;//
          key=PIND;//不論如何配置DDxn,都可以通過讀取PINxn 寄存器來獲得引腳電平
          j=key&0xf0;

          }while(j==0xf0);//直到發(fā)現(xiàn)按鍵按下。若沒有找到按鍵按下 的,繼續(xù)循環(huán)

          本文引用地址:http://cafeforensic.com/article/201611/316376.htm

          i的初值0x7f。i=(i<<1|i>>7);之后。i=1111 1110b

          第二次,i= 1111 1101b

          保證只有一位為0


          下面是程序,寫得很巧妙

          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          #pragma data:code //save to areas of program
          const table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c ,
          0x39,0x5e,0x79,0x71,0};

          void delay(uint ms)
          {
          uint i,j;
          for(i=0;ifor(j=0;j<1141;j++);
          }
          void show_init()
          {
          DDRA|=BIT(3);
          DDRB=0XFF;
          DDRA|=BIT(4);
          }
          void show(uchar aa,uchar bb)//第aa個數(shù)碼管顯示bb
          {

          //PORTB=0XFF;
          PORTA|=BIT(4);
          PORTB=~BIT(aa);
          PORTA&=~BIT(4);

          PORTA|=BIT(3);
          PORTB=table[bb];
          PORTA&=~BIT(3);


          delay(10);
          }
          uchar key_press()
          {
          uchar i;
          DDRD=0XFF;
          PORTD=0XF0;

          DDRD=0X0F;
          i=PIND;
          if(i==0xf0)
          {
          DDRD=0XFF;
          return 0;

          }
          else
          {
          DDRD=0XFF;
          return 1;
          }
          }
          uchar key_scan()
          {
          uchar key,i=0x7f,j,code;
          delay(10);
          if(key_press())
          {
          do
          {
          i=(i<<1|i>>7);
          PORTD=i;
          DDRD=0X0F;
          key=PIND;
          j=key&0xf0;

          }while(j==0xf0);

          while(key_press());

          switch(key)
          {
          case 0x7e: code=0;break;
          case 0xbe: code=1;break;
          case 0xde: code=2;break;
          case 0xee: code=3;break;

          case 0x7d: code=4;break;
          case 0xbd: code=5;break;
          case 0xdd: code=6;break;
          case 0xed: code=7;break;

          case 0x7b: code=8;break;
          case 0xbb: code=9;break;
          case 0xdb: code=10;break;
          case 0xeb: code=11;break;

          case 0x77: code=12;break;
          case 0xb7: code=13;break;
          case 0xd7: code=14;break;
          case 0xe7: code=15;break;

          }
          }

          return code;
          }

          void main()
          {
          uchar s;
          show_init();
          while(1)
          {
          if(key_press())
          {
          s=key_scan();
          show(0,s);
          }
          }

          }




          關(guān)鍵詞: AVR矩陣鍵

          評論


          技術(shù)專區(qū)

          關(guān)閉