版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目5按键识别的设计★知识目标:
1.了解单片机的定义、类型和应用领域;
2.掌握AT89S51单片机的封装形式、实物外形及各个引脚的功能;
3.掌握AT89S51单片机最小系统的组成及相关电路的工作原理;
4.掌握AT89S51单片机基本接口电路的组成及电路功能。★能力目标:
1.认识AT89S51单片机、晶体振荡器、RS-232串口端及电阻、电容等元器件。
2.会搭建单片机最小系统应用电路;
3.了解单片机应用系统的开发过程。任务1单键控制LED的设计在单片机应用系统中,键盘主要用于向计算机输入数据、传送命令等,是人工干预计算机的主要手段。键盘要通过接口与单片机相连,分为编码键盘和非编码键盘两类。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,使用最广泛的是非编码键盘。当然,也有用到编码键盘的。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。任务1单键控制LED的设计用单键(即独立键盘中的按键)实现对LED进行控制,每按一次按键时,LED显示方式变化一次,用以表示按键控制的结果。1.提出任务任务1单键控制LED的设计(1)硬件电路设计以AT89S51单片机作为控制电路,按键连接至单片机的P1.0引脚,另一端接地,P2口外接8个采用共阳极连接方式的发光二极管(LED)和8个限流电阻,硬件电路原理图所示。2.任务分析任务1单键控制LED的设计(2)独立式按键的软件设计在单片机应用系统中主程序一般是循环结构,键盘程序作为子程序供主程序调用。单片机按键控制系统的主程序结构图所示。任务1单键控制LED的设计上电初始化后便循环调用键盘程序、显示程序、功能处理程序等。在循环的过程中还可能因中断而执行中断服务程序。另外,在键盘的软件设计中还要注意按键的去抖动问题。由于按键一般是由机械式触点构成的,在按键按下和断开的瞬间均有一个抖动过程,时间大约为5ms~10ms,可能会造成单片机对按键的误识别。任务1单键控制LED的设计
物理按键抖动波形图任务1单键控制LED的设计按键消抖一般有两种方法,即硬件消抖和软件消抖。硬件消抖方法任务1单键控制LED的设计在软件设计中,当单片机检测到有键按下时,可以先延时一段时间越过抖动过程再对按键识别。实际应用中,一般希望按键一次按下单片机只处理一次,但由于单片机执行程序的速度很快,按键一次按下可能被单片机多次处理。为避免此问题,可在按键第一次按下时延时10ms之后再次检测按键是否按下,如果此时按键仍然按下,则确定有按键输入。这样便可以避免按键的重复处理。任务1单键控制LED的设计软件消抖流程图任务1单键控制LED的设计3.源程序编写/*文件名:xm5-1.c*/#include<reg51.h>//包含头文件sbitkey1=P1^0;//按键定义
voiddelay10ms(void)//延时10ms子函数{unsignedchari,k;
//变量定义for(i=20;i>0;i--)//for语句循环体for(k=250;k>0;k--);}任务1单键控制LED的设计3.源程序编写voidmain(void)//主函数{chari=0xfe;P2=i;//置P2.0引脚为低电平while(1){if(key1==0)//判断按键key1是否按下{delay10ms();if(key1==0)//去抖动{if((i&0x80)==0)i=i<<1;elsei=(i<<1)+1;P2=i;while(key1==0);}}}}任务2多路按键状态指示的设计用AT89S51单片机及LED数码管实现对键盘键值的实现。当按下键盘中不同按键时,LED数码管上显示不同的键值。1.提出任务任务2多路按键状态指示的设计2.任务分析(1)硬件电路设计本设计采用AT89S51单片机最小系统,P3口外接矩阵式键盘接口电路,P1口外接共阴型七段数码管,如图5.2.1所示。电路中共有16个按键,按4×4的矩阵式排列,键号依次为0~F。单片机的P3.0~P3.3为输出口,连接4条列线;P3.4~P3.7为输入口,连接4条行线。任务2多路按键状态指示的设计键盘键值显示电路图任务2多路按键状态指示的设计(2)软件设计思路矩阵式按键的软件设计与独立式按键不同的只是按键的识别方法不同。在矩阵式按键的扫描程序中,要对按键逐行逐列地扫描,得到按下键的行列信息,然后还要转换成键号,以便据此转到相应的键处理程序。按键扫描子函数中,先对4条行线送高电平,当判断有按键按下之后,延时30ms之后再判断该按键是否按下。若仍然有按键按下,则能知道被按下按键所处的行编码。之后再在判断被按下按键所处列编码,综合行、列编码得到按键位置,从而判断出键值。任务2多路按键状态指示的设计程序流程图任务2多路按键状态指示的设计3.源程序编写//文件名xm5-2.c#include<reg51.h>
#defineucharunsignedchar#defineuintunsignedintucharkey;unsignedcharcodedisp_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsignedcharcodekey_code[]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};任务2多路按键状态指示的设计3.源程序编写voiddelayms(uintms){uchart;while(ms--){for(t=0;t<120;t++);}}任务2多路按键状态指示的设计3.源程序编写ucharkeyscan()//键盘扫描程序{ucharscan1,scan2,keycode,j;P3=0xf0;scan1=P3;if((scan1&0xf0)!=0xf0)//判键是否按下{delayms(30);//延时30msscan1=P3;if((scan1&0xf0)!=0xf0)//二次判键是否按下{P3=0x0f;scan2=P3;keycode=scan1|scan2;//组合成键编码任务2多路按键状态指示的设计for(j=0;j<=15;j++){if(keycode==key_code[j])//查表得键值{key=j;return(key);}}}}elseP3=0xff;return(16);}任务2多路按键状态指示的设计voidkeydown()//判断是否有键按下{P3=0x0f;if((P3&0x0f)!=0x0f){keyscan();P0=disp_code[key];//在数码管上显示键值}}main(){P0=0xbf;//数码管显示"-"P3=0xff;while(1){keydown();}}任务2多路按键状态指示的设计
思考:矩阵键盘中,如果有两个按键同时按下,能否识别?任务2多路按键状态指示的设计
知识链接一、矩阵式键盘1.结构和工作原理当输入部分有多个按键时,若仍然采用独立键盘,必然会占用大量的I/O口,采用矩阵键盘是一种比较节省资源的方法。矩阵式键盘又称行列式键盘,往往用于按键数量较多的场合。矩阵式键盘的按键设置在行与列的交点上。任务2多路按键状态指示的设计一般矩阵键盘的连接示意图任务2多路按键状态指示的设计2.任务分析(1)硬件电路设计本设计采用AT89S51单片机最小系统,P3口外接矩阵式键盘接口电路,P1口外接共阴型七段数码管,如图5.2.1所示。电路中共有16个按键,按4×4的矩阵式排列,键号依次为0~F。单片机的P3.0~P3.3为输出口,连接4条列线;P3.4~P3.7为输入口,连接4条行线。任务2多路按键状态指示的设计2.按键的识别确定键盘上哪一个键被按下可以采用逐行扫描或逐列扫描的方法,称为行(列)扫描法。(1)先将全部列线置为低电平,然后通过行线接口读取行线电平,判断键盘中是否有按键被按下。(2)判断闭合键的具体位置。在确认键盘中有按键被按下后,依次将列线置为低电平,再逐行检测各行的电平状态。若某行为低电平,则该行与置为低电平的列线相交处的按键即为闭合按键。(3)综合上述两步的结果,即可确定出闭合键所在的行和列,从而识别出所按下的键。任务2多路按键状态指示的设计3.矩阵式键盘的软件设计矩阵式键盘的扫描常用编程扫描方式、定时扫描方式或中断扫描方式,无论采用哪种方式,都要编制相应的键盘扫描程序。在键盘扫描程序中一般要完成以下几个功能:(1)判断键盘上有无按键按下;(2)去键的机械抖动影响;(3)求所按键的键号;(4)转向键处理程序。任务2多路按键状态指示的设计在编程扫描方式中,只有当单片机空闲时,才执行键盘扫描任务。一般是把键盘扫描程序编成子程序,在主程序循环执行时调用。在主程序执行任务太多或执行时间太长时,按键的反应速度会变慢。在定时扫描方式中单片机可以定时对键盘进行扫描,方法是利用单片机内部定时器,每隔一定的时间就产生定时中断,CPU响应中断后对键盘进行扫描,并在有按键按下时进行处理。在中断扫描方式中,当键盘上有按键被按下时产生中断申请,单片机响应中断后,在中断服务程序中完成键扫描、识别键号并进行键功能处理。以上几种键盘扫描方式只是转入键盘扫描程序的方式不同,而键盘扫描程序的设计方法是类似的。任务2多路按键状态指示的设计二、函数的返回值
函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。对函数返回值有以下一些说明:
函数的值只能通过return语句返回主调函数。
return语句的一般形式为:
return表达式;
或者为:
return(表达式);
该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。
任务2多路按键状态指示的设计函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。
如函数值为整型,在函数定义时可以省去类型说明。
不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如:
voids(intn){……}一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。为了使程序有良好的可读性并减少出错,凡不要求返回值的函数都应定义为空类型。任务3采用外中断控制的彩灯设计利用独立按键(采用外部中断方式)控制彩灯的运行。通过按动按键,使得彩灯在三种闪亮方式(左移、右移、自定义花样)之间切换。1.提出任务任务3采用外中断控制的彩灯设计一般来说,按键处理方式有以下两种:第一种方法是不断地查询按键,有按键按下时进行消抖处理,再判断是否真的有按键按下。这种方法在按键查询期间不能做任何其他操作。第二种方法是每隔一段时间,抽样检测一次,对键值进行判别处理。利用按键对单片机输出进行控制的基本方式在任务1和任务2中已介绍,分别实现了单键、多键对单片机输出的控制。但是,任务1和任务2中的对按键处理的方式还存在不够完善之处。为了解决这个问题,本任务中采用单片机的外部中断方式来实现对按键输入的处理。为了实现外部中断对单片机的输出的控制,需要将按键连接在外部中断所对应的引脚上。2.任务分析任务3采用外中断控制的彩灯设计中断控制LED电路图任务3采用外中断控制的彩灯设计由于中断函数与主函数之间的运行相当于两个程序并行运行,而将一个任务分为两个部分处理的具体分解方法有多种,因此用中断函数控制彩灯的显示,具体实现方法和实现程序也是多种多样的。3.程序设计分析任务3采用外中断控制的彩灯设计(a)主函数流程图
b)中断函数流程图任务3采用外中断控制的彩灯设计//文件名xm5-3.c#include<reg52.h>#defineucharunsignedcharucharlight,a,b;voiddelay05s()//延时0.5s子函数{uchari,j,k;for(i=5;i>0;i--)for(j=200;j>0;j--) for(k=250;k>0;k--);}4.源程序编写任务3采用外中断控制的彩灯设计voiddelay10ms(){uchari,k;for(i=20;i>0;i--)for(k=250;k>0;k--);}
voidleft()//左移点亮LED{light=light<<1;if(light==0)light=0x01;P2=~light;}
voidright()//右移点亮LED{light=light>>1;if(light==0)light=0x01;P2=~light;}
4.源程序编写任务3采用外中断控制的彩灯设计voidassum()//用户自定义LED点亮方式{ucharcodedispcode[8]={0xff,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e};if(b==7)b=0;elseb++;P2=dispcode[b];}
4.源程序编写任务3采用外中断控制的彩灯设计voidmain(){IT0=1;//设置INT0为下降沿触发EX0=1;//局部开中断,即允许INT0中断EA=1;//全局开中断a=1;light=0x01;b=0;while(1){switch(a){case1:left();break;case2:right();break;case3:assum();break;}delay05s();}}
4.源程序编写任务3采用外中断控制的彩灯设计
voidint_0()interrupt0//中断子函数{delay10ms();if(INT0==0){a++;if(a>3)a=1;}}4.源程序编写任务3采用外中断控制的彩灯设计
知识链接
1.中断有关概念所谓中断就是利用硬件配合,根据某种需要断开正在执行的程序而转向另一专门程序,结束后再返回到原断开处继续执行被中止的程序,这个过程称为中断。中断后转向执行的程序叫中断服务程序或中断处理程序。原程序被断开的位置(地址)叫作断点。发出中断信号的设备称为中断源。中断源要求中断服务所发出的标志信号称为中断请示或中断申请。中断源向CPU发出中断申请,CPU经过判断认为满足条件,则对中断源作出答复,这叫中断响应。中断响应后就去处理中断源的有关请求,即转去执行中断服务程序。对于计算机控制系统而言,中断源是多种多样的。不同的机器中断源也有所不同。一般情况,中断包括:外部设备如键盘、打印机等,还有内部定时器、故障源以及根据需要人为设置的中断源等。任务3采用外中断控制的彩灯设计2.引入中断的主要优点(1)提高CPU工作效率CPU工作速度快,外设工作速度慢,形成CPU等待,效率降低。设置中断后,CPU不必花费大量时间等待和查询外设工作。(2)实现实时处理功能中断源根据外界信息变化可以随时向CPU发出中断请求,若条件满足,CPU会马上响应,对中断要求及时处理。若用查询方式往往不能及时处理。(3)实现分时操作单片机应用系统通常需要控制多个外设同时工作。例如键盘、打印机、显示器、A/D转换器、D/A转换器等。这些设备工作有些是随机的,有些是定时的,对于一些定时工作的外设,可以利用定时器,到一定时间产生中断,在中断服务程序中控制这些外设荼。例如动态扫描显示,每隔一定时间,更换显示字位码和字段码。任务3采用外中断控制的彩灯设计3.AT89S51中断源AT89S51单片机共有5个中断源。它们分别是:2个外部中断,即3个片内中断,即定时器T0的溢出中断、定时器T1的溢出中断和串行口中断;这5个中断源,可以根据需要随时向CPU发出中断申请。当外部中断源超过两个,还可以通过一定的方法扩充。任务3采用外中断控制的彩灯设计(1)外部中断源外部中断是由外部信号引起的,请求有两种信号触发方式,即低电平触发和下降沿触发。外部中断请求的这两种信号方式,可通过设置寄存器TCON中的IT0和IT1位状态的值来设定。TCOND7D6D5D4D3D2D1D0位符号TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H寄存器TCON的内容及位地址任务3采用外中断控制的彩灯设计其中各位的含义如下:①IT0和IT1:外部中断请求触发方式控制位②IE0和IE1:外中断请求标志位。③TF0和TF1:定时/计数器溢出中断请求标志位④TR0(TR1):定时/计数器的运行控制位任务3采用外中断控制的彩灯设计(2)定时器溢出中断源定时/计数器中断由单片机内部定时器产生,属于内部中断。AT89S51内部有两个16位的定时器/计数器T0和T1,它们以计数的方法来实现定时或计数的。当它作为定时器使用时,其计数信号来自于CPU内部的机器周期脉冲,当它作为计数器使用时,其计数信号来自于CPU的T0(P3.4)、T1(P3.5)引脚。在启动定时/计数器后,每来一个机器周期或在对应的引脚上每检测到一个脉冲信号时,定时/计数器就加1一次,当计数器的值从全1变为全0时,就去置位一个溢出标志位,CPU查询到后就知道有定时/计数器的溢出中断的申请。(3)串行中断源串行口中断请求是在单片机芯片内部自动发生的,不需在芯片上设置引入端。串行口中断源分为串行口发送中断和串行口接收中断两种。串行中断是为串行数据传送的需要而设置的。每当串行口发送完一组串行数据时,就会使串行口控制寄存器SCON中的串行发送中断标志位TX置1,每当串行口接收完一组串行数据时,就会使寄存器SCON中的串行接收中断标志位RX置1,作为串行口中断请求标志,产生一个中断请求。任务3采用外中断控制的彩灯设计SCOND7D6D5D4D3D2D1D0位符号SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H寄存器SCON的内容及位地址其中与中断请求标志有关的位如下:①TI:串行口发送中断请求标志位②RI:串行口接收中断请求标志位任务3采用外中断控制的彩灯设计4.中断控制51系列单片机中断系统的硬件结构如下图所示。对中断信号进行锁存、屏蔽、优先级控制是通过设置一些特殊功能寄存器,如寄存器TCON、SCON、IE和IP来进行的。任务3采用外中断控制的彩灯设计IED7D6D5D4D3D2D1D0位符号EA--ESET1EX1ETOEX0位地址AFHAEHADHACHABHAAHA9HA8H寄存器IE的内容及位地址任务3采用外中断控制的彩灯设计其中各位的含义如下:EA:中断允许/禁止位,它是中断请求的总开关。0为禁止,1为允许。当EA=O时,将屏蔽所有中断请求。ES:允许/禁止串行口中断,当ES位为0时,禁止串行口中断。当ES位为1时,允许串行口中断。ETl:允许/禁止定时器T1中断,当ETl位为0时,禁止定时/计数器Tl中断,当ETl位为1时,允许定时/计数器Tl中断。EXl:允许/禁止
中断,当EXl位为0时,禁止
中断,当EXl位为0时,禁止
中断。ET0:允许/禁止定时器T0中断,当ET0位为0时,禁止定时/计数器T0中断,当ET0位为1时,允许定时/计数器T0中断EX0:允许/禁止
中断,当EX0位为0时,禁止
中断,当EX0位为1时,允许
中断。AT89S51单片机复位后,将IE寄存器清零,单片机处于关中断状态。若要开放中断,必须使EA=l且响应中断允许位也为1。开中断既可使用置位指令,也可使用字节操作指令实现。任务3采用外中断控制的彩灯设计(2)中断优先级控制寄存器IP单片机的中断系统通常允许多个中断源,当几个中断源同时向CPU发出中断请求时,就存在CPU优先响应哪一个中断源请求的问题。AT89S51单片机只有两个中断优先级,即低优先级和高优先级,对于所有的中断源均可由软件设置为高优先级中断或低优先级中断,当寄存器IP中相应位的值为0时表示该中断源为低优先级,为l时表示为高优先级。高优先级中断源可以中断一个正在执行的低优先级中断源的中断服务程序,即可实现两级中断嵌套,但同级或低优先级中断源不能中断正在执行的中断服务程序。IPD7D6D5D4D3D2D1D0位符号---PSPT1PX1PTOPX0位地址BFHBEHBDHBCHBBHBAHB9HB8H寄存器IP的内容及位地址任务3采用外中断控制的彩灯设计各位含义如下:PS:串行口中断优先级控制位。若PS=1,则串行口指定为高优先级,否则为低优先级。PTl:定时/计数器T1中断优先级控制位。若PTl=1,则定时/计数器T1指定为高优先级,否则为低优先级。PXl:外部中断1中断优先级控制位。若PXl=1,则外部中断1指定为高优先级,否则为低优先级。PT0:定时/计数器T0中断优先级控制位。若PT0=1,则定时/计数器T0指定为高优先级,否则为低优先级。PX0:外部中断0中断优先级控制位。若PX0=1,则外部中断0指定为高优先级,否则为低优先级。AT89S51单片机中,当几个同级的中断源提出中断请求,CPU同时收到几个同一优先级的中断请求时,哪一个的请求能够得到服务取决于单片机内部的硬件查询顺序,其硬件查询顺序便形成了中断的自然优先级,CPU将按照自然优先级的顺序确定该响应哪个中断请求,自然优先级是按照外部中断0、定时/计数器0、外部中断1、定时/计数器1、串行口的顺序依次来响应中断请求。任务3采用外中断控制的彩灯设计AT89S51单片机中,当几个同级的中断源提出中断请求,CPU同时收到几个同一优先级的中断请求时,哪一个的请求能够得到服务取决于单片机内部的硬件查询顺序,其硬件查询顺序便形成了中断的自然优先级,CPU将按照自然优先级的顺序确定该响应哪个中断请求,自然优先级是按照外部中断0、定时/计数器0、外部中断1、定时/计数器1、串行口的顺序依次来响应中断请求。中断源入口地址中断号优先级别说
明
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国有企业内审咨询合同
- 二零二四年度网络安全防护承包合同
- 混凝土浇筑项目分包合同范例
- 无负压供水设备工程项目招募书
- 学生勤奋努力保证书
- 比选招标内部精要
- 银行单位存款合同样式
- 服务外包合同的继承规定
- 食品供货采购合同
- 泥水分包合同书范本
- 2024年官方兽医考试题库
- GB/T 35428-2024医院负压隔离病房环境控制要求
- 富士-XE2-相机说明书
- 形势与政策补考2-国开(XJ)-参考资料
- 2023军队文职公开招聘考试《英语语言文学》备考真题汇编
- 《中国药物性肝损伤诊治指南(2024年版)》解读
- AI眼镜行业深度:现状及趋势、竞争格局、产业链及相关公司深度梳理
- 智联招聘国企笔试题库
- 2025数学步步高大一轮复习讲义人教A版复习讲义含答案
- Unit 5 What does he do A Let's talk(教案)2023-2024学年英语六年级上册
- 第四章轴测图4 (1)讲解
评论
0/150
提交评论