第六讲 独立按键和矩阵键盘 第七讲 数码管要点

第六讲 独立按键和矩阵键盘 第七讲 数码管要点
第六讲 独立按键和矩阵键盘 第七讲 数码管要点

第六讲独立按键和矩阵键盘

按键是什么东西,我想这个就不必由我向各位阐述了。嗯,如你所见,按键种类繁多,功能有简有繁,极大的充斥着我们的生活。但是无论如何,所有的按键其实都有一个原型,来源于同一种原理,所有的按键无论多复杂,多华丽,都是从这样一个原型发展而成的。好比你就算长的再帅,你也是只猩猩变来的,呵呵。我们平日所见到的绝大部分的按键,其实都可以归类为一种,叫“接触式按键”。下图为一个典型的接触式按键(又称轻触开关)。

需要特别说明的是,这里说的“接触”,是指机械层面上的接触,而不是感光或者某些特殊涂层(比如触摸屏)一类的接触。所以,按键的工作特性其实是一种机械特性,下文会详细说明。

如上图,请对照图一想象,1、2、3、4 分别对应按键的四个引脚,其中蓝色的线表示按键未被按下之时的状态,我成为初始状态,它是不导通的;而绿色

的线是却永久导通的。各位明白了么,其实是两个相同的结构连在一起了。我们只要将需要按键开关作用的线路分别接在1、3 和2、4 的任意取一组合,概括起来就是(1,2)、(1,4)、(3,2)、(3,4)四种组合,都可以起到我们预期的开关作用。

相信以上说明使大家对按键的工作原理有了个比较清晰的认识了,现在来说说一个小知识。先看下图(图4):

首先说明的是,上图的连法是不允许的,因为当按键按下之后,电源和地短接,会将导线直接烧毁。但是此处用作特例,假设导线不会烧毁。现在来提出一个问题,当按键按下以后,请问如果这时用万用表测量导线上任何一处的电压,得到的结果是VCC 还是GND 的电压?

答案是:GND,即表示测出的电压为0V。为什么呢,因为导线上,对于两端的电平是一种类似于程序语言逻辑运算里面的“与”,即对于导线两端:有零即为零,只有全为一是才为一。理解了这点,按键的工作前提就有了。

键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。在这一讲中我们介绍一下单片机中键盘使用。

单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该IO口赋一高电平,然后让单片机不断地检测该I/O口是杏变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。

我们先来说一下,按键常常遇到的问题—抖动问题。

还以图四为例,按键未按下之前,图四按键左端的导线因为连在VCC 上而显示高电平,右端显示低电平,按键按下后,按键闭合,整个导线都显示低电平,然后按键松开,又回到按键按下之前的点评状态。如果只考察按键左端的电平变化,应该是上图中所显示的一个负脉冲波形。但是,实际上,正确的波形应该是下图。相比于上图,大家都看到了在高低电平直接有一段锯齿一样的波形,这就是所谓的按键抖动。

为什么会有按键抖动呢,原因很简单,接触式按键是靠机械的接触来实现开关作用的。这种接触方式就注定了它要经历一个“接触不稳定——正在稳定中——彻底稳定”的一种过程。就好比你用手抓紧一颗石头,即使你一开始就很用力的握紧,也不可能马上就达到最紧的状态,也要经历一个从握住到最紧握的过程。那么在这个过程里,接触式按键就处于一种徘徊在“闭合”与“断开”两者之间的状态。体现在电路中,就是在一小段时间内有非常多的“按下——抬起”动作。而这段抖动的时间,大概是10~20 毫秒,依不同的环境条件而定。

解决这个问题常见的方法有软件去抖动和硬件去抖动。

我们解释一下抖动:关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们再首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。

独立按键:

我们先将一下独立按键的使用方法,开发板独立按键电路图如下:

独立按键一共5个,分别连接在单片机的P3.0到P3.4口。去抖动的方式,我们采用软件延时的方法。过程如下:

1.先设置IO口为高电平(一般上电默认就为高)

2.读取IO口电平确认是否有按键按下

3.如有IO电平为低电平后,延时几个ms

4.再读取该IO电平,如果任然为低电平,说明对应按键按下

5.执行相应按键的程序

一个独立键盘程序:基础篇第六个,独立按键控制led灯

/*********************************************************************

独立按键控制led灯两灭

//独立按键排线连接P3.0~P3.4口

**********************************************************************/

#include "reg51.h"

sbit key1=P3^0;

sbit key2=P3^1;

sbit key3=P3^2;

sbit key4=P3^3;

sbit key5=P3^4;

/*******延时函数**************************************/

// 定义一个演示函数,定时时间大概为一个毫秒。

void delay(unsigned int i)

unsigned char j;

for(i; i > 0; i--)

for(j = 100; j > 0; j--);

}

/***********************************************************************/ main()

{

P0= 0xff;//初始化P0口,全部置1

P2 = 0xff;//初始化P2口,关闭所有led灯

while(1)

{

P2 = 0xff;//初始化P2口,关闭所有led灯

if(key1==0)

{

delay(5);//为去抖动加的延时,利用软件延时

if(key1==0)

P2 = 0xfe;

while(!key1); //等待按键松开,如果将这句去掉的话,

//那么led灯保持打开状态。

}

if(key2==0)

{

delay(5);

if(key2==0)

P2 = 0xfd;

while(!key2); //等待按键松开

}

if(key3==0)

{

delay(5);

if(key3==0)

P2 = 0xfb;

while(!key3); //等待按键松开

}

if(key4==0)

{

delay(5);

if(key4==0)

P2 = 0xf7;

while(!key4); //等待按键松开

}

if(!key5)

{

delay(5);

if(!key5)

P2 = 0xef; // if(!key4) 与if(key4==0) 表达的是一个意思。就是key4按键按下(按下相应管脚为低电平),就会执行后面的语句。

while(!key5); //等待按键松开

}

}

}

