登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看2480|回5|收藏
楼主 ID:956872 只看他
2021-8-23 10:19
延时通过按键调不上去是怎么回事。按键增加延时我这设置的2000以下,最高应该能调到2000的延时,但仿真的时候延时感觉1000都加不到,点了几次增加延时按键,延时固定在那不增加了。达不到预期设定值。
int delaynum=100;
void delayms(int k)
{
        int i,y;
        for(i=k;i>0;i--)
        for(y=120;y>0;y--);
}

void key()
{
        if(key1==0)
        {delayms(20);
          if(key1==0)
        {if(delaynum<=2000)
                delaynum=delaynum+50;  //按键增加延时
        }
        while(!key1);}
        if(key2==0)
        {        delayms(20);
          if(key2==0)
        {if(delaynum>1)
                delaynum=delaynum-50;   //按键减少延时
         }
}
void main()
{   
          long p=0x7fffffff;


             char i;         
                        for(i=32-delayj;i<32;i++)
                                {key();                             //按键扫描
                                 led595(p=p<<1);            //位移函数
                                 delayms(delaynum);        //延时函数
                                 P0=0xf0;                       //LED灯
                              if(num!=3)                       //外部中断
                                {return;}


}
沙发 ID:161164 只看他
2021-8-23 11:07
你贴的代码没有问题
delaynum用在哪里?
有时候,问题不是在计算那里,而是在使用那里
代码贴全一点,然后在有疑问的地方打上标记(红字或//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)
板凳 ID:956872 只看他
2021-8-23 12:37

引用:

lkc8210 发表于 2021-8-23 11:07
你贴的代码没有问题
delaynum用在哪里?
有时候,问题不是在计算那里,而是在使用那里

全部代码太长了,没分模块。void delayms(delaynum) 就是用在延时函数里的,按键加减仿真是有效果,就是加的话加不到2000,看流水灯速度可能延时加到1000都没到就加不上去了
地板 ID:161164 只看他
2021-8-24 14:23
本帖最后由 lkc8210 于 2021-8-24 14:42 编辑

用你更新了的代码加加减减去仿真(你的代码缺了很多东西,根本编译不了)
终于发现了问题
0x03b6=950
0x03E8=1000

0x0418=1050

0x06b6=1705

0x0708=1800

delaynum是可以加上去的,
只是delay太长,程序扫描不到你按键那一下,令你以为是delaynum加不上去

说了很多次不要用长时间的delay,
delay有多长,按下时间就要多长,以确保程序扫到你按键

5# ID:956872 只看他
2021-8-25 10:42

引用:

lkc8210 发表于 2021-8-24 14:23
用你更新了的代码加加减减去仿真(你的代码缺了很多东西,根本编译不了)
终于发现了问题

你说因为Delay太长程序扫描不到按键那一下,那前几次按下的每次都是有效的啊,就是前几次按了之后,感觉按下就加不上去了
6# ID:161164 只看他
2021-8-25 11:31

引用:

PEB188 发表于 2021-8-25 10:42
你说因为Delay太长程序扫描不到按键那一下,那前几次按下的每次都是有效的啊,就是前几次按了之后,感觉 ...

因为前几次delay时间短,足以扫到按键那一下
而且变慢的效果明显
但随着delay的增加
变慢的效果不明显
而且按十几次,只有一两次扫到
如按十次从1000增加到了1100 和 1300
就很难看的出有增加
除非用示波器检测
还是那一句,不要用长时间delay

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版