搜档网
当前位置:搜档网 › 4X4扫描式矩阵键盘课程设计

4X4扫描式矩阵键盘课程设计

4X4扫描式矩阵键盘课程设计
4X4扫描式矩阵键盘课程设计

4x4矩阵键盘识别设计班级:1221201

专业:测控技术与仪器

姓名:涂勇

学号:2012 2012 0110

指导老师:钟念兵

东华理工大学

2016年1月1日

摘要

随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,电子式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。

矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。

矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N 个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。

4*4矩阵式键盘采用STM32嵌入式微处理器为核心,主要由矩阵式键盘电路、硬件电路、显示电路等组成,软件选用C语言编程。STM32将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

目录

第一章:系统功能要求-------------------------------------------------------- 1.1 4*4 矩阵式键盘系统概述------------------------------------------------ 1.2 本设计任务和主要容--------------------------------------------------- 第二章:系统硬件电路的设计------------------------------------------------

2.1 硬件系统主要思路和电路原理图- --------------------------------------

2.2 硬件上键盘规划- --------------------------------------------------------- 第三章:系统程序的设计------------------------------------------------------

3.1 程序的编写步骤-----------------------------------------------------------

3.2 编写的源程序-------------------------------------------------------------- 第四章:心得体会---------------------------------------------------------------

第一章:系统功能要求

1.1 4*4 矩阵式键盘系统概述

利用STM32对4*4矩阵键盘进行动态扫描,当有按键盘的键时,可将相应按键值(0~F)实时显示在数码管上。

由p1.0—p1.3(列)和p1.4—p1.7(行)组成4*4矩阵键盘,p0口接LED静态显示电路。由于p0口部无上拉电阻,因此必须外部接上上拉电阻,其值的选择可以根据LED数码管发光电流及其亮度来决定。

通过编写4*4键盘的驱动程序,当有键盘按下时,能够在led数码管与按键的键值对应的数字。

最常见键盘布局如下图1.1所示。一般由16个按键组成,在单片机中正好可以用一个p口实现16

键盘模式。

图1.1

1.2 本设计任务和主要容

本论文主要研究STM32嵌入式控制器控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。

主要容如下:

1.2.1 根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计;

1.2.2 熟练掌握protues软件的使用,并能够按要求对设计的电路进行仿真,实现相应的功能;

1.2.3 LED实时显示按键的信息;

1.2.4 采用软件编程的方法实现按键信息的提取和显示。

第二章:系统硬件电路的设计

2.1 硬件系统主要思路和电路原理图

首先,把纵向三线设置为推挽输出,然后把横向三线设置为下拉输入,然后读取横向三线的值,如果有接口的读数为1,说明有按键按下了,把该值与0x07相与后放到scana,然后左移4位放到result中,这之后把横向三线设置为推挽输出,纵向三线设置为下拉输入,然后读取纵向三线的值,把相应的键值保存到scanb中,然后通过移位使得低四位表示的是相应的按键所在横向的值,然后与result相或放到result的低四位,这样得到的result高四位就是按键所在纵向的值,低四位就是按键所在横向的值,由此就可以检测到那个按键被按下了。

效果:按下相应的键盘,四个led灯会显示各种不同的状态,hoho,一共有9种状态。

用protrus仿真软件所画的仿真图如下:

图3.2 仿真原理图2.2 硬件上的键盘规划

stm32 矩阵键盘

这是硬件上的键盘规划

// | 1 | 2 | 3 | 4 | ---line 1 PE6 //

// --------------------------- //

// | 5 | 6 | 7 | 8 | ---line 2 PE5 //

// --------------------------- //

// | 9 | 10| 11| 12| ---line 3 PE4 //

// --------------------------- //

// | 13| 14| 15| 16| ---line 4 PE3 //

// --------------------------- //

// | 17| 18| 19| 20| ---line 5 PE2 //

// --------------------------- //

// | | | | //

// PE0 PB5 PB8 PB9 //

第四章:系统程序的设计

4.1 程序的编写步骤

4.1.1 判断是否有键按下;

4.1.2 识别被按下的键;STM32用矩阵键盘,不带外部中断,可以多个按键同时按下4.2 编写的源程序

#ifndef __COMMON_H

#define __COMMON_H

#include "stm32f10x.h"

/* 4*4矩阵键盘*/

void keyboard_init(void);

void update_key(void);

extern unsigned char key[4][4];

#endif

/**************矩阵键盘.c文件*****************************/

#include "common.h"

struct io_port {

GPIO_TypeDef *GPIO_x;

unsigned short GPIO_pin;

};

