授课教师:左敬龙电话:13828680660短号:68012邮箱:oklong@gmail.com单片机原理及应用按键的分类编码键盘键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。非编码键盘靠软件编程来识别的称为非编码键盘。在单片机组成的各种系统中,用的最多的是非编码键盘。例如在洗衣机控制面板上,用非编码按键来设置洗衣机的功能。按键的抖动图7-1按键与单片机的连接图7-2按键的抖动过程键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。消除抖动的方法:⑴硬件去抖动采用RS触发器去抖动。⑵软件去抖动检测到按键按下后,软件延时10~20ms后再确认该键是否确实按下,消除抖动影响。单片机应用系统中的按键与显示独立式按键1矩阵式按键2发光二极管3LED数码管4独立式按键1液晶显示器5一、独立式按键特点:1)各按键相互独立,电路配置灵活;2)软件简单;3)按键数量较多时,I/O线耗费较多,只适用于按键数量较少的场合。图7-4独立式按键电路图7-4(a)独立式按键扫描C语言程序如下:#includereg51.hvoiddelay10ms(void){;}voidprocessk0(void){;}voidprocessk1(void){;}voidprocessk2(void){;}voidmain(){unsignedcharkey;while(1){P1=0xff;key=P1;if(P1!=0xff){delay10ms();key=P1;}elsecontinue;while(P1!=0xff);switch(key){case0xfe:processk0();break;case0xfd:processk1();break;case0xfb:processk2();break;default:continue;}}}练习有三个独立式按键的电路如图7-4(a)所示,当有按键P1.0按下时P0端口输出100的二进制值,P1.1按下时P0端口值加1,P1.2按下时P0端口值减1。二、矩阵式键盘特点:占用I/O线较少,适合按键数目较多的场合,但软件较复杂。常用的键盘工作方式有查询方式和中断方式。图7-5矩阵式键盘结构1查询方式键盘扫描过程包括下列四个步骤(以图7-5为例):①判别键盘上有无按键按下。方法为列线(P1.4~P1.7)置低电平,行线(P1.0~P1.3)置输入状态(高电平“1”)。读行线的状态,若为全“1”,则键盘无按键按下;若不全为“1”,则有按键按下。②去除按键的抖动影响。方法是当判别到有按键按下时,软件延时一段时间(一般为10ms左右)后,再判断键盘状态,如果仍为有按键按下状态,则认为有一个确定的按键被按下。③求键值(键号)。按照图7-5中的16个按键,每行的行号依次为:0、1、2、3,列号依次为0、1、2、3,则闭合按键的键号可以用公式计算获得:键号=行号×4+列号。④判断按键是否释放,按键闭合一次仅进行一次按键功能操作,等按键释放以后再将键号送入累加器A中,然后执行按键指定的功能操作。实时查询定时查询#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint//矩阵键盘按键特征码表ucharcodeKeyCodeTable[]={0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};voidDelayMS(uintx){uchari;while(x--)for(i=0;i120;i++);}例:数码管显示4X4矩阵键盘按键号按下任意键时,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加不同的值,从而得到按键的序号。//键盘扫描ucharKeys_Scan(){ucharsCode,kCode,i,k;P1=0xf0;if((P1&0xf0)==0xf0)return(-1);DelayMS(2);//若高4位出现0,则有键按下if((P1&0xf0)==0xf0)return(-1);sCode=0xfe;//行扫描码初值for(k=0;k4;k++){//对4行分别进行扫描P1=sCode;if((P1&0xf0)==0xf0){sCode=_crol_(sCode,1);continue;}kCode=~P1;for(i=0;i16;i++)//查表得到按键序号并返回if(kCode==KeyCodeTable[i])returni;}}//主程序voidmain(){uchari,P2_LED,P3_LED;ucharKeyNo=-1;//按键序号,-1表示无按键while(1){KeyNo=Keys_Scan();//扫描键盘获取按键序号KeyNoif(KeyNo!=-1){P2_LED=0xff;P3_LED=0xff;for(i=0;i=KeyNo;i++){if(i8)P3_LED=1;elseP2_LED=1;}P3=P3_LED;//点亮条形LEDP2=P2_LED;}}}2中断扫描当键盘上有按键闭合时产生中断请求,单片机响应中断请求后,转去执行中断服务程序,在中断服务程序中判断键盘中闭合按键的键号,并做相应的处理。特点:提高了单片机的工作效率。图7-6中断式键盘接口电路三、发光二极管(常用来显示设备的运行状态)发光二极管(LightEmittingDiode,LED)与普通的二极管一样由一个PN结组成。当正向连接时,即P接正极、N接负极时二极管导通;反之,二极管截止。这就是二极管的单向导电特性。导通时,若有足够的正向电流通过发光二极管,发光二极管便会发光。根据制造材料的不同可以发出红、黄、绿、白等不同色彩的可见光来。图7-7发光二极管的图形符号和实物图八只发光二极管组成的驱动电路四、LED数码管(可以显示各种数字和字符)常用的LED数码管是七段LED数码管,由八个发光二极管组成。LED数码管分为共阴极和共阳极两种。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节,通常称为段选码(显示代码)。段选码与数据位的对应关系如下:图7-10数码管显示字段排列顺序LED数码管工作原理最低位最高位LED数码管显示段码表1、LED数码管静态显示所谓静态显示,是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止,公共端恒定接地(共阴极)或接正电源(共阳极)。优点:显示控制程序简单,显示亮度大,占用CPU时间少,显示稳定可靠。缺点:静态显示占用的I/O口线较多,或者需要增加额外的硬件电路,硬件成本较高。1位静态显示电路如下:编写10秒倒计时显示程序。练习:三位LED数码管静态显示电路74LS377为八位锁存器,用于锁存显示代码。例:设在内部RAM30H单元中存储一个十进制数D(D≤255)。编写程序将该数的百分位显示在左边的数码管上,十分位显示在中间的数码管上,个分位显示在右边的数码管上。2LED数码管动态显示动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。动态显示实际上是逐个地循环点亮各个数码管,但由于LED具有余辉特性以及人眼也有视觉暂留特性,使人看起来就好像在同时显示不同的字符一样。优点:简化硬件线路。缺点:比静态显示要暗一点,消耗单片机较多的运行时间。图7-13LED数码管动态显示电路首先扫描该位五、液晶显示液晶显示(LiquidCrystalDisplay,LCD)是一种体积小、重量轻、功耗低的显示器件,被广泛应用于单片机应用系统。目前已广泛应用在各种显示领域,尤其在袖珍仪表和低功耗应用系统中。段型:像七段LED一样,显示内容由显示段组成,其显示方式和接口形式与七段LED数码管相似。主要用于批量大、显示内容固定的产品。字符型:主要由LCD控制器、LCD驱动器和LCD显示器三部分组成,常将他们称为液晶显示模块。他们一般都自带ASCII码点阵字库,显示时只需提供显示字符的ASCII代码即可,硬件接口和软件编程都很简单。图形点阵型:点阵信息的组合显示指定内容。更加灵活方便,可显示字符、汉字、图形等内容,但控制也较为复杂,一般用于图像显示场合。1、LCD1602液晶显示模块模块采用16引脚封装引脚符号功能01VSS接地引脚02VDD接+5V电源03VL对比度调整端。驱动电源(0V~5V),接地时对比度最高。04RS0选指令寄存器IR,1选数据寄存器DR05R/W0写操作,1读操作06E下降沿使能有效07-14D0-D78位双向数据总线,4位传送时使用高4位15BLA背光正极16BLK背光负极2、LCD1602工作原理核心控制芯片:HD44780由指令寄存器IR、数据寄存器DR、字符发生器CGROM、自定义字符发生器CGRAM和显示缓冲区DDRAM等功能部件组成。IR用来存放由微控制器送来的指令代码,如光标归位、清除显示等;DR用来存放欲显示的数据。显示的次序是先把要存放数据的地址写入IR,再把要显示的数据写入DR,DR就会自动把数据送至相应的DDRAM或CGRAM地址。字符发生器CGROM存储了不同的点阵字符图形。包括数字、大小写英文字母、常用的符号和日文字符等。每一个字符都有一个固定的代码,如表所示。DDRAM有80个单元,但第1行仅用00H~0FH单元,第2行仅用40H~4FH单元。如上图所示。DDRAM单元存放的是要显示字符的ASCII编码,控制器以该编码为索引,到CGROM或CGRAM中取点阵字形送液晶板显示。LCD1602的操作命令LCD1602的操作命令(1)命令1:清屏。光标回到屏幕左上角,地址计数器设置为0。命令2:光标归位。光标回到屏幕左上角,显示内容不变。命令3:输入模式设置,每写入一个数据字节后,光标及字符的移动设置。I/D=0,S=0时,光标左移一格且地址计数器减1;I/D=1,S=0时,光标右移一格且地址计数器加1;I/D=0,S=1时,屏幕内容全部右移一格,光标不动;I/D=1,S=1时,屏幕内容全部左移一格,光标不动。命令4:显示与不显示设置。D=1:开启显示屏,D=0:关闭显示屏。C=1,开启光标,C=0,关闭光标。B=1,光标闪烁,B=0,光标不闪烁。命令5:光标或屏幕内容移位选择。S/C=1,移动屏幕内容,S/C=0,移动光标。R/L=1,右移,R/L=0,左移。命令6:功能设置。DL=0,设为4位数据接口,DL=1,设为8位数据接口。N=0,单行显示,N=1,双行显示。F=1,5×10字形,F=0,5×7字形。命令7:CGRAM地址设置,地址范围00H~3FH(共64个单元,对应8个自定义字符)。命令8:DDRAM地址设置,地址范围00H~7FH。命令9:读忙标志和计数器地址。BF=1,表示忙,此时模块不能接收命令或者数据,BF=0,表示不忙,可以接收送来的数据或指令。命令10:写DDRAM或CGROM。要配合地址设置命令。命令11:读DDRAM或CGROM。要配合地址设置命令。LCD1602的操作命令(2)3、LCD1602应用举例单片机与LCD1602模块的接口电路如图所示。LCD1602编程思路1.初始化:清屏、显示方式(单双行、5*7、5*10)、光标闪烁移动、字符闪烁移动等2.检查“忙”标志BF。3.写入显示地址位置(IR):在第几行第几列显示,地址最高位=14.检查“忙”标志BF。5.写入显示内容(DR):要显示的字符代码例、在1602显示屏上显示:“Thank”“You!”六全自动洗衣机洗衣流程Proteus仿真设洗衣机洗