基于单片机的键盘和LED数码管工作原理.docx
《基于单片机的键盘和LED数码管工作原理.docx》由会员分享,可在线阅读,更多相关《基于单片机的键盘和LED数码管工作原理.docx(12页珍藏版)》请在冰豆网上搜索。
基于单片机的键盘和LED数码管工作原理
基于单片机的键盘和LED数码管工作原理
摘要:
键盘和显示器是微机最常见的输入输出设备。
本文介绍键盘和LED显示器的基本工作原理,并给出在8051基础上的电路结构及C语言代码。
关键字:
键盘,LED,单片机
键盘是微型计算机系统中最基本、最常见的输入设备。
在各种工业过程的计算机控制和监视系统中,广泛应用发光二极管向用户提供提示。
由发光二极管可以构成7段/8段LED显示器,用于显示工作状态、参数数值和故障位置。
一.键盘的工作原理
键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。
(一)键盘的基本介绍
1.键盘的功能
键盘接口必须具有4个基本功能:
1.去抖动
2.防串键
3.识别被按键并产生与之对应的键码
4.释放键
而键码产生后如何去实现按键的特定功能,是操作系统和应用程序的任务
2.键盘的分类
根据按键开关的排列方式,键盘可分为线性键盘和矩阵键盘。
线性键盘:
硬件连接和接口程序都很简单,只适用于按键少的场合,因为线性键盘有多少按键,就需要有多少根连线与微机输入端口相连。
矩阵键盘:
将按键排成n行m列,每个按键占据行列的一个交点,需要的外连接线数目是m+n,而容许的最大按键数是m*n,显然可以减少微机接口的连线,是一般微机常采用的键盘结构。
3.键盘与单片机的连接方式
矩阵键盘的连接方法有多种。
可直接连接于单片机的I/O口线;可利用扩展的并行I/O口连接;也可利用可编程的键盘、显示接口芯片(如8297)进行连接等等。
其中,利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。
下图就是通过8255A芯片扩展的并行I/O口连接的矩阵键盘。
图1微处理器和键盘接口接线示意
(二)键盘的工作过程
被按键的识别和键码的产生是键盘接口要解决的主要问题,可以通过软硬结合的方法来解决。
通常识别被按键有两种方法:
行扫描法和线反转法。
实际微型计算机系统中以行扫描法应用最广,其基本思想是:
由程序对键盘进行逐行扫描,通过检测到的列状态来确定闭合键,需要输出端口、输入端口各1个。
下面由以并行接口芯片8255A组成的微机与键盘接口来说明非编码键盘采用行扫描法进行按键识别并产生编码的原理。
设8255的端口地址为:
40~43H,键盘的行线接在PA0~PA3上,列线接在PB0~PB3上,接口示意如图1,PA端口定义为输出端口,PB端口定义为输入端口。
扫描的步骤如下:
(1)快速检查是否有键按下。
使PA0~PA3输出全为0,读取PB0~PB3上数据,只要有一位为0,必定有某键被按下。
(2)去抖动。
延时20ms左右,等待按键通、断引起的抖动消失,然后再判断具体按下的到底是哪个键。
(3)确定被按下的键。
从0行开始,顺序逐行扫描,即该行输出0。
每扫描一行,读入列线数据,从0列开始,逐列检查,判断是否有输入为0的列,若无,则顺序扫描下一行,并检查各列;若检查到某列线为0,则该行、列交点上的按键为被按下的键。
具体控制程序请见附录1。
二.LED数码管显示器的工作原理
(一)LED显示器的基本介绍
一般8段LED显示器的部结构和外部引脚如图2所示。
每段都是一个发光二极管,通过点亮不同的字段,可显示0~9和A~F等不同字符。
其部各发光二极管之间的连接方法有共阴极和共阳极两种。
如图2所示。
图2LED显示器部结构
(二)LED显示器工作过程
为了达到显示某一波形的目的,需要从接口中输出不同的数码,这些数码称为字形码或段码。
采用共阳极接法时,得到低电平信号的引脚对应的段被点亮;采用共阴极接法时,得到高电平信号的引脚对应的段被点亮。
所以对于共阴极和共阳极两种不同的接法,为了显示同一个字符,对应的显示段码是不同的。
在8段和8位字节数有如下对应关系时,a~g分别接数据线D0~D5,dp接D7,图3给出了这两种接法的8段LED显示器字符段码表。
图38段LED显示器字符段码表
比如,为了显示5,采用共阴极接法(1是亮),应该使D7~D0=01101101B;采用共阳极接法,D7~D0=10010010B。
实际使用的LED数码管LED数码显示器位数较多,为了简化线路,降低成本,对于多位LED数码显示器,通常采用动态扫描显示方法,即逐个地循环点亮各位显示器。
这样虽然在任意时刻只有一位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮的效果基本一样(在亮度上有差别)。
图48段动态LED显示器接口原理
三.键盘和显示器与单片机8051的连接
图5矩阵键盘与8051芯片连接原理
图6LED显示器与8051连接原理
附录1:
矩阵键盘与数码管显示控制程序
排线连接方法:
JP8(P1)与JP4(矩阵键盘接口)连接;P0与JP3(静态数码管)连接。
矩阵键盘定义:
P1.1-P1.4为列线;P1.4-P1.7为行线;
程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uchardis_buf;//显示缓存
uchartemp;
ucharkey;//键顺序吗
voiddelay0(ucharx);//x*0.14MS
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
//此表为LED的字模0123456789abcdef
unsignedcharcodeLED7Code[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
/*************************************************************/
/**/
/*延时子程序*/
/**/
/*************************************************************/
voiddelay(ucharx)
{ucharj;
while((x--)!
=0)
{for(j=0;j<125;j++)
{;}
}
}
/*************************************************************/
/**/
/*键扫描子程序(4*3的矩阵)P1.4P1.5P1.6P1.7为行*/
/*P1.1P1.2P1.3为列*/
/**/
/*************************************************************/
voidkeyscan(void)
{temp=0;
P1=0xF0;//高四位输入行为高电平列为低电平
delay
(1);
temp=P1;//读P1口
temp=temp&0xF0;//屏蔽低四位
temp=~((temp>>4)|0xF0);
if(temp==1)//p1.4被拉低
key=0;
elseif(temp==2)//p1.5被拉低
key=1;
elseif(temp==4)//p1.6被拉低
key=2;
elseif(temp==8)//p1.7被拉低
key=3;
else
key=16;
P1=0x0F;//低四位输入列为高电平行为低电平
delay
(1);
temp=P1;//读P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==2)//p1.1被拉低
key=key+0;
elseif(temp==4)//p1.2被拉低
key=key+4;
elseif(temp==8)//p1.3被拉低
key=key+8;
else
key=16;
dis_buf=key;//键值入显示缓存
dis_buf=dis_buf&0x0f;
}
/*************************************************************/
/**/
/*判断键是否按下*/
/**/
/*************************************************************/
voidkeydown(void)
{
P1=0xF0;
if(P1!
=0xF0)//判断按键是否按下如果按钮按下会拉低P1其中的一个端口
{
keyscan();//调用按键扫描程序
}
}
/*************************************************************/
/**/
/*主程序*/
/**/
/*************************************************************/
main()
{
P0=0xFF;//置P0口
P1=0xFF;//置P1口
delay(10);//延时
while
(1)
{
keydown();//调用按键判断检测程序
P0=LED7Code[dis_buf%16]&0x7f;//LED70x7f为小数点共阴和共阳此处也是不一样;%16表示输出16进制
}
}
/************************************************************/
附录2:
8051单片机引脚功能介绍
8051芯片管脚图
单片机的40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
⒈电源:
⑴VCC-芯片电源,接+5V;
⑵VSS-接地端;
⒉时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
⒊控制线:
控制线共有4根,
⑴ALE/PROG:
地址锁存允许/片EPROM编程脉冲
①ALE功能:
用来锁存P0口送出的低8位地址
②PROG功能:
片有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵PSEN:
外ROM读选通信号。
⑶RST/VPD:
复位/备用电源。
①RST(Reset)功能:
复位信号输入端。
②VPD功能:
在Vcc掉电情况下,接备用电源。
⑷EA/Vpp:
外ROM选择/片EPROM编程电源。
①EA功能:
外ROM选择端。
②Vpp功能:
片有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
P0口有三个功能:
1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)
2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)
3、不扩展时,可做一般的I/O使用,但部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口:
只做I/O口使用:
其部有上拉电阻。
P2口有两个功能:
1、扩展外部存储器时,当作地址总线使用
2、做一般I/O口使用,其部有上拉电阻;
P3口有两个功能:
1、作为I/O口
2、特殊设置