连接好电路图,下载独立按键控制led灯.hex,观察实验结果

矩阵键盘

独立键盘与单片机连接时,每一个按键都需要单片机的一个I/O口若某单片机系统需较多按键,如果用独立按键便会占用过多的I/O口资源。单片机系统中I/O口资源往往比较宝贵,当用到多个按键时为了节省I/O口口线,我们引入矩阵键盘。

我们以4X4矩阵键盘为例讲解其工作原理和检测方法。将16个按键排成4行4列,第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,这样便一共有4行4列共8根线,我们将这8根线连接到单片机的8个I/O口上,通过程序扫描键盘就可检测16个键。用这种方法独立按键控制led 灯.hex

我们也可实现3行3列9个键、5行5列25个键、6行6列36个键等。

无论是独立键盘还是矩阵键盘,单片机检测其是否被按下的依据都是一样的,也就是检测与该键对应的I/O口是否为低电平。独立键盘有一端固定为低电平,单片机写程序检测时比较方便。而矩阵键盘两端都与单片机I/O口相连,因此在检测时需人为通过单片机I/O口送出低电平。检测时,先送一列为低电平,其余几列全为高电平(此时我们确定了列数),然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平(这时我们又确定了行数),则我们便可确认当前被按下的键是哪一行哪一列的,用同样方法轮流送各列一次低电平,再轮流检测一次各行是否变为低电平,这样即可检测完所有的按键,当有键被按下时便可判断出按下的键是哪一个键。当然我们也可以将行线置低电平,扫描列是否有低电平。这就是矩阵键盘检测的原理和方法。

首先看一下电路图

上图是一个4X4 的矩阵键盘,一共是16 个按键。我们照习惯称横为“行”,“竖”为列。那么5、6、7、8 我们称之为“行线”,则1、2、3、4 称为“列线”。要正确记住各个行列线各自对应的IO。注意看,每一个按键的两端,都分别接在某一个列线和行线上,即:“行线和列线是通过某个按键的按下和抬起实现联通和断开的”,和“导线两端上的信号是经过“与”的关系再体现到导线上的。”这两句话便构成了矩阵键盘扫描的全部。要理解好,理解不了就背下来。

现在详细讲述一下矩阵键盘扫描的原理和步骤:

扫描矩阵键盘,即是把某一条(只有一条)行线置为低电平,而列线全部置为输入方向,然后检测列线,如果检测到某一条列线是低电平,那么就表示位于这条列线与输出低电平的行线的交点处的按键被按下了。要扫描16个按键,就依次以这样的方法扫描16次,之后就可以确定哪一个按键被按下了。当然这里也少不了延时消除按键抖动的环节。

下面看一下程序

/******************************************

矩阵键盘控制led显示实验

*******************************************/

#include"reg51.h"

#define key_port P0 //定义矩阵键盘扫描的端口

sbit hc573_en = P1^3;

unsigned char key_value;

void delay(unsigned int z) //延时函数

{

unsigned int x,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);

}

void key_scan()

{

unsigned char temp; //定义一个临时变量,用来读取键盘扫描端口的值,

key_port = 0x7f; //第一行送低电平

delay(5);

temp=key_port; //获取按键状态,

switch(temp)

{

case 0x77: key_value=1;break;

case 0x7b: key_value=2;break;

case 0x7d: key_value=3;break;

case 0x7e: key_value=4;break;

default:break;

}

while(key_port!=0x7f); // 等待按键松下

key_port = 0xbf; //第二行送低电平 delay(5);

temp=key_port;

switch(temp)

{

case 0xb7: key_value=5;break;

case 0xbb: key_value=6;break;

case 0xbd: key_value=7;break;

case 0xbe: key_value=8;break;

default:break;

}

while(key_port!=0xbf); // 等待按键松下

key_port = 0xdf; //第三行送低电平 delay(5);

temp=key_port;

switch(temp)

{

case 0xd7: key_value=9;break;

case 0xdb: key_value=10;break;

case 0xdd: key_value=11;break;

case 0xde: key_value=12;break;

default:break;

}

while(key_port!=0xdf); // 等待按键松下

key_port = 0xef; //第四行送低电平 delay(5);

temp=key_port;

switch(temp)

{

case 0xe7: key_value=13;break;

case 0xeb: key_value=14;break;

case 0xed: key_value=15;break;

case 0xee: key_value=0;break;

default:break;

}

while(key_port!=0xef); // 等待按键松下

}

main()

{

hc573_en=0;

P1=0; // 执行这句是为了屏蔽数码管和点阵hc573_en=1; //关闭锁存器

P2=0;

key_value=0xff;

while(1)

{

key_scan();

P2=~key_value;

}

}

下载矩阵键盘控制led.hex,看实验结果

第七讲数码管

我们先看看什么是数码管,

上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。

不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。数码管内部电路如下图所示,从右图可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。而它们的公共端又可分为共阳极和共阴极,中间图为共阴极内部原理图,右图为共阳极内部原理图。

