搜索
bottom↓
回复: 12

以前发过一个帖说是要做6*5键盘,今天程序写好了.和大家交流一下

[复制链接]

出0入0汤圆

发表于 2006-7-24 22:00:28 | 显示全部楼层 |阅读模式
cpu:M128

//6行:PD0~PD5

//5列:PE0~PE4



void delay_1ms(void)

{

   unsigned int i=0;

   for (i=1; i<1142; i++);

}



void delay_nms(unsigned int n)

{

   unsigned int i=0;

   for (i=0; i<n; i++)

   delay_1ms();

}



uchar keyscan(void)

{

uchar key_h=0;//行扫描

uchar key_l=0;//列扫描

uchar keycode=0;//按键返回值

uchar a=0;

uchar done=0;//按键扫描结束标志

PORTD=0x00;

DDRD=0xFF;//PD0~PD5行设置为输出

PORTE=0xFF;

DDRE=0xE0;//PE7输出,PE6输出LCM.PE0~PE4列设置为输入:1110,0000=0xE0       

delay_1ms();// 延时

        a=PINE;

        a=PINE;//要读两次才可以

        if ((a&0x1f)!=0x1f)

        {

                delay_nms(10);//延时消抖动;

                a=PINE;

                a=PINE;

                if ((a&0x1f)!=0x1f)

                {

                        key_h=0xfe;//起始的行扫描码1111,1110=0xfe

                        while (!done)

                        {

                                PORTD=key_h;

                                a=PINE;

                                a=PINE;

                                key_l=a&0x1f;

                                if (key_l!=0x1f)

                                {

                                 done=1;

                                 while ((key_l&0x01)!=0x00)

                                 {

                                  keycode++;

                                  key_l>>=1;

                                 }

                                }

                                else//此行没找到开始下一行的扫描

                                {

                                 keycode+=5;

                                 key_h=(key_h<<=1)|0x01;//行扫描码,最低位补1

                                 done=0;

                                }

                        }

                return keycode;

                }

        }

        return 0xff;

}

返回的键值从下往上,从左到右依次是:0~29.

出0入0汤圆

 楼主| 发表于 2006-7-24 22:02:59 | 显示全部楼层
已经测试过了,是可以的.

有不完善的地方请大家指教.

出0入0汤圆

发表于 2006-7-25 09:14:01 | 显示全部楼层
哦,不知能不能实现多键同按.
-----此内容被989898于2006-07-25,09:23:56编辑过

出0入0汤圆

发表于 2006-7-25 11:30:39 | 显示全部楼层
a=PINE;

   a=PINE;//要读两次才可以

这是什么原因啊,还有这个程序放在主程序里面会对别的程序有影响的吧,因为他里面有延时

出0入0汤圆

发表于 2006-7-25 11:58:24 | 显示全部楼层
6*5键盘用6根线就可以了,不过还要加6个二极管

出0入0汤圆

发表于 2006-7-25 14:19:11 | 显示全部楼层
如果有连击,又有组合键,这个程序能不能用啊?如果在主程序中又有动态显示,这样的延时是不是不好用啊?

出0入0汤圆

发表于 2006-7-25 17:10:24 | 显示全部楼层
顶起,,楼主有没有图啊,没图怎么看啊,???

出0入0汤圆

 楼主| 发表于 2006-7-25 21:36:31 | 显示全部楼层
PINE读两次是因为要锁存一下.这个问题也是我后来发现的.

有连接线图就没必要了吧.

不支持多键同时按下.

出0入0汤圆

发表于 2006-7-26 13:04:49 | 显示全部楼层
刚接触AVR   请问a=PINE;   是什么语句啊?

出0入0汤圆

发表于 2006-7-26 13:13:39 | 显示全部楼层
这个延时要用显示来代替吧    如果你不采用LCD或者没有锁存输出的话。

出0入0汤圆

发表于 2006-7-26 13:14:48 | 显示全部楼层
知道PINE 是什么了    呵呵
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 18:29

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

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