新手,第一次发贴。在写这段代码之前,本来给改同事写的代码,看到那代码就不想去读.所以重新写得.一个按键控制一路输出,固定频率固定占空比。
代码写得不好请大侠们,手下留情.
按键代码,按键释放后处理状态
if( f_Key_OnTimer )
{
Key_Tick++;
if ( Key_Tick>MS(100) )
{
Key_Tick = 0;
f_Key_OnTimer= false;
f_Key_Update = true;
}
return;
}
//
if ( KEY==KEY_PRESS )
{
f_Key_OnTimer = true;
}
else
{
Key_Tick = 0;
f_Key_OnTimer = false;
}
//
if ( f_Key_Update==true )
{
f_Key_Press = true;
}
if ( f_Key_Press==false )
{
return;
}
//
if ( KEY==KEY_RELEASE )
{
f_Key_Update= false;
f_Key_Press = false;
f_Key_Release = true;
}
if ( f_Key_Release==true )
{
f_Key_Release = false;
//
f_State =! f_State;
Timer.Tick= 0;
Timer.Sec = 0;
Timer.Min = SET_TIMER;
VIBRA = 1;
}
输出部分代码:表格内定义频率到周期时间
SIZE_BIT code Freq_to_hex[12]=
{
0,
FREQ(1), FREQ(2), FREQ(3), FREQ(4), FREQ(5),
FREQ(6), FREQ(7), FREQ(8), FREQ(9), FREQ(10),
FREQ(11)
};
void Init_Vibra(void)
{
Vibra.Period = Freq_to_hex[6];
Vibra.Witch = Vibra.Period>>1;
}
void Vibra_Event(void)
{
if ( f_State==false )
{
return;
}
Vibra.Tick++;
if ( Vibra.Tick>=Vibra.Period )
{
Vibra.Tick = 0;
}
else
if ( Vibra.Tick>Vibra.Witch )
{
VIBRA = 0;
}
else
{
VIBRA = 1;
}
}
主循环:定时器中断一次,处理一次主循环内的任务
void main(void)
{
Init_Key();
Init_Vibra();
Init_HardWare();
for(;;)
{
SLEEP();
if ( f_Timer_Ovf )
{
f_Timer_Ovf = false;
//
Timer_DoEvent();
Vibra_DoEvent();
Key_DoEvent();
}
}
}
一周热门 更多>