上图展出了常用的两种数码管的引脚排列和内部结构。总所周知,点亮发光二极管就是要给予它足够大的正向压降。所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。如上图左(一共a、b、c、d、e、f、g、DP 八段),如果要显示“1”则要点亮b、c 两段LED;显示“A”则点亮a、b、c、e、f、g 这六段LED;我们还知道,既然LED 加载的是正向压降,它的两端电压必然会有高低之分:如果八段LED 电压高的一端为公共端,我们称之为共阳极数码管(如上图中);如果八段LED 电压低的一段为公共端,则称之为共阴极数码管(上图右)。所以,要点亮共阳极数码管,则要在公共端给予高于非公共端的电平;反之点亮共阴极数码管,则要在非公共端给予较高电平。

对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮了。如果想要显示出一个8字,并且把右下角的小数点也点亮的话,可以给8个阳极全部送高电平,如果想让它显示出一个0字,那么我们可以除了给第“g, dp”这两位送低电平外,其余引脚全部都送高电平,这样它就显示出0字了。想让它显示几,就给相对应的发光二极管送高电平,因此我们在显示数字的时候首先做的就是给0-9十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。

共阳极数码管其内部8个发光二极管的所有阳极全部连接在一起,电路连接时,公共端接高电平,因此我们要点亮的那个发光管二极管就需要给阴极送低电平,此时显示数字的编码与共阳极编码是相反的关系,数码管内部发光二极管点亮时,也需要5mA以上的电流,而且电流不可过大,否则会烧毁发光二极管。由于单片机的I/O口送不出如此大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,本实验板上使用的是74HC573锁存器,其输出电流较大,电路接口简单,可借鉴使用。

一般共阳极数码管更为常用,为什么呢?这是因为数码管的非公共端往往接在IC 芯片的IO上,而IC 芯片的驱动能力往往是比较小的,如果采用共阴极数码管,它的驱动端在非公共端,就有可能受限于IC芯片输出电流不够而显示昏暗(比如51单片机),要外加上拉电阻或者是三极管加大驱动能力。所以使用共阳数码

管的好处是:将驱动数码管的工作交到公共端(一般接驱动电源),加大驱动电源的功率自然要比加大IC芯片IO口的驱动电流简单许多。另一方面,这样也能减轻MCU的负担。

当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。

一般单位数码管有10个引脚,二位数码管也是10个引脚,四位数码管是12个引脚,关于具体的引脚及段、位标号大家可以查询相关资料,最简单的办法就是用数字万用表测量,若没有数字万用表也可用5V直流电源串接1k电阻后测量,将测量结果记录,通过统计便可绘制出引脚标号。

数码管静态显示

当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字必定一样,数码管的这种显示方法叫做静态显示。

从电路图可以看出,本开发板使用的是共阳极数码管,在每段数码管端加上一个470R的限流电阻。

下面看一下程序:

/**************************************************************************

* 标题: 试验数码管上如何显示数字(共阳极) * * * * 连接方法:P0 与JP3 用8PIN排线连接 * *************************************************************************** * * * 请学员认真消化本例程,用单片机脚直接控制数码管*

**************************************************************************/ #include

void delay(unsigned int i); //函数声名

// 此表定义 LED 的字模

unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D, ~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};

main()

{

unsigned int LedNumVal ; //定义变量

while(1)

{

// 将字模送到P0口显示

LedNumVal++;

P0 = LED7Code[LedNumVal%16]&0x7f; //LED7 0x7f为小数点共阴和共阳此处也是不一样;

delay(62000); //调用延时程序

}

}

/***************************************************************** * * * 延时程序 * * * *****************************************************************/ void delay(unsigned int i)

{

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--);

}

下载数码管静态显示.hex,连接排线,观察开发板运行结果

动态数码管

首先我们来看一下开发板上的电路原理图:

本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。

下面看一下程序:

/************************************************************************* *数码管动态显示 * **************************************************************************/

#include

sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制

sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制

sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制

sbit EN573 = P1^3; //573锁存器使能端口

sbit MOSI =P3^7; //定义管脚

sbit R_CLK =P3^5; //定义管脚

sbit S_CLK =P3^6; //定义管脚

void delay(unsigned int i); //函数声名

char DelayCNT;

//此表为 LED 的字模, 共阴数码管 0-9 -

unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x40};

void init_all()

{

unsigned int i;

P0=0xff;

P1=0xf0;

P2=0xff;

P3=0xff;

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

{

MOSI=1;

S_CLK=0;

delay(1);

S_CLK=1;

delay(1);

if(i%16==0)

{

R_CLK=0;

delay(1);

R_CLK=1;

delay(1);

}

}

P3=0xff;

}

/************主函数**********************/

main()

