搜索
bottom↓
回复: 3

老题:按键复用功能扫描(atmega16)

[复制链接]

出0入0汤圆

发表于 2012-5-1 15:24:23 | 显示全部楼层 |阅读模式
拆了一个流量计
想用上面的屏和按键,一看屏的io和按键是公用的
以前都是用的单功能键,为了用上那板子,终于学习了按键功能复用
/////按键复用程序
/////liuchengliaaa 2012  01 01   这里用的是PA口的高四位作按键  PB0是检测口
/////在每次进中断都要重新配置端口方向,和数据,否则会影响lcd的读写
void  key_scanff()
{
  uchar  i;
  //SFIOR&=~(1<<PUD);   //上拉使能
  KEY_IN_DDR&=~(1<<KEY_IN);
  KEY_IN_PORT|=(1<<KEY_IN);  //配置输入口
                            //当引脚配置为输入时,若PORTxn 为"1“,上拉电阻将使能 p49
  KEY_OUT_DDR|=(1<<KEY_OUT_1)|(1<<KEY_OUT_2)|(1<<KEY_OUT_3)|(1<<KEY_OUT_4);//配置输出口
  KEY_OUT_PORT|=(1<<KEY_OUT_1)|(1<<KEY_OUT_2)|(1<<KEY_OUT_3)|(1<<KEY_OUT_4);
  NOP();

if((key_valid==0)&&(keyflag==0))
{
for(i=4;i!=0;i--)
{
  switch(i)   //依次把按键口置低
  {
   case 1:KEY_1_SCAN();break;
   case 2:KEY_2_SCAN();break;
   case 3:KEY_3_SCAN();break;
   case 4:KEY_4_SCAN();break;
  }
  NOP();
  if(KEY_YES)  //按键检测
  {
   keypointer=i; //按键识别
   key_valid=1;
  }
  if(key_valid)break; //如果有检测到按键,跳出for循环
}
}
   
else if((key_valid==1)&&(keyflag==0)) //有键按下
{
switch(keypointer)   //消抖
  {
   case 1:KEY_1_SCAN();break;
   case 2:KEY_2_SCAN();break;
   case 3:KEY_3_SCAN();break;
   case 4:KEY_4_SCAN();break;
  }
  NOP();
  if(KEY_YES)//按键有效
   {
        keyflag=1;    //有效按键标志
        BEEP_ON();   //按键音
   }
else //无效的按键
  {
   keycode=0;keyflag=0;
   key_valid=0;
   BEEP_OFF();
   keycount=0;keypointer=0;
  }
}
else if(keyflag==1)  //等待按键是释放
{
keycount++;
if(keycount>=BEEPTIME)BEEP_OFF();//用于长按消音
if(keycount>=10000)keycount=0;
switch(keypointer)   
  {
   case 1:KEY_1_SCAN();break;
   case 2:KEY_2_SCAN();break;
   case 3:KEY_3_SCAN();break;
   case 4:KEY_4_SCAN();break;
  }
NOP();
if(KEY_NO)  //按键以释放
  {
   keycode=keypointer;//提取键值
   BEEP_OFF();
   if(keycount>=400)keyflag1=1;//大于4秒为长按键
   else keyflag1=2;
   keycount=0; keyflag=0; key_valid=0;keypointer=0;//计数回零
  }
}
//SFIOR|=(1<<PUD); //关闭上拉电阻
KEY_IN_DDR|=(1<<KEY_IN);
KEY_IN_PORT&=~(1<<KEY_IN);//输出低电平,防止按键干扰lcd读写 20120103
KEY_OUT_PORT|=(1<<KEY_OUT_1)|(1<<KEY_OUT_2)|(1<<KEY_OUT_3)|(1<<KEY_OUT_4);//恢复原来的高电平状态
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-6-24 19:15:06 | 显示全部楼层
兄弟  汇编版本的  你有没有搞过啊??

出0入0汤圆

 楼主| 发表于 2013-7-23 20:34:12 | 显示全部楼层
Hale_123 发表于 2013-6-24 19:15
兄弟  汇编版本的  你有没有搞过啊??

原来搞过一点点51的汇编
avr的汇编没有搞过

出0入0汤圆

发表于 2013-7-24 09:01:48 | 显示全部楼层
用LCD数据线作按键输入不错
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表