找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1781|回复: 5
打印 上一主题 下一主题
收起左侧

单片机C语言按键调整延时变量的问题

[复制链接]
跳转到指定楼层
楼主
延时通过按键调不上去是怎么回事。按键增加延时我这设置的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;}


}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
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 编辑

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









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

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表