{

unsigned int i,LedNumVal ;

unsigned int LedOut[10];

DelayCNT=0;

init_all(); // 主要用来屏蔽led点阵

EN573=0; //打开573

while(1) //进入循环状态

{

if(++DelayCNT>=50)

{

DelayCNT=0; //延时计数每扫描一次加一次 ++LedNumVal; //每隔50个扫描周期加一次

}

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;

LedOut[2]=Disp_Tab[LedNumVal%100/10];

LedOut[3]=Disp_Tab[LedNumVal%10];

LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位

LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点

LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位

LedOut[7]=Disp_Tab[LedNumVal%10]; //个位

for( i=0; i<8; i++) //实现8位动态扫描循环

{

P0 = LedOut[i]; //将字模送到P0口显示

switch(i)

{

case 0:LS138A=0; LS138B=0; LS138C=0; break;

case1:LS138A=1; LS138B=0; LS138C=0; break;

case 2:LS138A=0; LS138B=1; LS138C=0; break;

case 3:LS138A=1; LS138B=1; LS138C=0; break;

case 4:LS138A=0; LS138B=0; LS138C=1; break;

case 5:LS138A=1; LS138B=0; LS138C=1; break;

case 6:LS138A=0; LS138B=1; LS138C=1; break;

case 7:LS138A=1; LS138B=1; LS138C=1; break;

}

delay(100);

}

4乘4矩阵键盘输入数码管显示四位数

综合课程设计三相步进电机控制器电路的设计 学生姓名__________

指导教师_________ 课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1?谢自美?电子线路设计?实验?测试.[M]武汉:华中理工大学出版社,2000 年 2. 阎石. 数字电子技术基础. [M] 北京:高等教育出版社,2006年 3. 童诗白、华成英.模拟电子技术基础. [M] 北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M] 北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M] 北京:人民 邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

一、概述 本次毕设的题目是:三相步进电机控制电路的设计。本次毕设使用80C51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在(1)三相单三拍,(2)三相双三拍, (3)三相六拍三种工作方式下正常工作;能实现的功能有:启动/停止控制、方向控制;速度控制;用LED数码管显示工作方式。键盘输入工作频率。本次课程设计采用80C51单片机作为主控芯片,程序采用C语言来编写,驱动电路采用ULN2003A集成电路,显示采用 7SEG-MPX4-CC卩四位共阴数码管,P0接段码,并用8只1K欧左右电阻上拉。P2的4位10 口接位选码。正转,数码管显示1。反转,数码管显示2.不转,数码管显示0.采用Proteus软件进行仿真。在Keil uVsuon3编程环境下编程和编译生成HEX文件,导入到 80C51单片机,实现对各个模块的控制,实现我们所需要的功能。 本次课程是对毕业设计的基础设计,即实现4x4键盘输入,数码管显示输入数字的设计。 二、方案论证 1步进电机驱动方案选择 方案1 :使用功率三极管等电子器件搭建成功率驱动电路来驱动电机的运行。这种方案的驱动电路的优点是使用电子器件联接,电路比较简单,但容易受 干扰,信号不够稳定,缺点是器件较大而不便电路的集成,使用时很不方便,联接时容易出错误。 方案2:使用专门的电机驱动芯片ULN2003A来驱动电机运行。驱动芯片的优点是便于电路的集成,且驱动电路简单,驱动信号很稳定,不易受外界环境的干扰,因而设计的三相步进电机控制系统性能更好。 通过对两种方案的比较,我选择方案2使用ULN2003A S机驱动芯片来作为驱动。 2数码管显示方案选择 方案1:把所需要显示的数据通过专用的七段显示译码器(例如7448)的转换输出给LED显示屏。优点是输出比较简单,可以简化程序,但增加了芯片的费用,电路也比较复杂。 方案2:通过程序把所要的数据转化为七段显示的数据,直接通过单片机接 口来显示,其优点是简化了电路,但增加了软件编写的负担。 通过对两种方案进行比较,我选择通过软件编写来输出显示信号,即单片机直接和显示器相连。 3控制状态的读取 方案1:把按键接到单片机的中断口,若有按键按下,单片机接收到中断信 号,再通过软件编写的中断程序来执行中断,优点是接线简单,简化了电路,但软件编写较为复杂,不易掌握。

矩阵键盘电路设计

课程设计 题目矩阵键盘电路设计教学院计算机学院 专业计算机应用技术班级 姓名 指导教师 2010 年01 月12 日

前言.................................................................... 第一章需求分析......................................................... 功能描述......................................................... 功能分析......................................................... 第二章系统的原理及分析................................................. 用到的知识点的介绍,知识点使用的总体思路 第三章详细设计......................................................... 硬件设计 系统结构图,元器件的选择等 软件设计 所设计的软件关键模块的程序流程 第四章测试............................................................ 运行结果分析等 第五章总结............................................................. 参考文献................................................................ 附录 关键程序代码........................................................

4乘4矩阵键盘输入数码管显示四位数

沈阳航空航天大学 综合课程设计三相步进电机控制器电路的设计 班级 94020101 学号 2009040201023 学生姓名 XXXXXXXXX 指导教师常丽东

课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1.谢自美. 电子线路设计·实验·测试. [M]武汉:华中理工大学出版社,2000年 2.阎石. 数字电子技术基础. [M]北京:高等教育出版社,2006年 3.童诗白、华成英.模拟电子技术基础. [M]北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M]北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M]北京:人民邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

第六讲 独立按键和矩阵键盘 第七讲 数码管要点

第六讲独立按键和矩阵键盘 按键是什么东西,我想这个就不必由我向各位阐述了。嗯,如你所见,按键种类繁多,功能有简有繁,极大的充斥着我们的生活。但是无论如何,所有的按键其实都有一个原型,来源于同一种原理,所有的按键无论多复杂,多华丽,都是从这样一个原型发展而成的。好比你就算长的再帅,你也是只猩猩变来的,呵呵。我们平日所见到的绝大部分的按键,其实都可以归类为一种,叫“接触式按键”。下图为一个典型的接触式按键(又称轻触开关)。 需要特别说明的是,这里说的“接触”,是指机械层面上的接触,而不是感光或者某些特殊涂层(比如触摸屏)一类的接触。所以,按键的工作特性其实是一种机械特性,下文会详细说明。 , 如上图,请对照图一想象,1、2、3、4 分别对应按键的四个引脚,其中蓝色的线表示按键未被按下之时的状态,我成为初始状态,它是不导通的;而绿色

