找回密码
 立即注册

QQ登录

只需一步,快速开始

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

矩阵键盘问题?

[复制链接]
跳转到指定楼层
楼主
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]=
{
         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
};
uchar Pre_KeyNO = 16,KeyNO = 16;

void DelayMS(uint ms)
{
         uchar t;
        while(ms--)
        {
                 for(t=0;t<120;t++);
        }
}

void Keys_Scan()
{
         uchar Tmp;
        P1 = 0x0f;
        DelayMS(1);
        Tmp = P1 ^ 0x0f;
        switch(Tmp)
        {
                 case 1: KeyNO = 0; break;
                case 2: KeyNO = 1; break;
                case 4: KeyNO = 2; break;
                case 8: KeyNO = 3; break;
                default: KeyNO = 16;
        }
        P1 = 0xf0;
        DelayMS(1);
        Tmp = P1 >> 4 ^ 0x0f;
        switch(Tmp)
        {
                 case 1: KeyNO += 0; break;
                case 2: KeyNO += 4; break;
                case 4: KeyNO += 8; break;
                case 8: KeyNO += 12;
        }
}


void main()
{
         P0 = 0x00;
        while(1)
        {
                 P1 = 0xf0;
                if(P1 != 0xf0)
                        Keys_Scan();
                if(Pre_KeyNO != KeyNO)
                {
                         P0 = ~DSY_CODE[KeyNO];
                        Pre_KeyNO = KeyNO;
                }
                DelayMS(100);
        }
}



下面这段程序是什么意思?有谁能详细跟我解释一下吗?
P1 = 0xf0;
                if(P1 != 0xf0)
                        Keys_Scan();




QQ截图20161130201321.png (16.51 KB, 下载次数: 76)

QQ截图20161130201321.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:151313 发表于 2016-11-30 20:42 来自手机 | 只看该作者
确认按键是否弹起
回复

使用道具 举报

板凳
ID:111634 发表于 2016-11-30 20:56 | 只看该作者
本帖最后由 zl2168 于 2016-11-30 21:01 编辑

下面这段程序是什么意思?有谁能详细跟我解释一下吗?
P1 = 0xf0;//列线置低电平
                 if(P1 != 0xf0)//若P1不等于0xf0(前输出数据),表明有键按下(有键按下时会改变P1口状态)
                         Keys_Scan();//调用键扫描子函数


回复

使用道具 举报

地板
ID:111634 发表于 2016-11-30 21:04 | 只看该作者
我给你推荐的案例程序语句条条有注解,便于阅读理解,便于自学。
回复

使用道具 举报

5#
ID:111634 发表于 2016-11-30 21:06 | 只看该作者
本帖最后由 zl2168 于 2016-11-30 21:08 编辑

实例62  4×4矩阵式键盘
与你的几乎一模一样
Proteus仿真一下,确认有效。
实例62 4×4矩阵式键盘.rar (44.79 KB, 下载次数: 15)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。


回复

使用道具 举报

6#
ID:102056 发表于 2016-11-30 21:08 来自手机 | 只看该作者
zl2168 发表于 2016-11-30 20:56
下面这段程序是什么意思?有谁能详细跟我解释一下吗?
P1 = 0xf0;//列线置低电平
                 if(P1 ...

明白!多谢!
回复

使用道具 举报

7#
ID:111634 发表于 2016-11-30 21:09 | 只看该作者
本帖最后由 zl2168 于 2016-11-30 21:11 编辑

你在本网站提了许多问题,我给你推荐的张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,有100个案例,几乎覆盖了你所有的问题,难道还不值得你去看看这本书吗?
一个一个问,多吃力啊!还大多得不到满意解答,何必呢?
回复

使用道具 举报

8#
ID:102056 发表于 2016-11-30 21:28 | 只看该作者
zl2168 发表于 2016-11-30 21:09
你在本网站提了许多问题,我给你推荐的张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus ...

学什么看相应的内容,不懂提问,百度,
回复

使用道具 举报

9#
ID:102056 发表于 2016-11-30 21:29 | 只看该作者
king@ 发表于 2016-11-30 21:28
学什么看相应的内容,不懂提问,百度,

尽力学习理解
回复

使用道具 举报

10#
ID:149853 发表于 2016-11-30 23:40 | 只看该作者
   switch(Tmp)
        {
                 case 1: KeyNO = 0; break;
                case 2: KeyNO = 1; break;
                case 4: KeyNO = 2; break;
                case 8: KeyNO = 3; break;
                default: KeyNO = 16;
        }
我怎么觉得你这段程序有问题呢?高位给0,低位给1。
然后我按下一个键,这个键对应的行和列都是0吧,也就是说,低位只有一个数为0,
那么tmp怎么会出现1,2,4,8呢。
除非楼主的单片机键盘是按下去接到了高电平
回复

使用道具 举报

11#
ID:70330 发表于 2016-12-1 08:32 | 只看该作者
P1 = 0xf0;//给口赋值
                if(P1 != 0xf0)说明P1口的值改变了,有键按下,P1口值才会改变
                        Keys_Scan();//调用键盘扫描函数
回复

使用道具 举报

12#
ID:149713 发表于 2016-12-1 13:13 | 只看该作者
不是单片机的附带资料里都会有这些资料吗~
回复

使用道具 举报

13#
ID:151481 发表于 2016-12-1 20:05 | 只看该作者
确认按键是否弹起
回复

使用道具 举报

14#
ID:151540 发表于 2016-12-1 20:41 | 只看该作者
把程序重新好好地找找错误
回复

使用道具 举报

15#
ID:151540 发表于 2016-12-1 20:41 | 只看该作者
回复

使用道具 举报

16#
ID:102056 发表于 2016-12-1 20:58 | 只看该作者
咆哮的阿杰 发表于 2016-11-30 23:40
switch(Tmp)
        {
                 case 1: KeyNO = 0; break;

以实测,程序没有问题!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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