用户注册 | 登录 | 帮助中心 | 网站地图 | 加入收藏 | English

网站首页 产品列表 软件下载 技术资料 付款方式 发货查询 关于我们 淘宝商城 论坛
搜索 高级/组合搜索
网站文章
所有文章
站内新闻
单片机工具资料
汇编程序实例
C语言程序实例
单片机提高资料
单片机初学资料
单片机软件下载
单片机技术资料
  您的位置: 首页 >> 文章列表 >> 按键处理与按键防抖动例子
按键处理与按键防抖动例子

作者:单片机爱好者  转载自:单片机工具之家  发布日期:2011-4-17

1:不使用INTn中断功能,按键接在普通IO上
2:由定时器T/C2每隔一段时间检测按键一次, 并具有防抖动功能
3:每点击按键一次,在按键松开后,变量A=A+1
4:如果按键按下后不放,则每隔 n ms 就做A=A+1运算一次
5:在按键按下期间,CPU除了处理按键外,还必须能正常运行主程序  
6:本程序的系统时钟是1MHz
*****************************************************/

#include <mega48.h>
#include <delay.h>
#include <nokia3310.h>

unsigned char A,B;
unsigned char n;
bit step1, step2, step3,step4;                     //使用几个位变量记忆按键状态
   
//***************************************************
interrupt [10] void TC2_OVF(void)
{
  if(n<255) n++;                  
  if(PIND.2==1 && n>8) step1=1;                    //按键松开一定时间后开始进入可用状态
  if(PIND.2==0 && step1) {step1=0; step2=1; n=0;}  //按键由可用状态进入到按下状态
  if(PIND.2==1 && step2) {step2=0; step3=1; n=0;}  //按键由按下状态进入到松开状态 
 
  //-------------------------------------------------  
                                                   //按键按下后...
  if(step2)
  {
    n++;
    if(n>60)                                       //如果按下超过一定时间
    {
      A+=1;
      n=40;
      step4=1;
    }
  }  
 
  //------------------------------------------------- 
 
  if(step3)                                        //按键松开后...
  {
    step3=0;
    if(step4) step4=0; else A+=1;
  }
}

//***************************************************
//www.avrdiy.com panxiaoyi
void main(void)
{  
  PORTB&=209;      
  DDRB|=46;                                        //设置单片机的4个LCD引脚输出0       
  lcd_init();                                      //lcd初始化               
  lcd_cls();                                       //清屏,光标回位    
 
  DDRD.2=0;
  PORTD.2=1;                                       //PD2设置为输入,上拉电阻有效(接按键) 
  TCCR2B|=4;                                       //T/C2采用系统时钟的64分频
  #asm("sei");                                     //全局中断使能
  TIMSK2|=1;                                       //T/C2计数溢出中断使能 

  while (1)
  {  
    B+=1;    
    lcd_gotoxy(12,1);
    lcd_putsf("AVRDIY.COM",10); 
    
    lcd_gotoxy(15,3);
    lcd_putchar(B/100+48);                         //显示变量B
    lcd_putchar(B/10%10+48);
    lcd_putchar(B%10+48);
   
    lcd_gotoxy(52,3); 
    lcd_putchar(A/100+48);                         //显示变量A
    lcd_putchar(A/10%10+48);  
    lcd_putchar(A%10+48);    
  };
}

【版权声明】
  1. 任何网站转载本站内容必需注明“来源:单片机工具之家”。
  2. 本网转载自其它媒体的信息,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
  3. 未经本站明确许可,任何网站不得非法盗链软件下载连接及抄袭本网站原创内容资源。
  4. 违反上述声明者,本网将追究其相关法律责任。谢谢!


关于我们
网站介绍
联系我们
付款方式
银行汇款
货到付款
发货方式
快递运输
上门自提
售后服务
退换货政策
质保承诺
购买方式
购物流程
在线订购

公司名称:深圳市乾龙盛电子科技有限公司    网站名称:单片机工具之家
公司地址:广东省深圳市宝安区龙华镇民治路潜龙花园惠宁阁13-G   联系电话:0755-28187975  13715306011  传真:0755-28187976
展销柜台:广东省深圳市福田区新亚洲电子商城二期三楼N3D033室(华强电子世界附件)【查看地图】   联系电话:0755-82543360
:淘宝商店   :qls@cxqmcu.com   :qls@cxqmcu.com
销售点击Q我:243355504 (唐永红)先生   技术支持点击Q我:443935535 (钟先生)
网站版权:单片机工具之家  粤ICP备09028690号