找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6623|回复: 5
收起左侧

用按键控制两位数码管显示 不正常求解

[复制链接]
ID:60872 发表于 2015-6-10 15:17 | 显示全部楼层 |阅读模式
本人刚学单片机不久。
程序如下,一些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);
        }

}
这是我在论坛搜到的 和我遇到的问题一样 我直接复制过来了 不当之处请作者谅解,我也是着急寻求解决答案!!


回复

使用道具 举报

ID:82823 发表于 2015-6-12 14:50 | 显示全部楼层
因为你的按下按键以后,while循环就卡在按键扫描那里了,而你的数码管应该是用动态扫描的吧?所以就不再刷新了。一种比较好的方法,就是用原子STM32那种按键扫描,可以解决很多问题。

评分

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

查看全部评分

回复

使用道具 举报

ID:60872 发表于 2015-6-13 09:57 | 显示全部楼层
用定时器 中断也可以解决这个问题,但是除了用这种方法还有没有其他更好的方法啊  ???请大神们指点指点啊   我这个菜鸟!!

评分

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

查看全部评分

回复

使用道具 举报

ID:74245 发表于 2015-6-13 11:06 来自手机 | 显示全部楼层
,当你长按不松手时停在while那里了,在while(!key32)后面加上数码管显示程序,这样当你长按按键时也会两个数码管一起显示。

评分

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

查看全部评分

回复

使用道具 举报

ID:81118 发表于 2015-6-13 21:27 | 显示全部楼层
第一政委 发表于 2015-6-13 09:57
用定时器 中断也可以解决这个问题,但是除了用这种方法还有没有其他更好的方法啊  ???请大神们指点指点 ...

不用while(!key32)咯

评分

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

查看全部评分

回复

使用道具 举报

ID:468209 发表于 2019-12-3 11:14 来自手机 | 显示全部楼层
随然这帖很久 但我也是这问题  新学的  不知怎改啊  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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