微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 计数器(状态机按键检测)程序

计数器(状态机按键检测)程序

时间:12-01 来源:互联网 点击:

KeyValue = (~KEY_PORT) & KEY_MASK;

switch(KeyStatus)
{
case KEY_SEARCH_STATUS: //按键查询状态
{
if(KeyValue)
{
KeyStatus = KEY_ACK_STATUS; //按键下一个状态为确认状态
}
return 0;
}
break;

case KEY_ACK_STATUS: //按键确认状态
{
if(!KeyValue)
{
KeyStatus = KEY_SEARCH_STATUS;
}
else
{
for(i=0;i<4;i++)
{
if(KeyValue&(1{
KeyCurPress = KEY1 + i;
break;
}
}
KeyStatus = KEY_REALEASE_STATUS;
}
return 0;
}
break;

case KEY_REALEASE_STATUS: //按键释放状态
{
if(!KeyValue)
{
KeyStatus = KEY_SEARCH_STATUS;
return KeyCurPress;
}
return 0;
}
default:
return 0;
break;
}
}
/**********************************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主题
***********************************************************/
void main(void)
{
PortInit();
TimerInit();
Timer0Start();
SegRefreshDisplayBuf();
EA = 1;
while(1)
{
SegRefreshDisplayBuf();
if(Timer0IRQEvent)
{
Timer0IRQEvent = 0;
switch(KeyRead())
{
case KEY1:
{
bSetTime = ~bSetTime;
SegCurPosMark = 0;
}
break;

case KEY2:
{
if(++SegCurPosMark>=4)
{
SegCurPosMark = 0;
}
}
break;

case KEY3:
{
if(!bSetTime)
break;
if(CounterValue>=9999)
CounterValue = 0;
if (SegCurPosMark == 0)
CounterValue += 1;
else if(SegCurPosMark == 1)
CounterValue += 10;
else if(SegCurPosMark == 2)
CounterValue += 100;
else
CounterValue += 1000;
}
break;

case KEY4:
{
if(!bSetTime)
break;
if(CounterValue<=0)
CounterValue = 9999;
if (SegCurPosMark == 0)
CounterValue -= 1;
else if(SegCurPosMark == 1)
CounterValue -= 10;
else if(SegCurPosMark == 2)
CounterValue -= 100;
else
CounterValue -= 1000;
}
break;

default:
break;
}
}
else if(Time1SecEvent)
{
Time1SecEvent = 0;
if(!bSetTime)
{
if(++CounterValue>=9999)
{
CounterValue = 0;
}
}
}
}
}
/**********************************************************
*函数名称:Timer0IRQ
*输 入:无
*输 出:无
*功 能:定时器中断函数
***********************************************************/
void Timer0IRQ(void) interrupt 1
{
TH0 = (65536 - TIMER0_INITIAL_VALUE)/256;
TL0 = (65536 - TIMER0_INITIAL_VALUE)%256;
Timer0IRQEvent = 1;

SegDisplay();

if(++TimeCount >= 200)
{
TimeCount = 0;
Time1SecEvent = 1;
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top