AVR----矩阵键盘实验

#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
//延时毫秒函数
void delay(uint ms)
{
        uint i,j;
 for(i=0;i<ms;i++)
    {
    for(j=0;j<1141;j++);
       }
}
//、、、、、、读取键盘操作函数、、、、、、、、
uchar key_press()
{
     uchar i;
  PORTD=0XF0; 
  DDRD=0X0F;
  i=PIND;
  if(i==0XF0)
  {
    return 0;
  }
  else
  {
    return 1;
  }
}
读取键值函数
uchar key_scan()
{
     uchar key,i=0X7F,j;
     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 0xEE:key=0x0;break;         
            case 0xDE:key=0x1;break;          
            case 0xBE:key=0x2;break;
            case 0x7E:key=0x3;break;
            case 0xED:key=0x4;break;      
            case 0xDD:key=0x5;break;      
            case 0xBD:key=0x6;break;
            case 0x7D:key=0x7;break;
            case 0xEB:key=0x8;break;
            case 0xDB:key=0x9;break;         
            case 0xBB:key=0xA;break;         
            case 0x7B:key=0xB;break;
            case 0xE7:key=0xC;break;        
            case 0xD7:key=0xD;break;         
            case 0xB7:key=0xE;break;         
            case 0x77:key=0xF;break;         
            default:   key=16;        
      }
    }
  else
    {
     key=16;
    }
  return key;
}
主函数///
void main()
{
     uchar m;
     DDRA|=0X18;  // 0001 1000
    DDRB=0XFF;
  while(1)
  {
    if(key_press())
    {
       m=key_scan();
       PORTB=m;
    }
  }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值