刚学AVR,做一个按键判断好多天了,大脑越来越乱,求大神们给小弟指点迷津。
我现在在写这么一个程序,我有四个按键,按下A、B、C,每按一次加一次把按键值储存起来,
按下D,则开始运行主程序,再按下D则跳出主程序。对中断表示无法理解怎么用,找资料折腾出了按键判断和键值返回,后面就不知道怎么才能把按键值可以存起来,怎样才能按下KEY4就能随意进出主程序,还请大神给帮帮忙啊,万分感谢。做广告培训班的就别留言了,苦逼小屌丝没钱只能自学。我的代码如下
#include <iom8v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#pragma data:code
uchar u,p,m;
flash table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff};
void delay(uint ms)
{
uint k,j;
for(k=0;k<ms;k++)
{
for(j=0;j<11;j++);
}
}
uchar key_scan()
{
uchar key;
delay(5);
if(key_press())
{
key=PINC;
key&=0x0f;
switch(key)
{
case 0X0e:
key=3;
break;
case 0x0d:
key=4;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=1;
break;
default:
key=5;
}
while(key_press());
delay(10);
}
else
{
key=5;
}
return key;
}
uchar key_press()
{
uchar i;
DDRC|=0X0F;
PORTC|=0X0F;
DDRC&=0XF0;
i=PINC;
i&=0X0F;
if(i==0X0F)
return 0;
else
return 1;
}
//uchar key_store()
//{
// if(key==4)
// if(key_press())
// u++;
//}
void show(uint h)
{
PORTD=0xff;
PORTC&=0xe0;
PORTD=table[h];
delay(1);
PORTC|=0x10;
PORTC&=0xd0;
PORTD=table[h];
delay(1);
PORTC|=0x20;
}
void main()
{
DDRD=0Xff;
PORTD=0x7e;
DDRC=0xf0;
PORTC=0xff;
//u=key_store;
key_press();
m=key_scan();
while(m==4)
{
m=key_scan();
if(m==4)
{
PORTD=0x7d;
delay(5000);
}
PORTD=0x7e;
delay(5000);
}
} |