找回密码
 立即注册

QQ登录

只需一步,快速开始

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

按下独立按键,数码管不亮。请各位看下哪里出错了。谢谢。

  [复制链接]
跳转到指定楼层
楼主
ID:60914 发表于 2014-4-20 21:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人刚学单片机不久。
程序如下,一些I0口定义没有给出。
程序运行没错,烧入单片机可以运行,按下key32也能计数。
唯一的问题是:当我按下key32时,按理说应该两个数码管都亮,但是仅有显示个位数的数码管亮。当松手时,两个数码管又都亮了。
想请教下各位,这是为什么?

void keyscan()//key32为独立按键。每按key32一次,num加1。达到60时,置0。
{
        if (key32==0)
        {
                delay(10);
                if (key32==0)
                {
                        num++;
                        if(num==60)
                                num=0;
                        while(!key32);   
                }       
        }

}

void display(num)//用两个数码管显示num的值。
{
        P0=0xff;//关闭所有显示,防止混乱
        wela=1;
        P0=0xfe;
        wela=0;
        dula=1;
        P0=smg[num%100/10];//十位数
        dula=0;
        delay(5);

        P0=0xff;//关闭所有显示,防止混乱
        wela=1;
        P0=0xfd;
        wela=0;
        dula=1;
        P0=smg[num%10];//个位数
        dula=0;
        delay(5);
}

void main()//主程序
{
        while(1)
        {       
                keyscan();
                display(num);
        }

}

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

使用道具 举报

沙发
ID:60076 发表于 2014-4-20 22:03 | 只看该作者
因为你在按下的时候 程序一直在  while(!key32);   这里死循环
回复

使用道具 举报

板凳
ID:60914 发表于 2014-4-21 09:37 | 只看该作者
liumei 发表于 2014-4-20 22:03
因为你在按下的时候 程序一直在  while(!key32);   这里死循环

这不是松手检测吗?我看网上都是这么写的。
如果这样不行的话,请问应该怎么改?
回复

使用道具 举报

地板
ID:60914 发表于 2014-4-21 10:03 | 只看该作者
单片机我也是从本论坛的淘宝链接买的。买回后,附带的程序“独立键盘”中,关于检测部分也是这么写的:
                if(key1==0)                  //如果键按下
                {
                        delay(5);
                        if(key1==0)              //延时后在判断键是否按下
                        {
                                i++;                 //按下一次加1
                                if(i>=10)i=0;        //最大值为9
                        }
                        while(!key1);            //松手检测
                }

还请高人指点。
回复

使用道具 举报

5#
ID:60914 发表于 2014-4-21 17:59 | 只看该作者
经高人指点,问题已经解决。
结贴。
回复

使用道具 举报

6#
ID:60914 发表于 2014-4-23 21:42 | 只看该作者
终于实现了该算法了。
回复

使用道具 举报

7#
ID:63752 发表于 2014-7-8 11:19 | 只看该作者
这个按键会不会有时行,有时不行的情况?我写了这程序,控制一个LED亮,按键都不怎么灵活的,有时行,有时不行,这能帮忙解决一下问题吗?
回复

使用道具 举报

8#
ID:64484 发表于 2014-8-6 16:27 | 只看该作者
hinata 发表于 2014-4-21 17:59
经高人指点,问题已经解决。
结贴。

什么原因
回复

使用道具 举报

9#
ID:60872 发表于 2015-6-10 15:04 | 只看该作者
是啊   是什么原因啊!我也刚学 也遇到一样的问题,大侠告诉一声 怎么解决的啊?
回复

使用道具 举报

10#
ID:83527 发表于 2015-6-20 21:59 | 只看该作者
while(1);     是跳不出循环的,还有写的比较乱。建议去学一下别人怎么写的吧
回复

使用道具 举报

11#
ID:147702 发表于 2016-11-13 21:49 | 只看该作者
是怎么解决的啊?   我的现在也是这样
回复

使用道具 举报

12#
ID:147702 发表于 2016-11-13 21:49 | 只看该作者
求分享下怎么解决啊
回复

使用道具 举报

13#
ID:148131 发表于 2016-11-19 16:10 | 只看该作者
没有跳出循环啊
回复

使用道具 举报

14#
ID:160925 发表于 2017-1-9 12:56 | 只看该作者
在  while(!key1)按下后,如果不松开的话会一直停在这里,程序停在这里的同时,数码管动态扫描也就停止了,所以会出现上述情况,可以这样写  while(!key1)display(num);//松手检测,就可以了。顺便说一下楼主太不厚道,不知道论坛上最可贵的就是分享吗?有问题来问,解决了却不说了。人人为我我为人人的互联网精神还是要发扬的。
回复

使用道具 举报

15#
ID:149144 发表于 2017-1-13 16:26 | 只看该作者
你按键按下去的时候 display(num); 就没跑,一直在跑你的按键检测程序,只是保持了 之前的显示状态。其实在你按下按键的瞬间可能
感觉中断做会好一点
回复

使用道具 举报

16#
ID:149144 发表于 2017-1-13 16:28 | 只看该作者
那一瞬间可能单片机就没有检测到你“按键”了,只是扫描时间短,很快就运行到你的按键检测程序 他才知道你“按”了
回复

使用道具 举报

17#
ID:380532 发表于 2018-8-9 13:13 | 只看该作者
kidhan 发表于 2017-1-9 12:56
**** 作者被禁止或删除 内容自动屏蔽 ****

谢谢           
回复

使用道具 举报

18#
ID:412227 发表于 2018-10-19 22:41 | 只看该作者
kidhan 发表于 2017-1-9 12:56
**** 作者被禁止或删除 内容自动屏蔽 ****

您好;我是刚学单片机的,有空的话想向您学习学习,不知老师是否愿意同在下交流呢
回复

使用道具 举报

19#
ID:417322 发表于 2018-10-29 18:02 来自手机 | 只看该作者
怎么学好程序?
回复

使用道具 举报

20#
ID:683360 发表于 2020-9-25 18:38 | 只看该作者
死循环出不来了啊  兄弟
回复

使用道具 举报

21#
ID:779388 发表于 2020-9-25 22:41 | 只看该作者
kidhan 发表于 2017-1-9 12:56
**** 作者被禁止或删除 内容自动屏蔽 ****

这是正解,必须要在检测按键释放的时候调用动态显示程序,才能在按键释放前正常显示。
回复

使用道具 举报

22#
ID:815949 发表于 2021-3-1 21:18 | 只看该作者
启用中断,在中断中调用显示子程序,这个是正解,拿走不谢!
回复

使用道具 举报

23#
ID:105364 发表于 2021-3-1 22:18 | 只看该作者
kidhan 发表于 2017-1-9 12:56
**** 作者被禁止或删除 内容自动屏蔽 ****

非常赞同您的说法,经常在论坛看到这种现象
回复

使用道具 举报

24#
ID:939423 发表于 2021-7-19 15:34 | 只看该作者
检查一下你的按键检测和按键消抖
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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