51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > AVR单片机 > 详细内容
键盘子程序(AVR)
发布时间:2009/7/22  阅读次数:1286  字体大小: 【】 【】【

来源:网络 高鹏  发表

键盘子程序(AVR) 


键盘扫描有中断方式和查询方式
#i nclude "jn8515def.h"

/******以下是键盘排列图******
                                     |             |             |
PC0   ___1|__2|__3|__
                                       |           |               |
PC1   ___4|__5|__6|__
                                    |             |               |
PC2   ___7|__8|__9|__
                                       |             |             |
PC3   ___C|__0|__S|__    
                                       |             |             |
                                        |            |             |
                             PC4 PC5 PC6
*****************************/    
//下沿为有效键值                   0       1       2       3       4       5       6       7       8       9   s(10)   c0     c1     c4     c7     cs   c
flash uchar cKeyTab[]={0x57,0x6e,0x5e,0x3e,0x6d,0x5d,0x3d,0x6b,0x5b,0x3b,0x37,0x47,0x66,0x65,0x63,0x27,0x67};
flash uchar cKeyOut[]={0xef,0xdf,0xbf};                     //其中一列为0
flash uchar cKeyDir[]={0x10,0x20,0x40};  
uchar cMenu=0;

uchar cKeyVal()
{   static uchar cLastKv,cSameKvNum=0;  
     static     bit bKeyPress=0;
     uchar i,j,cKeytmp=0xff;
     for(i=0;i<3;i++)
     {   DDRC&=0x80;
           DDRC|=cKeyDir[i];
           PORTC=cKeyOut[i];    
           #asm("nop")
           #asm("nop")
           cKeytmp=PINC&0x7f;    
           for(j=0;j<16;j++)
           {   if(cKeyTab[j]==cKeytmp)
                 {   cWaitTime=10;                   //延时去抖
                       goto Next;    
                 }
           }
     }
   // do{                                                     //等待按键释放
     // }while(!bKeyPress);      
     cSameKvNum=0;  
     bKeyPress=0;
     return 0xff;
Next:
//     delay_ms(2);      
     if(bKeyPress) return 0xff;
     if(cKeytmp==cLastKv)                                
     {   if(++cSameKvNum>10)
           {   cSameKvNum=0;
                 bKeyPress=1;
                 return j;
           }
     }
     else
     {   cSameKvNum=0;  
           cLastKv=cKeytmp;
     }
        
     return 0xff;//返回空键值        
}

  

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号