您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第七章单片机人机交互.
单片机原理及应用(第七章单片机人机交互)教学内容键盘接口技术数码管接口技术LCD液晶接口技术DATE:2019/12/19PAGE:2一、键盘接口技术按键是一种常开型按钮开关,与单片机的常见接法如图所示。按键未按下时两个触点断开,单片机I/O口输入高电平;当按键闭合时,I/O口输入低电平。当I/O口为P0口时,由于没有内部上拉电阻,所以必须外接上拉电阻,当I/O口为P1、P2和P3口时,由于内部已有上拉电阻,因此可省略外接的上拉电阻。DATE:2019/12/19PAGE:3一、键盘接口技术单片机系统中所使用的键盘都是机械式的弹性按键,因为存在机械触点的弹性作用,在按键闭合和弹起的瞬间都会出现抖动,如图所示。按键抖动一般会持续5~10ms,为使一次按键仅被处理一次,必须消除按键抖动。消除按键抖动可以采用软件消抖或硬件消抖。软件消抖指在检测到有按键闭合时,延时一小段时间之后再次检测,如果仍然检测到按键闭合,则认为按键真正闭合。DATE:2019/12/19PAGE:4一、键盘接口技术硬件消抖方法常用R-S触发器,如图所示,当按键接触“闭合”端后,上面的与非门输出高电平,下面的与非门输出低电平,即输出为0,在按键抖动过程中只要不接触断开端,下面的与非门输出不会改变,起到消抖的作用;DATE:2019/12/19PAGE:5一、键盘接口技术下图为4×4的矩阵键盘接到P2口上,如果使行线输出高电平且列线输出低电平,当有键闭合时,那么必然会将该闭合键所在的行线与列线导通,使行线被拉低到低电平,通过检测行线的电平状态可识别是否有按键按下。DATE:2019/12/19PAGE:6一、键盘接口技术识别按键值的方法是在主程序中反复扫描键盘的方式,分为以下几个步骤:(1)检测是否有按键闭合。首先使P2口高4位输出0,然后读取低4位,如果低4位不都为1,则有键闭合,进入步骤(2);(2)软件消抖。延迟一段时间再测,如果仍有键闭合则进入到步骤(3),否则回到步骤(1);(3)检测键号。为每行和列都设定标号,使行号和列号相加得到该行列交叉点上按键的编号。具体操作如下:依次扫描各列,使该列输出0值,然后读取低4位,如果低4位不全为1,则依次检测各行线的值,找出不为1的行号,从而确定键号。为防止一次按键闭合时间过长而被多次处理,需要等待按键松开之后,再做相应处理。DATE:2019/12/19PAGE:7一、键盘接口技术例7-1如图7-4所示,编程实现用4×4的矩阵键盘控制连接在P0和P1口上的16个LED,当按下某键并释放后只有对应的LED灯亮,例如按S0后D0亮,按S1后D1亮。DATE:2019/12/19PAGE:8一、键盘接口技术#includereg51.h#defineKEYPORTP2//定义按键端口#defineucharunsignedcharsbitline0=KEYPORT^0;sbitline1=KEYPORT^1;sbitline2=KEYPORT^2;sbitline3=KEYPORT^3;//定义行线led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义LED显示状态bitiskeyinput()//判断是否有按键闭合{KEYPORT=0x0f;//低4位置1,高4位置0if((KEYPORT&0x0f)==0x0f)//屏蔽高4位(列线),只检测低4位(行线)return0;//没有键闭合,返回0elsereturn1;//有键闭合,返回1}DATE:2019/12/19PAGE:9一、键盘接口技术ucharkey_identify()//识别键号{ucharlinecode=0,rowcode=0;uchari;ucharscancode=0xef;//定义扫描码,使第一列为0,其它为1for(i=0;i4;i++)//扫描4列{KEYPORT=scancode;//输出扫描码,扫描各列if((KEYPORT&0x0f)==0x0f)//屏蔽高4位(列线),检测低4位(行线){//当前列无按键闭合rowcode++;scancode=scancode1|1;//使输出0的列线左移一位}else//当前列有按键,已经确定了列号,还需要确定行号{if(line0==0)linecode=0;//第一行有键闭合,行号为0if(line1==0)linecode=4;//第二行有键闭合,行号为4if(line2==0)linecode=8;//第三行有键闭合,行号为8if(line3==0)linecode=12;//第四行有键闭合,行号12break;}}returnlinecode+rowcode;//输出键号}DATE:2019/12/19PAGE:10一、键盘接口技术voidwait_key_release()//等待按键松开{while(1){KEYPORT=0x0f;//低4位置1,高4位置0if((KEYPORT&0x0f)==0x0f)//如果行线全为高电平break;//没有键闭合,即键盘已经松开}}DATE:2019/12/19PAGE:11一、键盘接口技术voiddisplay(ucharn)//键盘处理程序{if(n8){P0=led[n];P1=0xff;}else{P0=0xff;P1=led[n-8];}}DATE:2019/12/19PAGE:12一、键盘接口技术intmain(void){ucharkeycode;//用于保存识别的键号:0~15unsignedinti;while(1){while(!iskeyinput());//如果没有键按下,则等待for(i=0;i500;i++);//去除键抖动if(iskeyinput())//检测当前是否有按键{keycode=key_identify();//识别键号wait_key_release();//等待按键松开后,该函数才退出display(keycode);//显示按键状态}}}DATE:2019/12/19PAGE:13二、数码管接口技术数码管接口技术数码管(又称LED,即发光二极管显示器,lightemittingdiode),是单片机系统中最常用的显示器件。通常数码管是由8个发光二级管组合而成,当发光二级管的阳极为高电平,阴极为低电平时,发光二级管可以导通发光。控制LED中各二极管亮灭,可以显示不同的字形。DATE:2019/12/19PAGE:14二、数码管接口技术数码管分为共阴极和共阳极两种结构形式,如图所示。共阴极指所有发光二级管的阳极相互独立,而把所有的阴极连接起来形成公共端,公共端通常需要接地。共阳极指所有发光二极管的阴极相互独立,而把所有的阳极连接起来形成公共端,公共端通常需要接电源。DATE:2019/12/19PAGE:15二、数码管接口技术通常将数码管的公共端称为位选控制端,将其余8个发光二级管独立的一端称为段选控制端。为了能够在数码管上显示某一个字符,需要在它的段选控制端输入不同的电平组合,该电平组合为8位数据,通常称为字型码或者段选码,格式如表7-1所示。DATE:2019/12/19PAGE:16二、数码管接口技术字符的字型码都不同,即使是同一个字符,对于共阴极结构和共阳极结构的LED,字型码也不同,如表7-2所示。DATE:2019/12/19PAGE:17二、数码管接口技术数码管的显示方式有静态显示方式和动态显示方式两种。DATE:2019/12/19PAGE:18(1)静态显示硬件连线上,每个数码管的公共端都直接接地(共阴极数码管)或接电源(共阳极数码管),各个段选端分别与一个8位的并行I/O端口连接。显示字符时,将各个字符的字型码分别送入相应的I/O端口,使各数码管同时显示不同的字符。二、数码管接口技术例7-2图7-6是采取静态显示方式,单片机的P0口和P1口分别连接两个共阳极7段数码管。编写控制程序,实现P0口上数码管从0到9循环显示,P1口上数码管从9到1循环显示。DATE:2019/12/19PAGE:19二、数码管接口技术#includereg51.hvoiddelay(unsignedcharn);intmain(void){unsignedcharled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0-9的字型码unsignedchari;while(1){for(i=0;i10;i++){P0=led[i];P2=led[9-i];delay(200);//延时}}}DATE:2019/12/19PAGE:20voiddelay(unsignedcharn)//延时子函数;{unsignedchari,j;for(i=0;in;i++)for(j=0;jn;j++);}二、数码管接口技术(2)动态显示只利用一个用于段选的单片机8位I/O端口循环点亮各数码管,当间隔时间较短时,由于人眼的视觉暂留现象,效果与各数码管静态显示相同。在硬件连线上,将所有的数码管的段选端并联,与一个8位的并行I/O端口连接,每个数码管的位选端分别与另一个I/O端口中的某位连接,轮流输出高电平使各数码管循环点亮。DATE:2019/12/19PAGE:21二、数码管接口技术例7-3如图7-7所示,2个共阳极数码管采取动态显示方式与单片机的相连接。P0口为段选端,P2.6和P2.7分别与三极管基极相连做位选端。要求编写控制程序,实现2个数码管能够分别显示“1”和“2”。DATE:2019/12/19PAGE:22二、数码管接口技术#includereg51.hunsignedcharled[]={0xf9,0xa4};//存储共阳极1和2的字型码unsignedcharsegment[]={0x7f,0xbf};//存储2个数码管的位选码unsignedchark=0;//全局变量,用于标识显示器位置intmain(void){TMOD=0x00;//设定工作方式0TL0=(8192-2000)%32;//低5位赋值(满值-定时时间/机器周期)%32TH0=(8192-2000)/32;//高8位赋值(满值-定时时间/机器周期)/32TR0=1;EA=1;ET0=1;//开放中断while(1);}DATE:2019/12/19PAGE:23二、数码管接口技术voidT0_timer(void)interrupt1//中断服务程序{P0=led[k];//段选赋值P2=segment[k];//位选赋值k++;//下一个数码管if(k==2)k=0;//显示完最后一个数码管,重新从头开始。TL0=(8192-2000)%32;TH0=(8192-2000)/32;//重新写入初始值,即重新定时}DATE:2019/12/19PAGE:24三、LCD液晶接口技术液晶显示器(LiquidCrystalDisplay,简称LCD)可以显示数字、字母、汉字、以及图形图像等丰富的内容,应用非常广泛。液晶显示器由液晶显示部分和控制器两部分组成,控制器通过控制液晶显示区的电压,实现字符的显示。LCD可分为段型、字符型和点阵型三种。其中1602字符型液晶是应用最广泛的液晶显示器之一。1602液晶的控制器是采用日立公司的HD44780集成电路,只需将待显字符的ASCII码放入其数据存储器,字符就会自动在液晶显示器上显示。该显示器每屏最多可显示2行,每行16个字符,共32个字符。DATE:2019/12/19PAGE:25三、LCD液晶接口技术1、LCD引脚1602型LCD分有背光(16个引脚)和无背光(14个引脚)两种。14脚1602型LCD引脚共分成三类:1、电源引脚:引脚1和引脚2分别是电源正极(VSS)和负极(VDD)。2、数据引脚:引脚7到引脚14共8个引脚是双向数据总线的第0位到第8位。由于P0口
本文标题:第七章单片机人机交互.
链接地址:https://www.777doc.com/doc-2118207 .html