static struct io_port key_output[4] = {

{GPIOD, GPIO_Pin_0}, {GPIOD, GPIO_Pin_1},

{GPIOD, GPIO_Pin_2}, {GPIOD, GPIO_Pin_3}

};

static struct io_port key_input[4] = {

{GPIOD, GPIO_Pin_4}, {GPIOD, GPIO_Pin_5},

{GPIOD, GPIO_Pin_6}, {GPIOD, GPIO_Pin_7}

};

unsigned char key[4][4];

void keyboard_init(void)

GPIO_InitTypeDef GPIO_InitStructure;

unsigned char i;

/* 键盘行扫描输出线输出高电平*/

/* PA0 PA1 PA2 PA3 输出*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);

/* 键盘列扫描输入线键被按时输入高电平放开输入低电平*/

/* PA4 PA5 PA6 PA7 输入*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOD, &GPIO_InitStructure);

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

{

GPIO_SetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);

}

}

void update_key(void)

{

unsigned char i, j;

for(i = 0; i < 4; i++) //i是输出口,依次置低电平

{

GPIO_ResetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);

for(j = 0; j < 4; j++) //j是输入口,当键按下时导通被置为低电平

{

if(GPIO_ReadInputDataBit(key_input[j].GPIO_x, key_input[j].GPIO_pin) == 0)

{

key[i][j] = 1;

}

else

{

key[i][j] = 0;

}

}

GPIO_SetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);

}

}

//_________________________________________________//

参考了下基于avr的矩阵键盘程序,耐着性子移植到符合上面硬件规划的stm32板子上。volatile uint8_t key_flag = 0;

void key_init(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;

//key output

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9;

GPIO_Init(GPIOB,&GPIO_InitStructure);

//key input

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;

GPIO_Init(GPIOE,&GPIO_InitStructure);

}

//判断是否有键按下函数,对键盘进行一次扫描

//返回键盘接口状态,有键按下时返回键值;没有键按下返回无效标志位

uint8_t Is_Key_PressOn(void)

{

volatile uint8_t i,ScanCode;

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

{

switch(i) //扫描信号产生

{

case 0:

GPIOE->BSRR = 0x00010000;//PE0 = 0;

GPIOB->BSRR = 0x00000320;//PB5 = 1; PB8 = 1; PB9 = 1;

key_flag = 1;

break;

case 1:

GPIOB->BSRR = 0x00200300;//PB5 = 0; PB8 = 1; PB9 = 1;

key_flag = 2;

break;

case 2:

GPIOE->BSRR = 0x00000001;//PE0 = 1;

GPIOB->BSRR = 0x01000220;//PB5 = 1; PB8 = 0; PB9 = 1;

key_flag = 3;

break;

case 3:

GPIOE->BSRR = 0x00000001;//PE0 = 1;

GPIOB->BSRR = 0x02000120;//PB5 = 1; PB8 = 1; PB9 = 0;

key_flag = 4;

break;

default: key_flag = 0; break;

}

if((((uint8_t)GPIOE->IDR)|0x83)!=0xff)

return ((uint8_t)GPIOE->IDR | 0x83);

}

return(PRESS_INVALID);

}

//找到闭合键,判断延时前后两次键值是否相同,如果相同则返回键值

uint8_t Find_Key_PressOn(uint8_t KeyCode_before,uint8_t KeyCode_after) {

if(KeyCode_before==KeyCode_after) return(KeyCode_after);

else return(PRESS_INVALID);

}

//计算键值,根据返回的键值计算相应的返回值

uint8_t Calc_Key_PressOn(uint8_t KeyCode)

{

uint8_t TempNum;

switch(KeyCode)

{

case 0xBF:

if(1==key_flag)

{

TempNum = 1;break;

}

else if(2==key_flag)

{

TempNum = 2;break;

}

else if(3==key_flag)

{

TempNum = 3;break;

}

}

else break;

case 0xDF:

if(1==key_flag)

{

TempNum = 5;break; }

else if(2==key_flag) {

TempNum = 6;break; }

else if(3==key_flag) {

TempNum = 7;break; }

else if(4==key_flag) {

TempNum = 8;break; }

else break;

case 0xEF:

if(1==key_flag)

{

TempNum = 9;break; }

else if(2==key_flag) {

TempNum = 10;break; }

else if(3==key_flag) {

TempNum = 11;break; }

else if(4==key_flag) {

TempNum = 12;break; }

else break;

case 0xF7:

if(1==key_flag)

{

TempNum = 13;break; }

}

else if(3==key_flag)

{

TempNum = 15;break;

}

else if(4==key_flag)

{

TempNum = 16;break;

}

else break;

case 0xFB:

if(1==key_flag)

{

TempNum = 17;break;

}

else if(2==key_flag)

{

TempNum = 18;break;

}

else if(3==key_flag)

{

TempNum = 19;break;

}

else if(4==key_flag)

{

TempNum = 20;break;

}

else break;

default : TempNum=0;break; //发生错误时返回,无效标志

}

return(TempNum); //正常返回值为1~16

}

//键盘扫描主程序

uint8_t Keyboard(void)

{

uint8_t key_temp; //暂存键值的变量

key_temp=Is_Key_PressOn(); //判断是否有键闭合

// PORTC=key_temp; 调试过程中使用,正常运行时没用可以删除

if (key_temp==PRESS_INVALID) //判断该次扫描中是否有键按下

return(PRESS_INVALID); //没有闭合则建立无效标志

else

delay_nus(100); //闭合则延时

key_temp=Find_Key_PressOn(key_temp,((uint8_t)GPIOE->IDR | 0x83)); //找到闭合键

return(key_temp); //若延时前后键值不相等则返回无效标志

else

key_temp=Calc_Key_PressOn(key_temp); //有效则计算键值

while((((uint8_t)GPIOE->IDR)|0x83)!=0xff)//等待键放。。。看实际情况使用

{

delay_nus(10);

}

return(key_temp); //返回键值

}

第五章:心得体会

课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。

通过本次电子线路设计,我不仅加深了对STM32嵌入式理论知识的理解,学会了学以致用的重要性;而且还学会了如何去加强锻炼创新精神,同时也提高了自身的动手能力,让我深刻的意识到理论与实际结合的重要性。

电子线路的学习对于我们专业来说非常的重要,通过本次设计也让我更加清晰了对专业的了解,理论知识再丰富,没有实际的操作经验也是不行的;本次设计也运用到了proteus仿真软件,由于之前没有学过该仿真软件,所以在操作的过程中遇到了很多困难,但庆幸的是通过不断的学习,对proteus软件也有了很大的了解,也学会了一些简单的操作,所以也让我意识到,如果你想学好,通过自己的努力就一定会学好。

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独

立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

4X4扫描式矩阵键盘课程设计

4X4扫描式矩阵键盘课程设计 课程设计名称: 4_4扫描式矩阵键盘设计 姓名:DUKE 班级:电子1008班 学号:10086 成绩: 日期:2014年1月6日

摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

目录 第一章:系统功能要求-------------------------------------------------------- 1.1 4*4 矩阵式键盘系统概述------------------------------------------------ 1.2 本设计任务和主要内容--------------------------------------------------- 第二章:方案论证--------------------------------------------------------------- 第三章:系统硬件电路的设计------------------------------------------------ 3.1 单片机控制系统原理----------------------------------------------------- 3.2 原理图绘制说明---------------------------------------------------------- 3.3 画出流程图---------------------------------------------------------------- 3.4 原理图绘制--------------------------------------------------------------- 第四章:系统程序的设计------------------------------------------------------ 4.1 程序的编写步骤----------------------------------------------------------- 4.2 编写的源程序-------------------------------------------------------------- 第五章:调试及性能分析------------------------------------------------------ 第六章:心得体会--------------------------------------------------------------- 参考文献----------------------------------------------------------------------------

扫描式矩阵键盘课程设计

扫描式矩阵键盘课程设 计 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

4X4扫描式矩阵键盘课程设计课程设计名称: 4_4扫描式矩阵键盘设计 姓名: DUKE 班级:电子1008班 学号: 10086 成绩: 日期: 2014年1月6日 摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号

转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。 目录 第一章:系统功能要求-------------------------------------------------------- 1.1 4*4 矩阵式键盘系统概述------------------------------------------------ 1.2 本设计任务和主要内容--------------------------------------------------- 第二章:方案论证--------------------------------------------------------------- 第三章:系统硬件电路的设计------------------------------------------------ 3.1 单片机控制系统原理----------------------------------------------------- 3.2 原理图绘制说明---------------------------------------------------------- 3.3 画出流程图---------------------------------------------------------------- 3.4 原理图绘制---------------------------------------------------------------

STM32_4x4矩阵键盘

/*--------------------------------------------------------------------------------------* 矩阵键盘驱动 * 文件: keyboard.c * 编写人:LiuHui * 描述:扫描4x4 矩阵键盘输入,并返回键值 * 适用范围:驱动采用ST3.5 库编写,适用于STM32F10x 系列单片机 * 所用引脚:PA0-PA7 * 编写时间:2013 年11 月22 日 * 版本:1.0 --------------------------------------------------------------------------------------*/ #include "stm32f10x.h" #include "keyboard.h" #include "dealy.h" /*--------------------------------矩阵键盘初始化----------------------------------------* 功能:初始化stm32 单片机GPIO //PA0-PA7 * 参数传递: * 输入:无 * 返回值:无 --------------------------------------------------------------------------------------*/ void KeyBoard_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); } /*------------------------------矩阵键盘扫描--------------------------------------------* 功能:扫描矩阵键盘,并返回键值 * 参数: * 输入:无 * 返回:有键按下返回该键值 * 无键按下时则返回0 --------------------------------------------------------------------------------------*/ u8 Read_KeyV alue(void) { u8 KeyV alue=0; if((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f) {

