» 您尚未 登录   注册 | 搜索 | 社区服务 | 帮助 | 无图版 | 左右分栏


AVR与虚拟仪器论坛 AVRVi.com -> AVRVi 产品支持区 -> AVR单片机综合开发板 -> 矩阵键盘按键在七段数码管上显示 模块化程序使用展示 带图片
 XML   RSS 2.0   WAP 

AVRVI的淘宝店 AVR单片机学习套餐 EasyAVR M128开发板 SK 国内最专业AVR开发工具商城

--> 本页主题: 矩阵键盘按键在七段数码管上显示 模块化程序使用展示 带图片 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
admin

终身成就奖 金点子奖 原创先锋奖 技术群用户
头衔:先行者先行者

级别: 管理员
精华: 74
发帖: 4146
威望: 4260 点
金钱: 88805 VI
贡献值: 71 点
技术积分: 73 点
在线时间:2381(小时)
注册时间:1970-01-01
最后登录:2008-12-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

矩阵键盘按键在七段数码管上显示 模块化程序使用展示 带图片

程序特点,模块化设计,可以不用关心 7segled.c 以及7segled.h 和key_board.c 以及 key_board.h中的内容,只需要修改配置即可在主函数中使用。

矩阵键盘设计从2×2到8×8通用,其实1*x也是可以用的,只是这样就成独立按键了,没有矩阵的意义了。

需要根据自己的情况修改的定义,更改数码管的连接设置:
CODE:

/*********************************************************/
#define Seg7_Bitselect_Port PORTC
#define Seg7_Bitselect_Ddr DDRC
#define Seg7_Data_Port PORTB
#define Seg7_Data_Ddr DDRB

#define Seg7_Bit0 7
#define Seg7_Bit1 6
#define Seg7_Bit2 1
#define Seg7_Bit3 0
/********************************************************/


修改矩阵键盘的行列数,以及连接设置。

CODE:

#define KEY_DDR_COL   DDRA
#define KEY_PORT_COL PORTA
#define KEY_PIN_COL   PINA

#define KEY_DDR_ROW   DDRA
#define KEY_PORT_ROW PORTA
#define KEY_PIN_ROW   PINA

#define WAIT_KEY_UP   1
//每行每列的按键数
#define PER_POW       4
#define PER_COL       4

//按键声
#define BEEP_EN       1 //使用蜂鸣器
#define BEEP_BIT     0 //PD0接蜂鸣器
#define BEEP_DDR     DDRD
#define BEEP_PORT     PORTD

//不使用中断脚
#define KEY_USE_INT 0
//在中断初始化中使用 GICR |= (1<<INT_BIT);       //中断允许位,如INT0
#define IV_number iv_INT0 // iv_INT1 iv_INT2
#define INT_BIT   INT0  
//PD2为INT0 作为中断口
#define KEY_INT       2
#define KEY_INT_DDR   DDRD
#define KEY_INT_RORT PORTD

#if KEY_USE_INT==1
  extern volatile uint8 KEY_FLAG,key;
#endif

//行连接所对应的IO口
#define KEY_ROW_0     4
#define KEY_ROW_1     5
#define KEY_ROW_2     6
#define KEY_ROW_3     7
#define KEY_ROW_ALL   ((1<<KEY_ROW_0)|(1<<KEY_ROW_1)|(1<<KEY_ROW_2)|(1<<KEY_ROW_3))

//可以扩展成更多,当然,这样就不能只有一个端口来实现了,需要行列所在的端口不同。
//最多可以到8*8,也可以缩减到2*2,甚至1*X,但是那样没有意义,超过16个键是修改key_board_table数组。
//#define KEY_ROW_5     0
//#define KEY_ROW_6     1
//#define KEY_ROW_7     2
//#define KEY_ROW_8     3

//列连接所对应的IO口
#define KEY_COL_0     0
#define KEY_COL_1     1
#define KEY_COL_2     2
#define KEY_COL_3     3
#define KEY_COL_ALL   ((1<<KEY_COL_0)|(1<<KEY_COL_1)|(1<<KEY_COL_2)|(1<<KEY_COL_3))
//同理可以和上面注释部分一样扩展,注意 KEY_COL_ALL 要跟着修改
//#define KEY_COL_4     4
//#define KEY_COL_5     5
//#define KEY_COL_6     6
//#define KEY_COL_7     7

#define HAVE_KEY_DOWN ( (KEY_PIN_COL & KEY_COL_ALL) != KEY_COL_ALL )
//有键按下判断,默认初始化为行输出低,列输入,并使能内部上拉
//判断是否有按键即是判断列的输入是否是全为高,这样也有利于设计低电平触发的中断按键。



学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元

