找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2468|回复: 8
收起左侧

4X4矩阵键盘有些地方不懂请大家帮帮我

[复制链接]
ID:67818 发表于 2014-10-30 21:27 | 显示全部楼层 |阅读模式
这是复制的矩阵的一小部分程序,


switch(Tmp)
        {
                 case 1: KeyNO += 0; break;
                case 2: KeyNO += 4; break;
                case 4: KeyNO += 8; break;
                case 8: KeyNO += 12;
        }
    这是什么意识啊KeyNO +=?

回复

使用道具 举报

ID:63399 发表于 2014-10-30 23:10 | 显示全部楼层
看一下keyNO+是怎么定义的,这个开关语句是检测的第一列

评分

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

查看全部评分

回复

使用道具 举报

ID:63656 发表于 2014-10-30 23:25 | 显示全部楼层
KeyNo = KeyNO+?
回复

使用道具 举报

ID:67818 发表于 2014-10-31 08:37 | 显示全部楼层
其实就是这个,
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^7;

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 Beep()
{
        uchar i;
        for(i=0;i<100;i++)
        {
                 DelayMS(1);
                BEEP = ~BEEP;
        }
        BEEP = 1;
}

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

使用道具 举报

ID:67818 发表于 2014-10-31 08:38 | 显示全部楼层
我看不懂
switch(Tmp)
        {
                 case 1: KeyNO += 0; break;
                case 2: KeyNO += 4; break;
                case 4: KeyNO += 8; break;
                case 8: KeyNO += 12;
        }这部分尤其是KEYNO+=
回复

使用道具 举报

ID:51348 发表于 2014-11-1 00:24 | 显示全部楼层
因为前面有个赋值到键盘,然后读取看是否有按键按下,如果有按键按下要和一个固定16进制数值进行异或操作得到一个数值,这个数值就是Tmp的值,根据这个数值赋值KeyNo,然后根据KeyNo的地址指数取出数值显示
回复

使用道具 举报

ID:51348 发表于 2014-11-1 00:35 | 显示全部楼层
那个什么+=0是一种缩写,例如b=b+c可以缩写成b+=c
回复

使用道具 举报

ID:67818 发表于 2014-11-1 00:43 | 显示全部楼层

谢谢哈
回复

使用道具 举报

ID:67818 发表于 2014-11-1 00:45 | 显示全部楼层
我有个流星雨能帮帮我看看好吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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