课程设计-制作单片机的4X4矩阵键盘

课程设计-制作单片机的4X4矩阵键盘

目录 摘要.............................................. 错误!未定义书签。第一章硬件部分 (5) 第一节AT89C51 (5) 第二节4*4矩阵式键盘 (8) 第三节LED数码管 (11) 第四节硬件电路连接 (13) 第二章软件部分 (15) 第一节所用软件简介 (15) 第二节程序流程图 (18) 第三节程序 (20) 第三章仿真结果 (23) 心得体会 (26) 参考文献 (27)

第一章硬件部分 第一节AT89C51 AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。引脚如图所示 AT89C5 图1 AT89C51管脚 图 AT89C51其具有以下特性: 与MCS-51 兼容 4K字节可编程FLASH存储器 寿命:1000写/擦循环 数据保留时间:10年

全静态工作:0Hz-24MHz 三级程序存储器锁定 128×8位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 特性概述: AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 接口,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。

单片机课程设计4X4矩阵键盘显示要点

长沙学院 《单片机原理及应用》 课程设计说明书 题目液晶显示4*4矩阵键盘按键号 程序设计 系(部) 电子与通信工程系 专业(班级) 电气1班 姓名龙程 学号2011024109 指导教师刘辉、谢明华、王新辉、马凌 云 起止日期2014.5.19—2014.5.30

