找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3617|回复: 9
收起左侧

为什么按键还原值是20?

[复制链接]
ID:183466 发表于 2018-5-16 20:43 | 显示全部楼层 |阅读模式
/********************独立按键程序*****************/
uchar key_can;         //按键值

void key()         //独立按键程序
{
        static uchar key_new;
        key_can = 20;                                //按键值还原
        P3 |= 0xf0;
        if((P3 & 0xf0) != 0xf0)                //按键按下
        {
                delay_1ms(1);                     //按键消抖动
                if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
                {                                                //确认是按键按下
                        key_new = 0;
                        switch(P3 & 0xf0)
                        {
                                case 0xd0:  key_can = 3;  break;         //得到按键值
                                case 0xb0:  key_can = 2;  break;         //得到按键值
                                case 0x70:  key_can = 1;  break;         //得到按键值
                        }
                }                        
        }
        else
        {
                key_new = 1;
        }        
}

回复

使用道具 举报

ID:164602 发表于 2018-5-17 07:28 | 显示全部楼层
你这个问题,要看你的电路原理图啊,只有程序是看不懂的。
因为你的这个程序,明显是根据电路来写的,还是个比较独特的电路,不是一般常见的电路,所以,看不到电路,就无法回答你的问题。
同时,你也可以看你的电路啊,在没有按键时,P3口是个什么状态,就可以知道还原值了。

评分

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

查看全部评分

回复

使用道具 举报

ID:330198 发表于 2018-5-17 08:26 | 显示全部楼层
key_new默认是0,所以if(((P3 & 0xf0) != 0xf0) && (key_new == 1))这步判断永远都是不成立的,也就不会走到switch那里
回复

使用道具 举报

ID:213173 发表于 2018-5-17 10:36 | 显示全部楼层
在按键函数外定义键值变量,
uchar key_can=20;         //按键值
void key()         //独立按键程序
{
        static uchar key_new;
        uchar num;
//        key_can = 20;                                //按键值还原
//        P3 |= 0xf0;
        if((P3 & 0x70) != 0x70)                //按键按下   P3次高3位 x111 xxxx位3个按键端口
        {
                delay_1ms(10);                     //按键消抖动  10ms
                if(((P3 & 0x70) != 0x70) && (key_new == 1))
                {                                                //确认是按键按下
                        key_new = 0;
                        num = P3 & 0x70;
                        switch(num)
                        {
                                case 0x30:  key_can = 3;  break;         //得到按键值
                                case 0x50:  key_can = 2;  break;         //得到按键值
                                case 0x60:  key_can = 1;  break;         //得到按键值
                        }
                }                        
        }
        else
        {
                key_new = 1;
        }        
}
回复

使用道具 举报

ID:224683 发表于 2018-5-17 12:38 来自手机 | 显示全部楼层
这个数值只要避开功能键值就行
回复

使用道具 举报

ID:241128 发表于 2018-5-17 13:04 | 显示全部楼层
zhanghyg 发表于 2018-5-17 08:26
key_new默认是0,所以if(((P3 & 0xf0) != 0xf0) && (key_new == 1))这步判断永远都是不成立的,也就不会走 ...

你没看仔细,按键没按下时key_new的值一直为1
else
{
key_new=1;
}
回复

使用道具 举报

ID:241128 发表于 2018-5-17 13:08 | 显示全部楼层
key_can=20;放的位置不对,其实这个值改变过,时间很短,马上又被你赋值为20了。你自己看看是不是,把他移到全局定义那里就可以了。
回复

使用道具 举报

ID:332178 发表于 2018-5-17 15:30 | 显示全部楼层
key_new默认是0,所以if(((P3 & 0xf0) != 0xf0) && (key_new == 1))这步判断永远都是不成立的,也就不会走到switch那里
回复

使用道具 举报

ID:330198 发表于 2018-5-17 16:00 | 显示全部楼层
fzhlpp 发表于 2018-5-17 13:04
你没看仔细,按键没按下时key_new的值一直为1
else
{

你这个子程序是一直循环还是只执行一次?只一次就是我说的,要是一直循环就是赋值问题。
回复

使用道具 举报

ID:332386 发表于 2018-5-17 18:23 | 显示全部楼层
if(((P3 & 0xf0) != 0xf0) && (key_new == 1))这步判断永远都是不成立的,也就不会走到switch那里
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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