找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主

如图:按键是接到P0口上面的


我这样写程序能读出P0口的状态吗?

经过开发板测试发现,读不出来,请高手指点一下为什么?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2021-10-16 16:14 | 只看该作者
不可能读不到,无论是0,是1,总会读到一个值的。怎么能说读不到呢?
回复

使用道具 举报

板凳
ID:964308 发表于 2021-10-16 18:43 | 只看该作者
这种4x4矩阵键盘好像不能直接读数据,需要逐行扫描,先把扫描行置0,然后检测按键,看看哪个列为0,才能判断第几行第几列,应该是这样的
回复

使用道具 举报

地板
ID:419909 发表于 2021-10-16 19:03 | 只看该作者
这个读不了的
试试下面的:
switch(P0|0x00)
回复

使用道具 举报

5#
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;
                                }
                        }
                }
}
回复

使用道具 举报

6#
ID:450037 发表于 2021-10-18 08:06 | 只看该作者
yzwzfyz 发表于 2021-10-16 16:14
不可能读不到,无论是0,是1,总会读到一个值的。怎么能说读不到呢?

就读不了,你说奇怪不
是不是跟单片机扫描有关系
回复

使用道具 举报

7#
ID:450037 发表于 2021-10-18 08:09 | 只看该作者
dzc3458 发表于 2021-10-16 18:43
这种4x4矩阵键盘好像不能直接读数据,需要逐行扫描,先把扫描行置0,然后检测按键,看看哪个列为0,才能判 ...

确实是不能直接读数据,但是觉得不应该啊,为什么会读取不了数据呢
回复

使用道具 举报

8#
ID:450037 发表于 2021-10-18 10:38 | 只看该作者
xuyaqi 发表于 2021-10-16 19:27
给个参考:

void Getch ( )        //取键值函数

也不行,但是可以读取出行的数据,比如,第一行,程序显示01111111,第二行10111111,第三行11011111第四行就是11101111。但是具体哪个按键按下去的,它反应不出来,怎么回事啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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