长沙学院课程设计鉴定表

《单片机技术及应用》课程设计任务书系(部):电子与电气工程系专业:11级电子一班指导教师:谢明华、刘辉

目录 前言 (5) 一、课程设计目的 (6) 二、设计内容及原理 (6) 2.1 单片机控制系统原理 (6) 2.2阵键盘识别显示系统概述 (6) 2.3键盘电路 (7) 2.4 12864显示器 (8) 2.5整体电路图 (9) 2.6仿真结果 (9) 三、实验心得与体会 (10) 四、实验程序 (10) 参考文献 (18)

前言 单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器 应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。现代人类生活中所用的几乎每件有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。汽车上一般配备40多片单片机,复杂的工业控制系统上甚至可能有数百片单片机在同时工作!单片机的数量不仅远超过PC机和其他计算机的总和,甚至比人类的数量还要多。 是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗低,因此倍受工程师青睐,适用于使用电池的电子设备。英国科学家在上世纪制造了第一块液晶显示器即LCD。而第一台可操作的LCD基于动态散射模式(Dynamic Scattering Mode,DSM),是RCA公司乔治·海尔曼带领的小组开发的。 LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。 交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键, 键盘是合理的。

矩阵键盘简易计算器要点

《微处理器系统与接口技术》课程实践报告 计算器 班级: 学号: 学生姓名: 指导老师: 日期: 2014.7.5 ******电子与信息工程学院

目录 1、设计题目:计算器 (3) 2、设计目的 (3) 3、计算器总体设计框图 (3) 4、计算器详细设计过程 (4) 4.1输入模块 (4) 4.2键盘输入电路 (5) 4.3主程序模块 (6) 5、分析与调试 (6) 7、运行结果 (8) 8、结束语 (8) 8、参考文献 (8) 9、源程序附录 (9) 9.1主程序 (9) 9.2延时函数delay (12) 9.3显示函数display (12) 9.4键盘扫描函数 (14) 9.5预定义函数 (15)

1、设计题目:计算器 2、设计目的 此次课程实践题目是基于单片机简单计数器的设计,本此设计使用的是Intel公司MCS-51系列的8051AH单片机。设计的计算器可以实现2位小数的加、减、乘、除运算以及整数的乘方运算,其中用4*4矩阵键盘来输入待参与运算的数据和运算符;八位数码管动态显示输入待参与运算的数据以及运算后产生的结果,每个硬件模块的调用过程中涉及到了函数入口及出口参数说明,函数调用关系描述等。 3、计算器总体设计框图 计算器以MCS-51系列的8051AH单片机作为整个系统的控制核心,应用其强大的I/O功能和计算速度,构成整个计算器。通过矩阵键盘输入运算数据和符号,送入单片机进行数据处理。经单片机运算后控制LED数码管的输出。整体框图如图1所示: 图3 整体框图 本系统硬件主要由矩阵键盘、独立键盘I/O输入输出、数码管显示等主要部分组成。各模块的主要功能如下: (1)矩阵键盘将十六进制编码的数字送到单片机。 (2) 单片机扫描键盘信号并接收,对输入的键盘信号进行处理 (3) LED以动态扫描的方式移位显示每次输入的数据和最后的运算结果。实践设计的具体流程图如下图2所示:

