void main (void)
{
unsigned char num=0;
key0=1;
key1=1; //按键输入端口电平置高
key2=1;
//key3=1;
Init_
timer0();
while (1) //主循环
{
if(!key0)
{
DelayMs(10);
if(!key0)
{
while(!key0);
num++;
if(num==4)
{
num=0;
}
}
}
if(num==1)
{
TempData[6]=dofly_DuanMa[s/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[7]=dofly_DuanMa[s%10];
DelayMs(250);
DelayMs(250);
TempData[6]=0;
TempData[7]=0;
DelayMs(250);
DelayMs(250);
}
TempData[6]=dofly_DuanMa[s/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[7]=dofly_DuanMa[s%10];
TempData[5]=0x40;
if(num==2)
{
TempData[3]=dofly_DuanMa[m/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[4]=dofly_DuanMa[m%10];
DelayMs(250);
DelayMs(250);
TempData[3]=0;
TempData[4]=0;
DelayMs(250);
DelayMs(250);
}
TempData[3]=dofly_DuanMa[m/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[4]=dofly_DuanMa[m%10];
TempData[2]=0x40;
if(num==3)
{
TempData[0]=dofly_DuanMa[h/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[1]=dofly_DuanMa[h%10];
DelayMs(250);
DelayMs(250);
TempData[0]=0;
TempData[1]=0;
DelayMs(250);
DelayMs(250);
}
TempData[0]=dofly_DuanMa[h/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[1]=dofly_DuanMa[h%10];
// Display(0,8); //显示全部8位
//主循环中添加其他需要一直工作的程序
}
}
num值0~1的变换轻按按键key0即可,1~2,2~3则需重按key0,这应该也不是DelayMS()的问题,我改变过DelayMS()的值,也没有解决上述问题!会不会是后面的执行程序太多而耽误的问题呢?
当你 num = 0 是, 后续的程序不成立, 那么程序有足够时间 去响应按键。 当num = 1,2,3,程序不断进入Delay。阻塞性的延时,程序自然不会实时响应按键啦。
对策:
1) 短按按键 改为 长按按键
2) 增加 按键标记, 只有按键按下的时候才执行 需要执行的代码 ( 见以下代码 )
3) 改用 状态机
希望这些有帮助
- void main (void)
- {
- unsigned char num=0;
- unsigned char keyPressFlag = 0; <span style="line-height: 27.2000007629395px;">// <--------------加这一句</span>
-
- key0=1;
- key1=1; //按键输入端口电平置高
- key2=1;
- //key3=1;
- Init_Timer0();
- while (1) //主循环
- {
- if(!key0)
- {
- DelayMs(10);
- if(!key0)
- {
- while(!key0);
- keyPressFlag = 1; // <--------------加这一句
- num++;
- if(num==4)
- {
- num=0;
- }
- }
- }
- if( num==1 && keyPressFlag ) <span style="line-height: 27.2000007629395px;">// <--------------加这一句</span>
- {
- keyPressFlag = 0; <span style="line-height: 27.2000007629395px;">// <--------------加这一句</span>
- TempData[6]=dofly_DuanMa[s/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
- TempData[7]=dofly_DuanMa[s%10];
- DelayMs(250);
- DelayMs(250);
- TempData[6]=0;
- TempData[7]=0;
- DelayMs(250);
- DelayMs(250);
- }
- TempData[6]=dofly_DuanMa[s/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
- TempData[7]=dofly_DuanMa[s%10];
- TempData[5]=0x40;
- if( num==2 && keyPressFlag ) <span style="line-height: 27.2000007629395px;">// <--------------加这一句</span>
- {
- keyPressFlag = 0; <span style="line-height: 27.2000007629395px;">// <--------------加这一句</span>
- TempData[3]=dofly_DuanMa[m/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
- TempData[4]=dofly_DuanMa[m%10];
- DelayMs(250);
- DelayMs(250);
- TempData[3]=0;
- TempData[4]=0;
- DelayMs(250);
- DelayMs(250);
- }
- TempData[3]=dofly_DuanMa[m/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
- TempData[4]=dofly_DuanMa[m%10];
- TempData[2]=0x40;
- if( num==3 && keyPressFlag ) <span style="line-height: 27.2000007629395px;">// <--------------加这一句</span>
- {
- keyPressFlag = 0; <span style="line-height: 27.2000007629395px;">// <--------------加这一句</span>
- TempData[0]=dofly_DuanMa[h/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
- TempData[1]=dofly_DuanMa[h%10];
- DelayMs(250);
- DelayMs(250);
- TempData[0]=0;
- TempData[1]=0;
- DelayMs(250);
- DelayMs(250);
- }
- TempData[0]=dofly_DuanMa[h/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
- TempData[1]=dofly_DuanMa[h%10];
- // Display(0,8); //显示全部8位
- //主循环中添加其他需要一直工作的程序
- }
- }
复制代码最佳答案
按键是一个触发动作
一周热门 更多>