的线是却永久导通的。各位明白了么,其实是两个相同的结构连在一起了。我们只要将需要按键开关作用的线路分别接在1、3 和2、4 的任意取一组合,概括起来就是(1,2)、(1,4)、(3,2)、(3,4)四种组合,都可以起到我们预期的开关作用。 相信以上说明使大家对按键的工作原理有了个比较清晰的认识了,现在来说说一个小知识。先看下图(图4): 首先说明的是,上图的连法是不允许的,因为当按键按下之后,电源和地短接,会将导线直接烧毁。但是此处用作特例,假设导线不会烧毁。现在来提出一个问题,当按键按下以后,请问如果这时用万用表测量导线上任何一处的电压,得到的结果是VCC 还是GND 的电压? 答案是:GND,即表示测出的电压为0V。为什么呢,因为导线上,对于两端的电平是一种类似于程序语言逻辑运算里面的“与”,即对于导线两端:有零即为零,只有全为一是才为一。理解了这点,按键的工作前提就有了。 键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。在这一讲中我们介绍一下单片机中键盘使用。 单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该IO口赋一高电平,然后让单片机不断地检测该I/O口是杏变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。 我们先来说一下,按键常常遇到的问题—抖动问题。

4×4矩阵键盘数码管显示 最简便易懂的键盘扫描方法

/////4×4矩阵键盘按键为1-16,按键显示0-9、a-f; ////////////////// #include #define uchar unsigned char uchar key=0; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e,0xc0}; void show(uchar key) { P0=table[key];//显示数值 } void Scan_key()//扫描键盘 { uchar m; P1=0xff;//数码管全亮 P2=0x0f;//P2口赋初值低位1高位0 m=P2; switch (m) { case 0x0e: { P2=0xf0;

m=P2; switch (m) { case 0xe0:{key=0;show(key);break;} case 0xd0:{key=1;show(key);break;} case 0xb0:{key=2;show(key);break;} case 0x70:{key=3;show(key);break;} default:break; } break; } case 0x0d: { P2=0xf0; m=P2; switch (m) { case 0xe0:{key=4;show(key);break;} case 0xd0:{key=5;show(key);break;} case 0xb0:{key=6;show(key);break;} case 0x70:{key=7;show(key);break;} default:break; } break; } case 0x0b: { P2=0xf0; m=P2; switch (m) { case 0xe0:{key=8;show(key);break;} case 0xd0:{key=9;show(key);break;} case 0xb0:{key=10;show(key);break;} case 0x70:{key=11;show(key);break;} default:break; } break; } case 0x07: { P2=0xf0; m=P2; switch (m)

实验四 动态显示与矩阵键盘的编程和综合应用设计(学生版)

实验四综合应用设计——数码管动态显示与矩阵键盘的编程 一、实验目的: 1、掌握单片机I/O技术和程序设计等综合知识。 2、了解矩阵式键盘的内部结构和数码管显示的基本原理,掌握至少一种常用的按键识别方法。 3、熟练掌握数码管动态显示和矩阵键盘识别的综合应用。 二、实验内容: 设计一个矩阵键盘的识别和动态显示综合的系统,控制8个8段数码管动态扫描显示4*4矩阵键盘上按下的按键所对应的值。 三、实验要求: 给定一个4*4的矩阵键盘,16个按键对应显示0123456789ABCDE,第1次按下某按键在第一个8段数码管上显示对应的值,第2次在第二个数码管上显示,以此类推,第9次又在第一个数码管上显示,以此循环下去。其中ABCDE在数码管上无法表达,可以用其它代替,例如:B用8表示,D用0表示,E用H表示等。 四、实验设备及实验耗材: 计算机一台,W A VE6000软件模拟器,完成ISP下载的XLISP软件,XL1000单片机综合仿真实验仪一台(8个8段数码管,4*4矩阵键盘一个,89C51一片,9针对9针的串口线一条,USB电缆一条) 五、实验基本原理与方法: 查阅相关资料掌握矩阵式键盘的内部结构,8段数码管动态显示原理和常用的按键识别方法,建议使用按键识别方法中最常用的“行扫描法”编写程序。结合动态显示技术和矩阵键盘识别技术。 六、实验方案设计: 1、采用哪些I/O口完成通信,采用何种按键识别的方法,如何综合动态显示技术和矩 阵键盘识别技术。 2、说明该程序的功能。 3、硬件连接原理图。 七、实验步骤: 1.弄清实验内容和实验要求。 2.学习相关理论知识,提出实验方案,画出程序流程图。

LED数码管显示矩阵键盘按键的设计

任务九设计说明2 一、电路原理及仿真图: 二、程序设计: #include #define uchar unsigned char uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0 x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0 x40}; uchar key; void get(){ uchar a; P1=0x0f; //按下按钮// a=P1^0x0f; switch(a) //确定行// { case 1:key=0;break; case 2:key=4;break; case 4:key=8;break; case 8:key=12;break; case 0:key=16;} P1=0xf0; a=P1^0xf0; switch(a) //确定列//{ case 16:key=key+3;break; case 32:key=key+2;break; case 64:key=key+1;break;

case 128:key=key+0;}} void main(){ P0=display[16]; get(); P0=display[key]; } 程序完成两个功能,首先扫描键盘,检测是否有按键按下并计算键值。 然后如果有按键按下则驱动数码管显示相应键值,否则显示”-“符号。 三、设计说明 如电路原理图所示,图中矩阵键盘和P3端口连接,共阳极数码管的段选端和单片机的P0口连接,位选直接接到高电平,使得数码管始终处于选通状态。系统启动后,单片机逐行扫描键盘,当没有按键按下时,驱动数码管显示“-”符号,当检测到有按键按下时,单片机将相应键值对应的数码编码送至P0端口,驱动数码管以十六进制方式显示被按下的按键的键值。四、遇到的问题 首先遇到的问题是系统启动后数码管没有任何显示,仔细查看仿真现象后发现P0口始终为高阻状态,于是怀疑是数码管极性错误。再检查数码管型号后发现果然使用了共阴极数码管,于是换成共阳极数码管后终于有了显示。其次是希望键值从键盘的左下角起始,即左下角键值为0。但由于对键盘的扫描方向理解的不是很透彻,导致调试了很多次,键值排列顺序都不尽人意。不过最终还是达到了设计要求。