4X4矩阵键盘

题目名称:4×4矩阵式键盘 队员:伍星刘晓峰陈仁凤 摘要: 本系统采用AT89S52为控制核心。采用4X4键盘,通过8位数码管显示动态扫描0—F 16个数字。 关键词: AT89S52键盘数码管显示 Abstract: This system USES AT89S52 devices as control https://www.sodocs.net/doc/702912456.html,ing 4X4 keyboard, through eight digital tube display dynamic scan 0-16 F. Keyword: AT89S52 Keyboard LED Display

目录 1 方案论证与比较 (3) 1.1采样方法方案论证 (3) 1.2处理器的选择方案论证................................................. 错误!未定义书签。 1.3周期性判别与测量方法方案论证................................. 错误!未定义书签。 2 系统设计 (3) 2.1总体设计 (3) 2.2单元电路设计 (5) 2.2.1 前级阻抗匹配和放大电路设计 (5) 2.2.2 AD转换及控制模块电路设计 (6) 2.2.3 功率谱测量单元电路设计 (6) 3 软件设计 (7) 4系统测试 (8) 5 结论 (9) 参考文献: (9) 附录: (9) 附1:元器件明细表: (9) 附2:仪器设备清单 (9) 附3:电路图图纸 (10) 附4:程序清单 (11)

1.方案论证与比较 1.1采样方法比较与选择 方案一:采用FPGA作为系统主控器。FPGA可实现各种复杂逻辑功能,规模大,集成度高,体积小,稳定性好,IO资源丰富、易于进行功能扩展,处理速度快,但适用于大规模实时性要求较高的系统,价格高,编程实现难度大。用液晶显示器进行键盘扫描,价格偏高,程序复杂,故不选择此方案 方案二: 采用Atmel公司的AT89S52单片机作为主控制器。AT89S52是一个低功耗、高性能8位单片机,片内含8 KB Flash片内程序存储器,256 Bytes RAM,32个外部双向输入/输出(I/O)口,5个中断优先级,2层中断嵌套中断等。价格便宜,使用方便,编程实现难度低,适合用来实现本系统的控制功能。 P0.0-P0.7端口作为数码管段选,P2.0-P2.7端口作为数码管位选,P3.0-P3.7作为键盘输入端口。8位LED数码管进行动态显示。 综上分析,本设计选择方案二。 2 系统设计 2.1 总体设计 16个键盘通过AT89S52进行动态扫描,在8位数码管可以动态显示0-F 16个数字。手动复位键可以达到清零的效果。

4X4矩阵式键盘输入程序

4*4键盘程序readkeyboard: begin: acall key_on jnz delay ajmp readkeyboard delay:acall delay10ms acall key_on jnz key_num ajmp begin key_num:acall key_p anl a,#0FFh jz begin acall key_ccode push a key_off:acall key_on jnz key_off pop a ret key_on: mov a,#00h orl a,#0fh mov p1,a mov a,p1 orl a,#0f0h cpl a ret key_p: mov r7,#0efh l_loop:mov a,r7 mov p1,a mov a,p1 orl a,#0f0h mov r6,a cpl a jz next ajmp key_c next: mov a,r7 jnb acc.7,error rl a mov r7,a ajmp l_loop error:mov a,#00h ret key_c:mov r2,#00h mov r3,#00h mov a,r6

mov r5,#04h again1:jnb acc.0,out1 rr a inc r2 djnz r5, again1 out1: inc r2 mov a,r7 mov r5,#04h again2:jnb acc.4,out2 rr a inc r3 djnz r5,again2 out2: inc r3 mov a, r2 swap a add a,r3 ret key_ccode:push a swap a anl a,#0fh dec a rl a ;行号乘4 rl a mov r7,a pop a anl a,#0fh dec a add a,r7 ret delay10ms: anl tmod,#0f0h orl tmod,#01h mov th0,#0d8h mov tl0,#0f0h setb tr0 wait:jbc tf0,over ajmp wait clr tr0 over:ret 单片机键盘设计 (二)从电路或软件的角度应解决的问题 软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软件延时的方法:在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。(这种消除抖动影响的软件措施是切实可行的。)

