找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

无法读取单片机P0口各个位的状态

查看数: 2820 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-10-16 15:50

正文摘要:

我这样写程序能读出P0口的状态吗? 经过开发板测试发现,读不出来,请高手指点一下为什么?

回复

ID:450037 发表于 2021-10-18 10:38
xuyaqi 发表于 2021-10-16 19:27
给个参考:

void Getch ( )        //取键值函数

也不行,但是可以读取出行的数据,比如,第一行,程序显示01111111,第二行10111111,第三行11011111第四行就是11101111。但是具体哪个按键按下去的,它反应不出来,怎么回事啊
ID:450037 发表于 2021-10-18 08:09
dzc3458 发表于 2021-10-16 18:43
这种4x4矩阵键盘好像不能直接读数据,需要逐行扫描,先把扫描行置0,然后检测按键,看看哪个列为0,才能判 ...

确实是不能直接读数据,但是觉得不应该啊,为什么会读取不了数据呢
ID:450037 发表于 2021-10-18 08:06
yzwzfyz 发表于 2021-10-16 16:14
不可能读不到,无论是0,是1,总会读到一个值的。怎么能说读不到呢?

就读不了,你说奇怪不
是不是跟单片机扫描有关系
ID:94031 发表于 2021-10-16 19:27
给个参考:

void Getch ( )        //取键值函数
{
        unsigned char X,Y,Z;
        P0=0x0f; //先对P0 置数 行扫描
        if(P0!=0x0f) //判断是否有键按下
        {
                delay10ms(); //延时,软件去干扰
                if(P0!=0x0f) //确认按键按下
                {
                                X=P0; //保存行扫描时有键按下时状态
                                P0=0xf0; //列扫描
                                Y=P0;    //保存列扫描时有键按下时状态
                                Z=X|Y; //取出键值
               
                                switch ( Z ) //判断键值(那一个键按下)
                                {
                                        case 0xee: k=0; break; //对键值赋值
                                        case 0xed: k=1; break;
                                        case 0xeb: k=2; break;
                                        case 0xe7: k=3; break;
                                        case 0xde: k=4; break;
                                        case 0xdd: k=5; break;
                                        case 0xdb: k=6; break;
                                        case 0xd7: k=7; break;
                                        case 0xbe: k=8; break;
                                        case 0xbd: k=9; break;
                                        case 0xbb: k=10;break;
                                        case 0xb7: k=11;break;
                                        case 0x7e: k=12;break;
                                        case 0x7d: k=13;break;
                                        case 0x7b: k=14;break;
                                        case 0x77: k=15;break;
                                }
                        }
                }
}
ID:419909 发表于 2021-10-16 19:03
这个读不了的
试试下面的:
switch(P0|0x00)
ID:964308 发表于 2021-10-16 18:43
这种4x4矩阵键盘好像不能直接读数据,需要逐行扫描,先把扫描行置0,然后检测按键,看看哪个列为0,才能判断第几行第几列,应该是这样的
ID:123289 发表于 2021-10-16 16:14
不可能读不到,无论是0,是1,总会读到一个值的。怎么能说读不到呢?

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

Powered by 单片机教程网

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