单片机实验报告——矩阵键盘数码管显示

单片机实验报告 信息处理实验 实验二矩阵键盘 专业:电气工程及其自动化 指导老师:高哲 组员:明洪开张鸿伟张谦赵智奇 学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日

矩阵键盘 一、实验内容 1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。按其它键没有结果。 二、实验目的 1、学习独立式按键的查询识别方法。 2、非编码矩阵键盘的行反转法识别方法。 3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。 4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。 5、掌握利用Keil51软件对程序进行编译。 6、会根据实际功能,正确选择单片机功能接线,编制正确程序。对实验结果 能做出分析和解释,能写出符合规格的实验报告。 三、实验原理 1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。 2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。 3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然

后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。 行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。 由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。 行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

矩阵键盘控制数码管

专业综合设计报告 项目名称:基于矩阵键盘和LED数码管显示器的简易 人机界面设计 学生姓名: 同组同学: 专业名称: 班级: 指导教师: 项目起止日期:2012年03月12日至2012年03月30日

目录 摘要 (3) 1、概述 (3) 2、总体设计方案 (3) 2.1总体设计要求 (3) 2.2系统框图 (4) 3、系统硬件设计 (4) 3.1单片机的最小系统 (5) 3.1.1电源电路 (5) 3.1.2复位电路 (5) 3.1.3晶振电路 (6) 3.2 LED数码管显示部分 (6) 3.3矩阵键盘 (7) 3.3.1键盘的工作原理 (7) 3.3.2键盘检测原理 (7) 4、系统软件设计 (9) 4.1 软件设计思想 (9) 4.2 主程序设计 (10) 4.3 子程序设计 (11) 4.3.1 数码管显示程序设计 (11) 4.3.2 键盘检测程序设计 (11) 4.3.3延时函数程序设计 (14) 5、系统调试 (14) 6.设计体会 (15) 参考文献 (15)

摘要 单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。本设计选用AT89S52芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。在硬件电路的基础上加上软件程序的控制来实现本设计。其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。关键词:AT89S52芯片;4*4矩阵键盘;键盘识别;LED数码管 1、概述 随着单片机系统的日益更新,以及人们对产品的人机交互能力的不断提高;使得单片机系统的人机界面设计能力成为学习单片机的一项重要的基础内容。而4*4键盘的操作和LED数码管的动态显示是人机界面设计中最基础的内容,掌握这些基础的设计能力对以后的学习研究是非常必要的。 2、总体设计方案 2.1总体设计要求 本系统采用单片机AT89S52为数码管的控制核心,制造一种简单的4*4键盘检测显示,能够在目测条件下四位数码管各段亮度均匀、充足,本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。 根据设计要求,确定的设计方案如下: 2.1.1 选择AT89S52单片机作为整个系统的核心器件,对整个系统进行总体

单片机独立按键和矩阵按键

单片机按键(独立按键和矩阵按键) 独立按键 常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如图8-6 所示。 图8-6 独立式按键原理图 4 条输入线接到单片机的IO 口上,当按键K1 按下时,+5V 通过电阻R1 然后再通过按键K1 最终进入GND 形成一条通路,那么这条线路的全部电压都加到了R1 这个电阻上,KeyIn1 这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V 就应该是等电位,是一个高电平。我们就可以通过KeyIn1 这个IO 口的高低电平来判断是否有按键按下。 这个电路中按键的原理我们清楚了,但是实际上单片机IO 口内部,也有一个上拉电阻的存在。我们的按键是接到了P2 口上,P2 口上电默认是准双向IO 口,我们来简单了解一下这个准双向IO 口的电路,如图8-7 所示。