4乘4矩阵键盘总结

9

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 // | // | // P X.0 ----------|------|-----|-----| // //************************************************************ // 扫描方法二: 06.8.15 添加 4X4矩阵键盘线翻转识别法函数 // 硬件连接 : // | | | | // / | / | / | / | // P X.7 -------/--|---/--|--/--|--/--| 每个按键对应的识别码是:0x77,0x7b,0x7d,0x7e // | | | | // / | / | / | / | // P X.6 -------/--|---/--|--/--|--/--| 0xb7,0xbb,0xbd,0xbe // | | | | // / | / | / | / | // P X.5 -------/--|---/--|--/--|--/--| 0xd7,0xdb,0xdd,0xde // | | | | // / | / | / | / | // P X.4 -------/--|---/--|--/--|--/--| 0xe7,0xeb,0xed,0xee // | | | | // | | | | // P X.3 ----------| | | | // | | | // | | | // P X.2 ----------|------| | | // | | // | | // P X.1 ----------|------|-----| | // | // | // P X.0 ----------|------|-----|-----| // //***************************************************************** // 扫描方法三: 06.8.16 添加 4X4矩阵键盘行扫描识别法函数(只返回4个识别码) // 硬件连接 : // | | | |

FPGA矩阵键盘课程设计

FPGA课程设计报告 项目名称基于FPGA的4*4矩阵键盘的设计 专业班级通信1 学生姓名张 指导教师 2016年7 月10 日

摘要 本课程设计提出了基于FPGA的4*4矩阵键盘的设计,主要是在软件Quartus II 9.0这个环境中,以硬件描述语言Verilog进行编写程序,从而完成矩阵键盘的相关设计。主要由矩阵式键盘电路、显示电路等组成,实现过程是通过行扫描输入随机信号,列扫描判断哪一个键被按下,并最后由数码管显示该按键。此次课程设计完成了4*4矩阵键盘控制LED数码管显示系统的设计,该设计具有灵活性强,易于操作,可靠性高,广泛应用于各种场合的特点,是进行按键操作管理的有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身的要求,并能正确、实时、高效地显示按键信息,以提高工作效率和资源换利用率的意义。 关键词:数码管;矩阵键盘;按键;显示电路

Abstract This course is designed based on FPGA is proposed 4 * 4 matrix keyboard design, mainly in the Quartus II software 9.0 this environment, with the Verilog hardware description language program, so as to complete the related design of matrix keyboard. Main matrix keyboard circuit, display circuit and so on, complete the 4 * 4 matrix keyboard control LED digital tube display system design, the design has strong flexibility, easy operation, high reliability, widely used in various occasions. Into 4 * 4 matrix keyboard control LED digital tube display system design, design flexibility is strong, easy to operate, high reliability, widely used in various occasions. Matrix keyboard control system, can improve efficiency, and is an effective method to manage the keystrokes, it can improve the system accuracy, and is conducive to resource saving and reduce the requirement of the operator itself, and correctly, real-time and efficient to show the key information, in order to improve the work efficiency and the utilization ratio of resources in meaning. Keywords: Digital tube; Matrix keyboard; The key; Disply circuit

单片机4X4键盘扫描和显示课程设计

二、设计内容 1、本设计利用各种器件设计,并利用原理图将8255单元与键盘及数码管显示单元连接,扫描键盘输入,最后将扫描结果送入数码管显示。键盘采用4*4键盘,每个数码管可以显示0-F共16个数。将键盘编号,记作0-F,当没按下其中一个键时,将该按键对应的编号在一个数码管上显示出来,当在按下一个 键时,便将这个按键的编号在下一个数码管上显示,数码管上 可以显示最近6次按下的按键编号。 设计并实现一4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。 三、问题分析及方案的提出 4×4键盘的每个按键均和单片机的P1口的两条相连。若没有按键按下时,单片机P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。单片机定时对P1口进行程序查询,即可发现键盘上是否有按键按下以及哪个按键被按下。 实现4×4键盘的接口需要用到单片机并编写相应的程序来识别键盘的十六个按键中哪个按键被按下。因为此题目还要求将被按下的按键显示出来,因此可以用两个数码管来分别显示被按下的按键的行与列

