找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机按键点亮LED灯条的程序问题,为什么放直接在while(1)中就不行呢?

查看数: 2492 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-3-23 21:00

正文摘要:

按键点亮LED灯条,键号越大点亮的越多。在主函数中 , P2=LED2;P3=LED3;  放在if(key!=-1)中才可以保持按键值,否则按键弹上去后就恢复到原始状态,为什么放直接在while(1)中就不行呢

回复

ID:332444 发表于 2020-3-24 11:07
从道理来讲,LED保存的值只有在按键按下时会被修改,因此,不存在按键判断外被修改的可能,因此,是可以放在按键判断外.
之所以看到按键按下与释放不同的结果,是因为循环太快的缘故,当放下按键时的值可能是随机的.

评分

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

查看全部评分

ID:704397 发表于 2020-3-24 10:35
xianfajushi 发表于 2020-3-24 08:37
单独把 P2=LED2;                         P3=LED3;放在  if(key!=-1)外应该可以,出虾米问题?

如果直接放在外面,LED只有在按下键不松开的时候才亮,键弹上来后就又恢复到原始灭的状态
ID:704397 发表于 2020-3-24 10:34
本帖最后由 DEVOTION 于 2020-3-24 10:38 编辑
黎明初至 发表于 2020-3-24 08:47
你的逻辑编写有问题,key_scan()中仔细看看
                        for(j=0;j

hcode的初值是0xfe,设在for循环外面的,如果 按下的行不是P1.0,就会执行else,hcode的值左移
ID:697917 发表于 2020-3-24 08:47
你的逻辑编写有问题,key_scan()中仔细看看
                        for(j=0;j<4;j++)
                        {
                               P1=hcode;
                                if((P1&0xf0)!=0xf0)
                                {
                                        zcode=~P1;     //取反判断行坐标
                                        for(i=0;i<16;i++)
                                        {
                                                if(zcode==table)
                                                        return i;
                                        }
                                }        
                                else
                                        hcode=_crol_(hcode,1);   
                        }

循环下 P1=hcode;每次都重新赋值,那4次扫描有什么不同。
ID:332444 发表于 2020-3-24 08:37
单独把 P2=LED2;                         P3=LED3;放在  if(key!=-1)外应该可以,出虾米问题?

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

Powered by 单片机教程网

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