AVRVi 与您共同发展! 赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
[楼 主] | Posted: 02-25 07:34 顶端
admin

终身成就奖 金点子奖 原创先锋奖 技术群用户
头衔:先行者先行者

级别: 管理员
精华: 74
发帖: 4146
威望: 4260 点
金钱: 88805 VI
贡献值: 71 点
技术积分: 73 点
在线时间:2381(小时)
注册时间:1970-01-01
最后登录:2008-12-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



在模块化程序支撑之下,主函数如此简单。
CODE:

/************************************************************
文   件:main.c
用   途:演示矩阵键盘的库函数和七段数码管的库函数的使用
Target : M16
Crystal: 1.0000Mhz
说   明:
创   建:2008.2.20
修   改:2008.2.20
Copy Right (c) [url]www.avrvi.com[/url] AVR与虚拟仪器
************************************************************/

#include "config.h"

void main(void)
{
uint8 key=0,i=0;

key_board_int();                        //矩阵按键初始化
Seg7_Led_Init();                        //七段数码管显示初始化

while(1)
{
  if(HAVE_KEY_DOWN)                            //如果有键按下
  {
  key = key_board_get_key();                //读取键值
   
   if(key!=0xFF)                            //0xFF为无效按键
   {
    for(i=3;i!=0;i--)                        //左移位显示
    {
    Seg7_Led_Buf[i]=Seg7_Led_Buf[i-1];
    }
    Seg7_Led_Buf[0]=key;
   }
   
Seg7_Led_Update();                          //按键显示
}
}


学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元

AVRVi 与您共同发展! 赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
[1 楼] | Posted: 02-25 07:42 顶端
admin

终身成就奖 金点子奖 原创先锋奖 技术群用户
头衔:先行者先行者

级别: 管理员
精华: 74
发帖: 4146
威望: 4260 点
金钱: 88805 VI
贡献值: 71 点
技术积分: 73 点
在线时间:2381(小时)
注册时间:1970-01-01
最后登录:2008-12-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

看看实际效果图

LED上显示按键的值,数码管显示清晰可靠。

LED上显示按键的值


总统效果

总统效果


数码管驱动效果非常好,没有任何闪烁感,拍摄七段数码管清晰

七段数码管显示清晰


再换一组数试试

换一组数显示

2008年网站第一个开源项目 Ethernet IO Kit,单片机上网,网络开发板,网络控制

AVRVi 与您共同发展! 赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
[2 楼] | Posted: 02-25 07:50 顶端
raosibin



新人进步奖 特殊贡献奖

级别: 风云使者
精华: 5
发帖: 553
威望: 568 点
金钱: 3539 VI
贡献值: 1 点
技术积分: 15 点
在线时间:497(小时)
注册时间:2008-02-25
最后登录:2008-11-25
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



矩阵键盘如何实现多键按下,一键连发功能呢?
本站原创AVR单片机新手入门教程!
[3 楼] | Posted: 03-17 12:26 顶端
admin

终身成就奖 金点子奖 原创先锋奖 技术群用户
头衔:先行者先行者

级别: 管理员
精华: 74
发帖: 4146
威望: 4260 点
金钱: 88805 VI
贡献值: 71 点
技术积分: 73 点
在线时间:2381(小时)
注册时间:1970-01-01
最后登录:2008-12-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



按键库函数里面已经有多键同时按下的功能支持,不过只能支持同一行或者同一列的按键。

另外 config中设置不检查按键抬起 即可实现一键连发

2008年网站第一个开源项目 Ethernet IO Kit,单片机上网,网络开发板,网络控制

AVRVi 与您共同发展! 赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
[4 楼] | Posted: 03-17 13:20 顶端
raosibin



新人进步奖 特殊贡献奖

级别: 风云使者
精华: 5
发帖: 553
威望: 568 点
金钱: 3539 VI
贡献值: 1 点
技术积分: 15 点
在线时间:497(小时)
注册时间:2008-02-25
最后登录:2008-11-25
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



请老古讲讲机状态机模式来设计键盘接口原理啊,特别是得加上多键按下识别,和一键连发功能,很多资料上都讲到这一点就停了,不再讲了,十分郁闷啊,到现在还是没有搞清楚!
2008年网站第一个开源项目 Ethernet IO Kit,单片机上网,网络开发板,网络控制
[5 楼] | Posted: 03-17 15:14 顶端
raosibin



新人进步奖 特殊贡献奖

级别: 风云使者
精华: 5
发帖: 553
威望: 568 点
金钱: 3539 VI
贡献值: 1 点
技术积分: 15 点
在线时间:497(小时)
注册时间:2008-02-25
最后登录:2008-11-25
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



如果配上流程图那就更好了,这样的键盘接口在实际中才有用啊!期待中............................
2008年网站第一个开源项目 Ethernet IO Kit,单片机上网,网络开发板,网络控制
[6 楼] | Posted: 03-17 15:15 顶端
raosibin



新人进步奖 特殊贡献奖

级别: 风云使者
精华: 5
发帖: 553
威望: 568 点
金钱: 3539 VI
贡献值: 1 点
技术积分: 15 点
在线时间:497(小时)
注册时间:2008-02-25
最后登录:2008-11-25
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



期待中.....................
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[7 楼] | Posted: 03-18 09:03 顶端
zhaitz0330





级别: 侠客
精华: 0
发帖: 19
威望: 20 点
金钱: 270 VI
贡献值: 0 点
技术积分: 0 点
在线时间:11(小时)
注册时间:2007-11-08
最后登录:2008-10-15
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



打包发出来吧。。。。学习。。。
2008年网站第一个开源项目 Ethernet IO Kit,单片机上网,网络开发板,网络控制
[8 楼] | Posted: 03-18 20:59 顶端
zhaitz0330





级别: 侠客
精华: 0
发帖: 19
威望: 20 点
金钱: 270 VI
贡献值: 0 点
技术积分: 0 点
在线时间:11(小时)
注册时间:2007-11-08
最后登录:2008-10-15
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



请教问题 我在用开发版做矩阵键盘时怎么没反映啊 用仿真器也没看出寄存器有什么变化
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[9 楼] | Posted: 03-19 09:23 顶端
admin

终身成就奖 金点子奖 原创先锋奖 技术群用户
头衔:先行者先行者

级别: 管理员
精华: 74
发帖: 4146
威望: 4260 点
金钱: 88805 VI
贡献值: 71 点
技术积分: 73 点
在线时间:2381(小时)
注册时间:1970-01-01
最后登录:2008-12-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



zhaitz0330 是我们的客户吗? 请到商城提供详细的购买信息,要求发给你程序包,解决具体问题。

程序设计,默认时没有显示,按键后才依次显示的

学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元

AVRVi 与您共同发展! 赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
[10 楼] | Posted: 03-19 09:37 顶端
zhaitz0330





级别: 侠客
精华: 0
发帖: 19
威望: 20 点
金钱: 270 VI
贡献值: 0 点
技术积分: 0 点
在线时间:11(小时)
注册时间:2007-11-08
最后登录:2008-10-15
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



是你们客户 现在程序发过来了 正在调试 谢谢
本站原创AVR单片机新手入门教程!
[11 楼] | Posted: 03-21 10:02 顶端
968zyq





级别: 新手上路
精华: 0
发帖: 1
威望: 2 点
金钱: 10 VI
贡献值: 0 点
技术积分: 0 点
在线时间:0(小时)
注册时间:2008-05-14
最后登录:2008-05-15
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



看不到图片
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[12 楼] | Posted: 05-15 01:18 顶端
admin

终身成就奖 金点子奖 原创先锋奖 技术群用户
头衔:先行者先行者

级别: 管理员
精华: 74
发帖: 4146
威望: 4260 点
金钱: 88805 VI
贡献值: 71 点
技术积分: 73 点
在线时间:2381(小时)
注册时间:1970-01-01
最后登录:2008-12-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



此程序代码让客户给公开了 http://bbs.avrvi.com/read-htm-tid-8680.html
本站原创AVR单片机新手入门教程!

AVRVi 与您共同发展! 赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
[13 楼] | Posted: 05-21 16:42 顶端
zhaitz0330





级别: 侠客
精华: 0
发帖: 19
威望: 20 点
金钱: 270 VI
贡献值: 0 点
技术积分: 0 点
在线时间:11(小时)
注册时间:2007-11-08
最后登录:2008-10-15
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



不好意思 不可以公开吗
本站原创AVR单片机新手入门教程!
[14 楼] | Posted: 05-22 14:31 顶端
xiaowenge



级别: 骑士
精华: 0
发帖: 46
威望: 47 点
金钱: 715 VI
贡献值: 0 点
技术积分: 0 点
在线时间:40(小时)
注册时间:2008-07-19
最后登录:2008-11-23
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



学习一下!!!
本站原创AVR单片机新手入门教程!
[15 楼] | Posted: 09-25 22:19 顶端
gibson





级别: 新手上路
精华: 0
发帖: 3
威望: 4 点
金钱: 30 VI
贡献值: 0 点
技术积分: 0 点
在线时间:0(小时)
注册时间:2008-10-22
最后登录:2008-10-22
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



学习一下!!
本站原创AVR单片机新手入门教程!
[16 楼] | Posted: 10-22 17:39 顶端

AVR与虚拟仪器论坛 AVRVi.com -> AVR单片机综合开发板