表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列。例如0xD7是键盘的第二行第四列的按键 对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。 五、电路设计及功能说明 4×4键盘的十六个按键分成四行四列分别于P1端口的八条I/O 数据线相连;两个七段数码管分别与单片机的P0口和P2口的低七 位I/O数据线相连。数码管采用共阳极的接法,所以需要下拉电阻 来分流。结合软件程序,即可实现4×4键盘的接口及显示的设计。 当按下键盘其中的一个按键时,数码管上会显示出该按键在4×4键 盘上的行值和列值。所以实现了数码管显示按键位置的功能 四、设计思路及原因 对于4×4键盘,共有十六个按键。如果每个按键与单片机的一个引脚相连,就会占用16个引脚,这样会使的单片机的接口不够用(即使够用,也是对单片机端口的极大浪费)。因此我们应该行列式的接法。行列式非编码键盘是一种把所有按键排列成行列矩阵的键盘。在这种键若没有按键按下时,单片机从P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。因此0xEX(X表示任意4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X 二、实验内容

4X4扫描式矩阵键盘课程设计讲解

4x4矩阵键盘识别设计班级:1221201 专业:测控技术与仪器 姓名:涂勇 学号:2012 2012 0110 指导老师:钟念兵 东华理工大学 2016年1月1日

摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,电子式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N 个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用STM32嵌入式微处理器为核心,主要由矩阵式键盘电路、硬件电路、显示电路等组成,软件选用C语言编程。STM32将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

目录 第一章:系统功能要求--------------------------------------------------------4*4 矩阵式键盘系统概述------------------------------------------------ 本设计任务和主要内容--------------------------------------------------- 第二章:系统硬件电路的设计------------------------------------------------硬件系统主要思路和电路原理图- -------------------------------------- 硬件上键盘规划- --------------------------------------------------------- 第三章:系统程序的设计------------------------------------------------------程序的编写步骤----------------------------------------------------------- 编写的源程序-------------------------------------------------------------- 第四章:心得体会---------------------------------------------------------------

课程设计报告矩阵键盘控制

北华航天工业学院 《EDA技术综合设计》 课程设计报告 报告题目:矩阵键盘控制接口设计作者所在系部:电子工程系 作者所在专业:电子信息工程 作者所在班级: 作者姓名: 作者学号:0 指导教师姓名: 完成时间:2009-12-18

内容摘要 本课程设计所用实验器材主要有计算机和北京精仪达盛科技有限公司的EL教学实验箱。经编译、仿真,检查无误并且符合设计要求后,正确的将脉冲源、FLEX10K \ EPF10K10LC84-3芯片、5行×6列薄膜轻触按键键盘、数码管按设计要求连接好。将程序下载到实验箱的FLEX10K \ EPF10K10LC84-3芯片中,则可观察到预期的实验效果,即当按下某一键时,在数码管上显示该键对应的键值。 本课程设计需设计键盘接口消抖动元件(底层文本)和矩阵键盘接口电路(顶层文本)。在顶层文本中包含扫描信号发生模块、按键消抖动模块、按键译码模块、寄存器-选择器模块和数码管的译码模块。 关键词:VHDL语言 EDA技术按键消抖动电路键盘扫描电路键值译码电路按键码存储电路显示键值电路

目录 一概述 (5) 二方案设计与论证 (5) 三单元电路设计 (6) 1.键盘接口消抖动元件 (6) 2.时钟产生电路 (6) 3.键盘扫描电路 (7) 4.键盘译码电路 (7) 5.寄存器_选择器模块电路 (7) 6.译码模块电路 (7) 四器件编程与下载 (8) 五性能测试与分析 (16) 六实验设备 (16) 七心得体会 (16) 八参考文献 (17)

课程设计任务书

一、概述 本课程设计的基本原理是在时钟信号的控制下,使数码管上显示所按下的键值,并 且能够保持直到下一个按键被按下。首先,构思一个8×4的矩阵键盘控制顶层电路的 模块划分图兼端口及内部信号定义图,再用VHDL语言编辑文本程序,需先录入底层文 件(键盘接口消抖动元件DEBOUNCING的描述)再录入键盘接口电路主程序,保存编译 并检查程序是否有语法错误,再仿真观察波形是否符合所预期的设计要求,当一切都满 足要求后,即可将程序下载到实验箱的FLEX10K \ EPF10K10LC84-3芯片中。正确的将 脉冲源、FLEX10K \ EPF10K10LC84-3芯片、5行×6列薄膜轻触按键键盘、数码管按设 计要求连接好。再将程序下载到实验箱的FLEX10K \ EPF10K10LC84-3芯片中,则可观 察到预期的实验效果,即当按下某一键时,在数码管上显示该键对应的键值。如:当按 下5时,数码管显示05。 二、方案设计与论证 把该矩阵键盘控制器分为两部分进行设计,先设计键盘接口消抖动电路,再设计键盘接口电路的主程序。 在主程序中包含时序产生电路、键盘扫描电路、弹跳消除电路、键盘译码电路、按键码存储电路、显示电路模块并且分别进行分析来实现所需的功能。 实验仪器中4×8矩阵键盘的电路原理图如图所示 图1. 4×8矩阵键盘的电路原理图

AVR简单好用的4x4矩阵键盘

AVR简单好用的4x4矩阵键盘 // Target : ATMEGA16// Crystal: 8.0000Mhz //key.h #ifndef _4X4_H_#define _4X4_H_ #define No_key 255 #define key_port PORTB#define key_port_ddr DDRB#define key_port_pin PINB unsigned char keyboard_Scan(void); #endif //key.c #include #include #include “key.h” const unsigned char key_table[16] = { 1, 2, 3,12, 4, 5, 6,13, 7, 8, 9,14, 10,0,11,15, }; void delay_1ms(void)//1ms 延时函数{ unsigned int i; for (i=0;i//4x4 矩阵键盘 扫描函数 unsigned char keyboard_Scan(void){ unsigned char temp,key,row,Column; key_port_ddr = 0b00001111;// 高四位输入行线/低四位输出列线key_port= 0b11110000;// 高四位打开上拉电阻/低四位输出低电平delay_nus(5);// 延时5us if((key_port_pin & 0xF0)!= 0xF0)// 作初检查有否键按下,没有,就返回{// 如果行 线不全为1,可能有键按下delay_nms(5);// 延时去抖动 //设置列线初始值 3~0=1110for(Column=0,key_port=0b11111110;Column//main.c #include #include

4X4键盘扫描实验

44 键盘扫描实验 实验目的 1、学习HDL程序的基本设计技巧; 2、掌握矩阵键盘的扫描原理和使用方法。 Verilog程序: module hex_keypad(Col,Code,show,show1,count,scan,clock,Row); output[3:0] Code,Col,count; //定义列信号Col、行列信号共同决定的 输出代码Code、以及计数变量count output[7:0] show,show1; //定义七段显示变量show、show1 input[3:0] Row; //定义输入行信号Row input scan; //定义数码管选择信号scan input clock; //定义时钟信号clock reg[3:0] Col,Code,count; //将输出信号定义为reg型 reg[7:0] show,show1; reg[1:0] cn; //定义reg型变量cn,用于计数 reg reset,count_up,count_down; //定义变量reset用于计数清零,count_up 开始加计数,count_down开始减计数reg[15:0] times1,times2; //定义变量times1、times2用于决定开 始计数的时间 assign scan=1'b1; //将数码管选择信号赋值为1

always@(posedge clock) //产生列信号 if(cn==4)cn<=0; else cn<=cn+1; always@(cn) case(cn) 2'b00:Col=4'b1110; 2'b01:Col=4'b1101; 2'b10:Col=4'b1011; 2'b11:Col=4'b0111; endcase always@(posedge clock) //行列信号共同决定输出代码Code case({Row,Col}) 8'b1110_1110:Code=4'h0; 8'b1110_1101:Code=4'h1; 8'b1110_1011:Code=4'h2; 8'b1110_0111:Code=4'h3; 8'b1101_1110:Code=4'h4; 8'b1101_1101:Code=4'h5;

4x4矩阵键盘电路连接图和快速扫描完整程序

4*4矩阵键盘电路连接图和快速扫描完整程序 #include #include #define uint unsigned int #define uchar unsigned char uchar code wei[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb9,0xbf,0x89,0xad,0x7f,0xff}; uchar temp=0xfe; //键盘扫描前赋给P1口的试探值 uchar beis=0x00; //键盘扫描的识别倍率 sbit LE1=P2^0; sbit LE2=P2^1; uchar key,sm;//key是扫描得到的键值; //////////////////////////////////////////////////////////////////// //显示函数,静态显示 void xianshi(uchar x) { uint b=200; LE2=1; P0=0X0F; LE2=0;

P0=wei[x]; while(b--); LE1=0; } //////////////////////////////////////////////////////////////////// //4*4矩阵扫描,键值保存在key中 void key_4x4() { P1=temp; //初值uchar temp=0xfe; sm=P1; sm=sm&0xf0; //取P1口高四位的值,如果为0就表示无键按下if(sm!=0xf0) { switch(sm) { case 0x70:{key=0+4*beis;break;} case 0xb0:{key=1+4*beis;break;} case 0xd0:{key=2+4*beis;break;} case 0xe0:{key=3+4*beis;break;} default :{key=10+4*beis;break;} } } else { if(temp==0xf7) { temp=0xfe; } else { temp=_crol_(temp,1); } beis++; if(beis==4)beis=0; } } ////////////////////////////////////////////////////////////////////

相关主题