图8-7 准双向IO 口结构图 首先说明一点,就是我们现在绝大多数单片机的IO 口都是使用MOS 管而非三极管,但用在这里的MOS 管其原理和三极管是一样的,因此在这里我用三极管替代它来进行原理讲解,把前面讲过的三极管的知识搬过来,一切都是适用的,有助于理解。 图8-7 方框内的电路都是指单片机内部部分,方框外的就是我们外接的上拉电阻和按键。这个地方大家要注意一下,就是当我们要读取外部按键信号的时候,单片机必须先给该引脚写“1”,也就是高电平,这样我们才能正确读取到外部按键信号,我们来分析一下缘由。 当内部输出是高电平,经过一个反向器变成低电平,NPN 三极管不会导通,那么单片机IO 口从内部来看,由于上拉电阻R 的存在,所以是一个高电平。当外部没有按键按下将电平拉低的话,VCC 也是+5V,它们之间虽然有2 个电阻,但是没有压差,就不会有电流,线上所有的位置都是高电平,这个时候我们就可以正常读取到按键的状态了。 当内部输出是个低电平,经过一个反相器变成高电平,NPN 三极管导通,那么

矩阵键盘数码管显示键值 程序

#include #include #define uchar unsigned char #define uint unsigned int uchar dis_buf; //显示缓存 uchar temp; uchar key; //键顺序吗 void delay0(uchar x); //x*0.14MS #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; // 此表为LED 的字模0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5 E,~0x79,~0x71}; /*************************************************************/ /* */ /* 延时子程序*/ /* */ /*************************************************************/ void delay(uchar x) { uchar j; while((x--)!=0) { for(j=0;j<125;j++) {;} } } /*************************************************************/ /* */ /* 键扫描子程序(4*3 的矩阵) P1.4 P1.5 P1.6 P1.7为行*/ /* P1.1 P1.2 P1.3为列*/ /* */ /*************************************************************/ void keyscan(void)

矩阵键盘显示电路的设计

二、实验原始数据记录 1.实验现象 当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1KHZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”键值。 2.实验图片记录 湖南科技大学 物理与电子科学学院专业实验报告 实验课程:FPGA 实验原理 实验项目:矩阵键盘显示电路的设计专业:物理与电子科学学院班级:电子信息科学与技术3班姓名:马竞怡学 号: 1308020328 实验日期:年月日

实验报告 一、实验目的内容及步骤 1.实验目的 1)了解普通4×4键盘扫描的原理。2)进一步加深七段码管显示过程的理解。3)了解对输入/输出端口的定义方法。 2..4×4矩阵键盘电路原理图 信号名称 对应FPGA 管脚名 说明 KEY-C0AC18 钜阵键盘的第1列选择KEY-C1AC17钜阵键盘的第2列选择KEY-C2AD17钜阵键盘的第3列选择KEY-C3AC16钜阵键盘的第4列选择KEY-R0AD16钜阵键盘的第1行选择KEY-R1AC15钜阵键盘的第2行选择KEY-R2AD15钜阵键盘的第3行选择KEY-R3 AC14 钜阵键盘的第4行选择 3..实验步骤 1)打开QUARTUSII 软件,新建一个工程。 2)建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3)按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序,用户可参照光 盘中提供的示例程序。 4)编写完VHDL 程序后,保存起来。方法同实验一。 5)对自己编写的VHDL 程序进行编译并仿真,对程序的错误进行修改。 6)编译仿真无误后,依照4X4矩阵键、数码管与FPGA 的管脚连接表(表或参照附 录进行管脚分配。表10-2是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。 7)用下载电缆通过JTAG 口将对应的sof 文件加载到FPGA 中。观察实验结果是否 与自己的编程思想一致。 实验预习报告 一、实验原理及公式 通常在一个键盘中使用了一个瞬时接触开关,并且用如图10-1所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图10-2所示的好几个脉冲。弹起的持续时间通常将维持在5ms ~30ms 之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。 获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。 (矩阵键盘) 成绩:教师:

单片机矩阵键盘

单片机 4*4 矩阵键盘 在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵形式如下图所示,在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种目的呢?大家看下面电路图,单片机的整一个8位端口可以构成4*4=16 个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。确定矩阵式键盘上任何一个键被按下通常采用行扫描法。行扫描法又称为逐行查询法它是一种最常用的多按键识别方法。因此,我们就以行扫描法为例介绍矩阵式键盘的工作原理。 首先,不断循环地给低四位独立的低电平,然后判断键盘中有无键按下。将低位中其中一列线(P1.0~P1.3中其中一列)置低电平然后检测行线的状态(高4位,即P1.4~P1.7,由于线与关系,只要与低电平列线接通,即跳变成低电平),只要有一行的电平为低就延时一段时间以消除抖动,然后再次判断,假如依然为低电平,则表示键盘中真的有键被按下而且闭合的键位于低电平的4个按键之中任其一,若所有行线均为高电平则表示键盘中无键按下。再其次,判断闭合键所在的具体位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是: 依次将列线置为低电平,即在置某一根列线为低电平时,其它列线为高电平。同时再逐行检测各行线的电平状态;若某行为低,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。下面图5-5是4*4矩阵式按键接法的软件算法操作流程。 图5-4(4*4矩阵式按键的接法) 下面程序按照上述算法流程去编写的,其电路如图5-6,只是在图5-5的基础上多加了P0端口的8只LED灯。从键盘中检测到一个键值,然后将这个值写到LED数码管上显示。

4×4矩阵键盘数码管显示 最简便易懂的键盘扫描方法

/////4×4矩阵键盘按键为1-16,按键显示0- 9、a-f; ////////////////// #include #define uchar unsigned char uchar key=0; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0x a1,0x86,0x8e,0xc0}; void show(uchar key){P0=table[key];//显示数值}void Scan_key()//扫描键盘{uchar m; P1=0xff;//数码管全亮 P2=0x0f;//P2口赋初值低位1高位0 m=P2; switch (m){case 0x0e: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=0;show(key);break;} case 0xd0:{key=1;show(key);break;} case 0xb0:{key=2;show(key);break;} case 0x70:{key=3;show(key);break;}

