搜索
bottom↓
回复: 9

请高人帮我看看,矩阵键盘问题

[复制链接]

出0入0汤圆

发表于 2011-3-24 09:24:06 | 显示全部楼层 |阅读模式
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define uchar unsigned char
#define uint  unsigned int

unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                                           0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
/*------------------------------------------------
                   函数声明
------------------------------------------------*/
uchar keyscan(void);//键盘扫描
void delay(uint i); //演示程序
/*------------------------------------------------
                   主函数
------------------------------------------------*/
void main()
{
uchar key;
P2=0x00;        //1数码管亮 按相应的按键,会显示按键上的字符
while(1)
{
key=keyscan();  //调用键盘扫描,
switch(key)
{
  case 0x7e:P1=dofly[0];break;//0 按下相应的键显示相对应的码值
  case 0x7d:P1=dofly[1];break;//1
  case 0x7b:P1=dofly[2];break;//2
  case 0x77:P1=dofly[3];break;//3
  case 0xbe:P1=dofly[4];break;//4
  case 0xbd:P1=dofly[5];break;//5
  case 0xbb:P1=dofly[6];break;//6
  case 0xb7:P1=dofly[7];break;//7
  case 0xde:P1=dofly[8];break;//8
  case 0xdd:P1=dofly[9];break;//9
  case 0xdb:P1=dofly[10];break;//a
  case 0xd7:P1=dofly[11];break;//b
  case 0xee:P1=dofly[12];break;//c
  case 0xed:P1=dofly[13];break;//d
  case 0xeb:P1=dofly[14];break;//e
  case 0xe7:P1=dofly[15];break;//f
}
}
}
/*------------------------------------------------
              键盘扫描程序
------------------------------------------------*/

uchar keyscan(void)
{
        uchar scancode,tmpcode;
        P3 = 0xf0;                                                                 // 发全0行扫描码
        if ((P3&0xf0)!=0xf0)                                        // 若有键按下
        {
                 delay(1000);                                                // 延时去抖动
                if ((P3&0xf0)!=0xf0)                                // 延时后再判断一次,去除抖动影响
                {
                        scancode = 0xfe;
                        while((scancode&0x10)!=0)                // 逐行扫描
                        {
                                P3 = scancode;                                // 输出行扫描码
                                if ((P3&0xf0)!=0xf0)                // 本行有键按下
                                {
                                       
                                    
                                    tmpcode = (P3&0xf0)|0x0f;

                                        /* 返回特征字节码,为1的位即对应于行和列 */
                                       
                                        return(~(~scancode)+(~tmpcode));
                                       
                                       
                                }
                                else scancode = (scancode<<1)|0x01;                // 行扫描码左移一位
                        }   
                }
        }
        return(0);                                                                // 无键按下,返回值为0        
}

/*------------------------------------------------
                 延时程序
------------------------------------------------*/
void delay(uint i)  //延时函数
{
while(i--);
}

这个是我编的程序,用PROTUES仿真,只能显示0到3,从4开始按下键盘一点反应都没有,请高人指点一下,小弟不胜感激!!!谢谢大家了

点击此处下载 ourdev_624964W4LHNN.rar(文件大小:14K) (原文件名:数码管显示4×4键盘矩阵按键.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2011-3-24 09:46:39 | 显示全部楼层
怎么没有人啊!小弟急啊!

出0入0汤圆

发表于 2011-3-25 17:05:32 | 显示全部楼层
回复【楼主位】194027lm
-----------------------------------------------------------------------

在上传的“数码管显示4×4键盘矩阵按键.rar” 中,没有提供 keyboard.hex 文件。

出0入0汤圆

 楼主| 发表于 2011-3-29 15:12:05 | 显示全部楼层
回复【2楼】JQ_Lin
-----------------------------------------------------------------------

忘记上传了,现在怎么传上去?指点一下!

出0入0汤圆

发表于 2011-3-29 21:07:27 | 显示全部楼层
把仿真工程文件“数码管显示4×4键盘矩阵按键.DSN”和 keyboard.hex 一起压缩成为一个 XXX.rar 压缩文件,上传后,复制链接到回帖中来。

出0入0汤圆

 楼主| 发表于 2011-3-30 14:52:06 | 显示全部楼层
回复【4楼】JQ_Lin
-----------------------------------------------------------------------
弄上来了,麻烦大哥帮看一下,小弟感激不尽啊!


点击此处下载 ourdev_626814RW0F5J.rar(文件大小:15K) (原文件名:矩阵键盘.rar)

出0入0汤圆

 楼主| 发表于 2011-4-2 15:57:14 | 显示全部楼层
大家帮帮忙啊!

出0入0汤圆

发表于 2011-4-2 16:54:29 | 显示全部楼层
你发的文件连0-3都显示不了!

出0入0汤圆

发表于 2011-4-2 16:56:36 | 显示全部楼层
都发的什么啊?一个是空文件  一个什么都按不了

出0入0汤圆

 楼主| 发表于 2011-4-6 17:52:59 | 显示全部楼层
可以啊!我在这里仿真可以成功啊,按最左边的这一列的按键就显示0到3啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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