打印
[AVR单片机]

4*4矩阵键盘的问题急~~~~

[复制链接]
2150|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liningustb|  楼主 | 2009-3-10 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<avr/io.h>
#include<util/delay.h>




unsigned char  keyscan(void)

    unsigned char  temp;
    unsigned char   key;

    DDRC=0xF0;         //高四位输出,低四位输入。  
    PORTC=0x0F;
    _delay_ms(10);
    temp=PINC;         //读PC口 
    temp=temp&0x0F;
    temp=~(temp|0xF0);
    if(temp==1)
        key=0;
    else if(temp==2)
        key=1;
    else if(temp==4)
        key=2;
    else if(temp==8)
        key=3;
    else
        key=16;
        
    DDRC=0x0F;          //高四位输入,低四位出。                     
    PORTC=0xF0;
    _delay_ms(10);
    temp=PINC;          //读PC口       
    temp=temp&0xF0;
    temp=~((temp>>4)|0xF0);
    if(temp==1)
        key=key+0;
    else if(temp==2)
        key=key+4;
    else if(temp==4)
        key=key+8;
    else if(temp==8)
        key=key+12;
    else
        key=16;

   return key;
}

int main(void)
   { 
    unsigned char k;
     
     DDRD=0xff;//D口接流水灯

     
     while (1)
          
          { 
           
           k= keyscan();
             
             

             switch(k)
             {case 0:PORTD=(1<<0);break;
                             case 1:PORTD=(1<<1);break;
              case 2:PORTD=(1<<2);break;
              case 3:PORTD=(1<<3);break;
              case 4:PORTD=(1<<4);break;
              case 5:PORTD=(1<<5);break;
              case 6:PORTD=(1<<6);break;
              case 7:PORTD=(1<<7);break;
            
                   default:PORTD=0x00;
             
             }
         }
}
mega16,内1M,不知道为什么,按相应的键是没有灯亮呀,谁能说说这是为什么?谢谢了

相关帖子

沙发
liningustb|  楼主 | 2009-3-10 15:16 | 只看该作者

行和列是接在PC口上的,PD口接流水灯

使用特权

评论回复
板凳
roalychen| | 2009-3-19 11:50 | 只看该作者

PORTC=0x0F;-->PORTC=0xFF;

try

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