default: break;}break;}case 0x0d: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=4;show(key);break;} case 0xd0:{key=5;show(key);break;} case 0xb0:{key=6;show(key);break;} case 0x70:{key=7;show(key);break;} default: break;}break;}case 0x0b: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=8;show(key);break;} case 0xd0:{key=9;show(key);break;} case 0xb0:{key=10;show(key);break;} case 0x70:{key=11;show(key);break;} default: break;}break;}case 0x07:{P2=0xf0; m=P2; switch (m){case 0xe0:{key=12;show(key);break;} case 0xd0:{key=13;show(key);break;}

数码管显示4×4矩阵键盘的键盘号--万意

数码管显示4X4矩阵键盘的键盘号 学院:物理与电子工程学院 专业:自动化 班级:13级7班 学号: 姓名:万意 指导教师:马世榜 日期:2013年12月31日 目录 1引言 (1) 2设计方案 (2) 3硬件设计 (2) AT89S51 (2) 4*4矩阵式键盘 (5) 矩阵式键盘介绍 (5) 键盘扫描原理 (6) 硬件电路连接 (9)

单片机时钟电路 (9) 单片机复位电路 (9) 矩阵式键盘电路 (9) LED数码管显示电路 (9) 4软件设计 (11) 所用软件简介 (11) Keil (11) Proteus (11) 程序流程图 (13) 源程序 (14) 5电路原理图 (16) 参考文献 (17)

1引言 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89S51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

2设计方案 单片机的P1口的~连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。本论文主要研究单片机控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。 主要内容如下: ①根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计; ② LED实时显示按键信息; ③采用软件编程的方法实现按键信息的提取和显示。

单片机矩阵键盘与数码管课程设计

矩阵键盘与数码管显示 摘要 矩阵式键盘乃是目前使用较为广泛的一种键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。4*4矩阵式键盘采用89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程,单片机将检测到的按键信号转换成数字量,显示于数码管显示器,系统灵活性强,易于操作,可靠性能好。单片机简介及主系统电路 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换444器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。单片机在工业控制领域广泛应用,它由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中,本次课程设计我们采用的是AT89C51型号的单片机。 AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,提高了系统的性价比。其最小系统电路图如下:

矩阵键盘显示,六位数码管滚动显示

南京邮电大学课程设计报告 设计类别: EDA-VHDL 专业名称: 通信工程 班级学号: B09010504 学生姓名: 张嫣艳 基本题 : 矩阵键盘按键的数码管显示 综合题 : 数码管学号滚动显示 同小组成员: 学号:B09010502 姓名:沈沁芳 指导教师: 王奇、梅中辉、周晓燕、孔凡坤日期:2012年3月5日—3月30日

目录 一矩阵键盘按键的数码管显示 1.实验目的--------------------------------------------------------------------- 3 2.实验所用仪器及元器件----------------------------------------------------3 3.实验任务要求----------------------------------------------------------------3 4. 设计思路-----------------------------------------------------------------------3 5. 模块分析-----------------------------------------------------------------------3 6. 逻辑仿真图及功能分析-----------------------------------------------------4 7. 调试过程与问题--------------------------------------------------------------8 8. 实验总结-----------------------------------------------------------------------8 9. 附录(VHDL源程序)-----------------------------------------------------8 二数码管学号滚动显示 1.实验目的----------------------------------------------------------------------12 2.实验所用仪器及元器件----------------------------------------------------12 3.实验任务要求----------------------------------------------------------------13 4. 设计思路----------------------------------------------------------------------13 5. 模块分析----------------------------------------------------------------------13 6. 逻辑仿真图及功能分析----------------------------------------------------16 7. 调试过程与问题-------------------------------------------------------------18 8. 实验总结----------------------------------------------------------------------18 9. 附录(VHDL源程序)----------------------------------------------------18

数码管显示4×4矩阵键盘的键盘号 - 硬件的

《单片机原理及应用课程设计》报告 ——数码管显示4×4矩 阵键盘的键盘号 专业:电子信息科学与技术 班级:电科0911 姓名:冯卫蓉 学号:0920108133 指导教师:黄伟军 2012年5月15日

1、课程设计目的 1.1巩固和加深对单片机原理和接口技术知识的理解; 1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力; 1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法; 1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法; 1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。 2、课程设计要求 单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。 3、硬件设计 3.1 设计思想 分析本任务的要求,在课程设计的基础上,添加要求,使设计能够完成当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。则本系统主要由以下几大模块构成: 显示模块,共阴极LED数码管; 输入模块,4X4矩阵键盘; 3.2主要元器件介绍 LOGO51Var1.1 开发板

3.3 功能电路介绍 一、矩阵键盘电路 二、八位数码管显示

三、主芯片电路

4、软件设计 4.1 设计思想 通过对矩阵键盘的逐行扫描,来获得所按下键的键盘号,最终通过数码管显示出来。 4.2软件流程图 开始 初始化 结束,返回 若有按键按下,显示键盘号 扫描键盘第一行 若无按键按下 扫描键盘第二行 若无按键按下 扫描键盘第三行 若无按键按下 扫描键盘第四行 若无按键按下 结束,返回

相关文档
最新文档