5917|12

59

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

这个键盘扫描程序怎么写? [复制链接]


上面是这个键盘的原理图,用的是AT89C52,12M晶振,图中STR,SENSE1,SENSE2,SENSE3,SCAN分别接AT89C52的p1.1,p1.6,p1.3,p1.0,p1.7脚,那位高手指点一下程序要怎么写,小弟感激不尽!!

最新回复

这个键盘设计的MS有点问题啊  详情 回复 发表于 2009-1-2 17:12
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
想办法循环度每个PIN即可
具体算法,俺就懒得写的~等别人来吧,呵呵
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
自己顶一下,那位高手帮一下啊,告诉我扫描算法也可以!!
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

4
 
看不懂,正好我也要搞一个4*4的键盘,看看
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
up lz
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
俺都直接用键盘IC 呵呵
方便简单

关键是稳定
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
----SCAN拉低

---其他三条线如果有低电平按下,说明有键按下。

---SCAN拉高,再测其他三条线是否仍为低,如是低,说明是右边三个键按下了,否则,是左边三个键按下了
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 
同意7楼,如用c实现,会更好一些;
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 6 楼 wanyeye 的回复:
俺都直接用键盘IC 呵呵
方便简单

关键是稳定


简单才是硬道理
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

10
 
有的时候简单是好,但是为了节约成本,老板常常会刁难。。。

用个轮询就OK了,别忘了消抖
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 10 楼 YingchenXie 的回复:
有的时候简单是好,但是为了节约成本,老板常常会刁难。。。

用个轮询就OK了,别忘了消抖


你这个根本不是什么矩阵键盘,画的电路真是奇怪,为什么不搞一个矩阵键盘呢?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
不要用扫描太占资源了,用中断
4*4键盘吗,用int0中断口
给你一个c语言的
#include "INTRINS.H"
#include "REG51.H"
typedef unsigned char UCHAR;
typedef unsigned int UINT;
typedef void (*keyfun)(void);
#ifndef __keyboarddefinition_h__
#define __keyboarddefinition_h__
#define NULL    0
#define YES 1
#define NO 0
#define ON 1
#define  OFF 0
#define  KeyPort P2
#define  keyrowscan 0x0f
#define  keycolumnscan 0xf0
#define  key1value 0xe7
#define  key2value 0xeb
#define  key3value 0xed
#define  key4value 0xee
#define  key5value 0xd7
#define  key6value 0xdb
#define  key7value 0xdd
#define  key8value 0xde
#define  key9value 0xb7
#define  key10value 0xbb
#define  key11value 0xbd
#define  key12value 0xbe
#define  key13value 0x77
#define  key14value 0x7b
#define  key15value 0x7d
#define  key16value 0x7e
#endif
keyfun key[17];
UCHAR axthevalueofkey=0x77;
sbit P30=P3^0;
bit keydown=0;
void delay();
//void register(keyfun temp,void *a)
//{temp=a;
//}
//         register(key[1],key1valuefun)  ;
void key1valuefun()//这个函数合格.
{        UCHAR m;
        P1=0;
        m=0xfe;
    while(1)
if(axthevalueofkey==key1value)
{P1=_cror_(m,1) ;
        delay();}
}





void keyboardinitialize()//合格
  {KeyPort=keyrowscan;
  IE=IE|0x01;
   IP|=0x01;
  }


void delay() //合格
{          int i;
for (i=0;i<200;i++);
}

keyactiondeal() interrupt 0         //这个函数合格.
{        UCHAR Firstkeyvalue;
        UCHAR         secondkeyvalue;
//        UCHAR thirdkeyvalue;
   UCHAR tempkeyvalue;
    IE&=0Xfe;
        Firstkeyvalue=KeyPort&keyrowscan ;
        KeyPort=keyrowscan;
        delay();
        secondkeyvalue=KeyPort&keyrowscan;
        if (Firstkeyvalue==secondkeyvalue)
        { tempkeyvalue=secondkeyvalue;
         KeyPort=keycolumnscan;
         tempkeyvalue|=KeyPort;
         axthevalueofkey=tempkeyvalue;
         KeyPort=keycolumnscan;
         while ((KeyPort&keycolumnscan)!=keycolumnscan)
         {         KeyPort=keycolumnscan;
         }
          IE|=0x01;
        }
         }
void main()
{        IE=90;
        P30=0;
    SP=0x60;
        key[1]=key1valuefun;
        keyboardinitialize();
while (1)
{ switch (axthevalueofkey)
{
case key1value:   
                   {(*key[1])(); break;}
case key2value:  
                   {(*key[2])();  break;}
/**************用时开启**
case: key2value  
                   (*key[3])();  break;
case: key2value  
                   (*key[4])();  break;
case: key2value  
                   (*key[5])();  break;
case: key2value  
                   (*key[6])();  break;
case: key2value  
                   (*key[7])();  break;
case: key2value  
                   (*key[8])();  break;
case: key2value  
                   (*key[9])();  break;
case: key2value  
                   (*key[10])();  break;
case: key2value  
                   (*key[11])();  break;
case: key2value  
                   (*key[12])();  break;
case: key2value  
                   (*key[13])();  break;
case: key2value  
                   (*key[14])();  break;
case: key2value  
                   (*key[15])();  break;
case: key2value  
                   (*key[16])();  break;
*****/
}
}
}
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
这个键盘设计的MS有点问题啊
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表