打印
[AVR单片机]

如何实现准确响应按键并且不影响数码管显示

[复制链接]
3431|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
麻辣鸭脖子|  楼主 | 2010-4-3 22:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求实现按住按键不放到一定时间时响应频率增加,红色字体部分为判断语句,现在的问题就是当按住不放的时候不能实现响应速度增加效果,请大师们帮忙提点,谢谢
//ICC-AVR application builder : 2010-4-1 12:16:35
// Target : M16
// Crystal: 4.0000Mhz

#include <iom16v.h>
#include <macros.h>

void port_init(void)
{
PORTA = 0xFF;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0xFF; //m103 output only
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x00;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();

MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
#define uchar unsigned char
#define uint unsigned int
#define right 0X80
#define left 0X40
uchar codetable[]={0X14,0X9F,0X38,0X1A,0X93,0X52,0X50,0X1F,0X10,0X12};
uchar count=0,x=20,y=0,z=0;

void delay1()//显示延迟程序
{
unsigned int   c,d;
for(c=1000;c>0;c--);
{for(d=10000;d>0;d--);}
}

void display()//显示程序
{
PORTA=left|right;//关显示
PORTC=codetable[a/10];
PORTA=left;
delay1();
PORTA=left|right;//关显示
PORTC=codetable[a%10];
PORTA=right;
delay1();
}

void delay()//去抖程序
{
for(x;x>0;x--)
{
display();
}
}

void anniu()//计数
{

if((PINB&0X01)==0X00) //判断按键
{
count++;
z=count;
if((10<(z-y))&&(10<x)) //判断按下时间调整响应时间,调节由x传递范围为10~20
{
x--;
delay(x);
}

else
{
x=20;
delay();
}
}
display();
}
void main(void)
{
init_devices();       //初始化
while(1)
{y=count;
if(count<100)//当计数到99时返回0
anniu();
else
count=0;
}
}

相关帖子

沙发
麻辣鸭脖子|  楼主 | 2010-4-3 22:11 | 只看该作者
2位数码管单按键计数0-99,如何实现准确响应按键并且不影响数码管显示。

使用特权

评论回复
板凳
thf2008| | 2010-4-3 23:05 | 只看该作者
不懂,进来学习一下

使用特权

评论回复
地板
ouhf| | 2010-4-5 20:51 | 只看该作者
把你的显示程序display()
用定时中断去处理.

使用特权

评论回复
5
huguang0218| | 2010-4-8 17:53 | 只看该作者
把你的显示程序display()
用定时中断去处理.
ouhf 发表于 2010-4-5 20:51

这样可以的!

使用特权

评论回复
6
ershisi| | 2010-4-8 21:19 | 只看该作者
响应中断的过程,数码管还在显示?

使用特权

评论回复
7
liao_fangxing| | 2010-4-9 11:22 | 只看该作者
本帖最后由 liao_fangxing 于 2010-4-9 11:23 编辑

视觉有0.1s的延时…………这够你N次中断了
  ………………个人不习惯延时 而习惯用定时器对按键消抖

使用特权

评论回复
8
麻辣鸭脖子|  楼主 | 2010-4-9 12:40 | 只看该作者
好的,谢谢各位

使用特权

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

本版积分规则

0

主题

454

帖子

1

粉丝