|
这个程序是大三的时候写的了,现在都有1年了。今天看到马老师的关于按键,状态机的帖子,吧自己的程序拿出来。和大家讨论。
硬件是http://www.amobbs.com/forum.php? ... 0%E4%B8%80%E7%BB%9D 根据这个帖子设计的。
程序是一段时间,具体忘记了进入定时器中断,改变state这个变量
unsigned char get_key( void)
{
static unsigned char key_count=0,i,key_value=0;
unsigned char j,key_value2=0;
if(state==1)
{
state=0;
if(key_value==0)
{
for(i=0;i<5;i++)
{
KEY_DDR=keynum;
KEY_PORT=~keynum;
if(KEY_PIN!=(KEY_PIN|(~keynum& 0x1F)))
{
key_value= (~( (i+1) <<5) ) &(~( (~(KEY_PIN | keynum)) & 0x1F )) ;
break;
}
}
}
else
{
key_value2=key_value;
key_value= (~( (i+1) <<5) ) &(~( (~(KEY_PIN | keynum)) & 0x1F )) ;
if(key_value==key_value2)
{
if(key_count>=10)
{
key_count=0;
key_value=0;
return key_value2;
}
key_count++;
}//4if
else
key_value=0;
return 1;
}
}
return 0;
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
static unsigned char count=0;
count++;
TCNT0 = 0xD6; //reload counter value
if(doorstate==0)
{
if (!check())
{
doorclose();
mode=0;
}
}
if(count>=250)
{
second=1;
count=0;
}
else
{
second=0;
state=1;
}
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|