单片机原理及应用.ppt

上传人:roleaisle130 文档编号:374501 上传时间:2018-10-06 格式:PPT 页数:70 大小:1.04MB
下载 相关 举报
单片机原理及应用.ppt_第1页
第1页 / 共70页
单片机原理及应用.ppt_第2页
第2页 / 共70页
单片机原理及应用.ppt_第3页
第3页 / 共70页
单片机原理及应用.ppt_第4页
第4页 / 共70页
单片机原理及应用.ppt_第5页
第5页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、,单片机原理及应用,黄 建 科,项目四 LED电子钟的制作,能力目标:1. 能根据设计任务要求编制不同进制计数器的程序流程图,理解程序对数字电子时钟的控制原理;2. 会利用电路仿真软件绘制LED电子钟的制作的电路原理图;3. 会用keil C51软件对源程序进行编译调试及与protues软件联调,实现电路仿真。,任务1 从0到9的加1计数显示(静态)设计,一位计数器是单片机控制数码管计数显示的最简单的例子,本任务采用AT89S51单片机控制数码管静态显示的方式实现从0到9的加1计数显示。,1.1 提出任务,用AT89S51的P2口做输出口,接一位LED数码管,编写程序,使数码管显示从0到9的加

2、1计数,时间间隔为0.5s。即每显示一个数字后,保持0.5s,再显示下一个,显示到数字“9”之后再从“0”开始循环。,分析任务,1.硬件电路设计,任务1 从0到9的加1计数显示(静态)设计,电路组成:这里选择具有内部程序存储器的AT89S51单片机作为控制电路,P2口接1个1位共阳数码管,其中P2.0到P2.6分别连接数码管的af引脚,P2.7连接小数点h端。硬件电路原理图如上图所示。电路分析:要使LED数码管依次显示数字,则P2口对应输出七段数码管数字显示对应的编码即可。由于流过LED的电流通常较小,为了在仿真实验中让数字显示的更亮一些,所以一般还要在回路中接入合适的限流电阻。一般情况下,根

3、据驱动LED的电流电压计算,在这里取限流电阻为150。当P2.x输出为低电平时,对应的LED亮,输出高电平时,对应的LED不亮。,任务1 从0到9的加1计数显示(静态)设计,分析任务,2. 软件设计思路(共阳),分析任务,2. 软件设计思路,根据前面分析,实现任务的思路是: (1)程序开始时,给数组元素的变量赋初始值0,并将数组中第1个元素送P2端口; (2)延时0.5s后,将变量i加1,并判断是否已读取到第10个元素; (3)如果已经读取完,则对变量i重新赋值0,如果没有,则继续读取数组中第i个元素送到P2端口,依次循环。,程 序,任务1 从0到9的加1计数显示(静态)设计,/单只数码管循环

4、显示09 #include #include #define uchar unsigned char #define uint unsigned int Uchar code DSY_code =0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90,0xff;,/延时 Void Delayms(uint xms) uint I,j;for(i=xms,i0,i-)for(j=110,j0,j-) ; /主程序void main()uchar i=0;P2=DSY_codei;i=(i+1)%10;Delayms(500),思考与练习,若该从0到9

5、的加1计数显示采用共阴极数码管,则单片机控制的硬件电路及程序如何修改?修改程序中显示的数据,使其显示范围扩大到0F共16个十进制数。,一、知识储备,1.1 LED数码管动态显示驱动方式,动态驱动是将所有数码管的8个显示笔划“adp“的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制; 当单片机输出字形码时,所有数码管都接收到相同的字形码,我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。 通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。,任务2 动态显示设计,数码管动态显示接

6、口是单片机中应用最为广泛的一种显示方式之一;,1.1 LED数码管动态显示驱动方式,关于视觉暂缓效应:在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,但动态显示更能够节省大量的I/O端口,而且功耗更低。,任务2 显示(动态)设计,8只数码管滚动显示单个数字,使用8只集成7段共阳数码管CA,共阴CC,所有数码管的a脚并 联在一起,其余b、d、e、f、g、h也是并联,任何时候发送的段 码均会传送到所有数码管上,所有

7、数码管共阳极是独立的,P0 口为段控,P2口为位控,要让哪个数码管点亮,就给相应的位控 送合适的电平,为共阳的数码管,由于选用的是NPN三极管,P2.0 为1,就意味着第一个数码管点亮,其余的数码管均为熄灭,原因 是其余的共阳端没有+5V供电,本例位码初值为0X80,即1000 0000,for循环中执行循环左移,K为0000 0001,0000 0010,0000 0100,0000 1000,0001 00000010 0000,0100 0000,1000 0000,如此重复。,任务2 8位一体(动态)显示设计电路图,8只数码管滚动显示单个数字,程 序:8只数码管滚动显示单个数 #inc

8、lude #include #define uchar unsigned char #define uint unsigned int uchar code DSY_code =0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /延时 void Delayms(uint xms) uint I,j;for(i=xms,i0,i-)for(j=xms,j0,j-) ;,任务2 显示(动态)设计,/主程序void main()uchar I,k=0X80;while(1)for (i=0;i8;i+)P2=0Xff;/关闭显示k=_crol_(

9、k,1);P0=DSY_codei;/发送段码P2=k;/发送数码管位码Delayms(300); ,8只数码管显示多个不同字符,要求在数码管同时显示多个不同字符,为了使不同数码管显示不同字符,利用人眼视觉暂留特征,选通第一只数码管时,只发送第一个数码管的段码,同时切换延时程序时间的控制。,任务2 显示(动态)设计,8只数码管显示多个不同字符,程 序:8只数码管动态显示多个不同字符 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_code =0xc0,0xf9,0xa4

10、, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; void Delayms(uint xms) /延时 uint I,j;for(i=xms,i0,i-)for(j=xms,j0,j-) ;,void main() /主程序uchar k,m=0X80;P0=0XFF;P2=0X00;while(1)for (K=0;K8;K+)P2=m;/位码m=_crol_(k,1);P0=DSY_codek+1;/发段码Delayms(2); ,1.2 60进制计数程序设计说明,两位数计数函数可以采用一位数的计算方法实现,本任务实现60进制计数即是采用一位计数方法:unsign

11、ed char time=0 /定义变量time为计数值,初值为0 void calc() /计数程序 time0+; /计数值加1 if(time059) /判断计数是否到59 time0=0; /到59,则计数从0重新开始 ,任务3 从0到59的加1计数显示(动态)设计,1.2 60进制计数程序设计说明,由于数据存储结构的改变,导致计算的数据结构与原有的显示程序数据 结构不一致,于是本任务中将计算的数据通过一个数据转换程序后送到原有 的数据结构中,实现加1计数并显示。数据转换程序:由于是一位(time)计数,两位(059)显示,因此将 计数器所计数time转换为数码管显示所需要的十位和个位

12、数值,转换方法是: 将计数值time对10去整得到十位,对10求余得到个位。程序如下:void convert() /计数转换程序 display_data0=time/10; /对计数值取整得到计数的十位display_data1=time%10; /对计数值求余得到计数的个位,任务3 从0到59的加1计数显示(动态)设计,1.2 60进制计数程序设计说明,(2)分别计数方法两位数计数函数的实现方法还可以在原有的加1计算的程序基础上进行改进,即将个位数和十位数分别计数,个位计数每到9(满10),向十位进1,十位就加1,个位再从0开始计数。将计数值从数码管编码表读出且送端口显示数据,并控制个位

13、显示在十位的右边,就完成了两位数的计数显示。其计数程序可以简要写作: int time=0,0 /time0用于个位计数,time1用于存放十位计数 void calc() /计算程序 time0+; /个位计数, if(time09) /判断是否计数到9 time0=0; /若计数到9,则十位加1,个位重新从0开始 time1+; if time15; /判断十位是否计数到5 time1=0 /若十位计数到5,则计数重新开始 ,任务3 从0到59的加1计数显示(动态)设计,在时钟计数时,分和秒计数一般均为60进制,也就是说从0开始到59,之后重复。基于数字电子钟设计由浅入深的原则,在实现一位

14、数计数的基础上,本任务介绍采用AT89S51单片机控制数码管实现两位数计数。主要解决多位数计数以及不同位数的计数显示控制。,1.1 提出任务,用AT89S51的P2口做输出口,接一个8位LED数码管,编写程序,使数码管从0开始计数,到59时复位为0,即一个两位的加法计数器,数字显示时间间隔为0.5s。,二、设计示例,任务3 从0到59的加1计数显示(动态)设计,1.2 分析任务,1.硬件电路设计,任务3 从0到59的加1计数显示(动态)设计,电路组成:仍然选用 AT89S51单片机作为控制核心,1个8位共阳极数码管作为输出显示端。AT89S51的P0口接数码管的段码控制,其中P0.0P0.6分

15、别连接数码管的AG引脚,P0.7连接DP端,低电平有效。P2口接数码管位码选通部分,P2.0口控制第1个数码管,一直到P2.7口控制第8个,高电平有效。硬件电路原理图如图6.5所示,选择8位数码管的前面两位进行计数显示。 电路分析:要使8位数码管显示实现从0到59的动态计数,实际上就是通过P2口输出控制信号轮流选通数码管,共阳型数码管公共端为高电平方可选通,因此要求P2口由P2.7到P2.0依次输出高电平,然后在数码管段码控制端口P0按照一定规律送出要显示的数字09。由于P0口带负载能力较小,因此仿真电路中P0接入一排上拉电阻。,任务3 从0到59的加1计数显示(动态)设计,1.2 分析任务,

16、2. 软件设计思路,AT89S51端口输出电平分析:根据数码管的动态显示方式,要显示的数码管的8个笔画端接在单片机的P0端口的8位上,而单片机的另一个端口P2的各个位分别控制8位数码管的公共端,控制数码管是否点亮选通。在程序的控制下依次快速输出要显示的各个数,并同时控制对应的数码管工作,在这里选择最左侧两个数码管输出。P0端口输出电平如表6-2所示。,任务3 从0到59的加1计数显示(动态)设计,表6-2 数码管60进制动态显示段码任务分析表(一),任务3 从0到59的加1计数显示(动态)设计,表6-2 数码管60进制动态显示段码任务分析表(二),任务3 从0到59的加1计数显示(动态)设计,

17、2. 软件设计思路,从表6-2可以看出,各个数码管的段码都是P0口的输出,即各个数码管输入的段码都是一样的, 其计数过程是先只让最低位显示0(含点),经过一段延时,再只让次低位显示1,如此类推。可是,单片机控制的数码管选通一次只能有一位数码管显示,在计数超过9之后进入两位数计数过程,,即怎样才能使人在视觉上同时看到两位数?实际上,数码管的动态显示达到一定速度的时候,由于人的视觉暂留,只要我们的延时时间足够短,就能够使得数码的显示看起来非常的稳定,其显示过程和静态显示一样,不会产生闪烁,显示内容清楚。一般显示时间取几个毫秒,本任务中设计延时时间为0.5ms。程序工作时,使电路选通某一位数码管后,

18、该数码管被点亮并保持一段时间。,任务3 从0到59的加1计数显示(动态)设计,2. 软件设计思路,根据前面分析,实现任务的思路是:(1)将要显示内容的09十个数字存放在数组中; (2)程序开始后,数组中的元素不断地逐个送到数码管的段码端口P0 (3) 位码控制P2端选通要显示的数码管,则数字显示在选中的数码管上。,思考与练习,若要求LED数码管显示从59到0的减1计数,程序lsd5-2如何修改?若采用两位数分别计数的方法实现该60进制计数器,程序怎样设计?,所谓任意进制计数器就n进制计数器,是指从0开始计数到n-1时,又重复从0开始进行的计数过程。例如数字电子时钟的小时可以是24进制计数,也可

19、以是12进制计数,篮球比赛中用到30s规则中可以采用延时1s的30进制计数。本任务利用AT89S51单片机实现24进制计数器,并由此推广到任意进制计数。,1.1 提出任务,用AT89S51的P2口做输出口,接一个8位LED数码管,编写程序,使数码管从0开始计数,到23时复位为0,即一个两位的加法计数器,数字显示时间间隔为0.5s。,一、设计示例,任务4 任意进制计数器的设计,1.2 分析任务,采用数码管的动态显示方式,硬件电路组成与059计数电路一致,仍然选择8位数码管的前两位计数并显示,如图6.5。要显示的数码管的8个笔画端接在单片机的P0端口的8位上,而单片机的另一个端口P2的各个位分别控

20、制8位数码管的公共端,控制数码管是否点亮选通。在程序的控制下依次快速输出要显示的各个数,并同时控制对应的数码管工作 。,1.3 源程序,#include “reg51.h“ /定义头文件 #define uchar unsigned charuchar display_code=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /定义数组存放显示数字的编码uchar time=0,0,0; /定义数组存放计数初值void delay(void) /延时0.5ms uchar i;for(i=250;i0;i-); ,void display(

21、) /显示程序 uchar i,k;k=0x80;for(i=0;i1;delay();P2=0;P0=display_codetime0%10; /计数值求余得到个位,送P0端口P2=k;k=k1;delay(); P2=0; ,1.3 源程序,void calc() /计算程序 timer0+; /计数值加1if(time023) /判断计数值是否到23time0=0; /计数到23,则重新从0开始 void main(void) /主函数 uchar i;while(1) /无限循环for(i=0;i250;i+)display();calc(); ,1.3 源程序,2.1 12翻1减一

22、计数的源程序,#include “reg51.h“#define uchar unsigned char uchar display_code=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E; uchar time=13,0,0; /定义计数初值 void delay(void) /延时 uchar i;for(i=250;i0;i-); ,2.1 12翻1减一计数的源程序,void display() /显示程序 uchar i,k;k=0x80;for(i=0;i1; delay

23、(); P2=0; P0=display_codetime0%10;P2=k;k=k1;delay(); P2=0; ,2.1 12翻1减一计数的源程序,void calc() /计数程序 time0-; if(time0=0) time0=12; void main(void) /主函数 uchar i; while(1) for(i=0;i250;i+) display(); /先显示 calc(); /再计算 ,2.1 12翻1减一计数的源程序,显示效果如图6.10所示,2.2 计数程序设计说明,本任务中24进制和12翻1的计数程序均采用一位数计数方法,为了避免数据存储结构改变带来的影响

24、,我们根据新的数据结构重新编写了新的显示程序,即不通过转换程序,直接将计数值取整求余后送到显示端口,,二、知识链接,2.2 计数程序设计说明,void display() /显示程序 uchar i,k;k=0x80;for(i=0;i1;delay();P2=0;P0=display_codetime0%10;P2=k;k=k1;delay(); P2=0; ,思考与练习,若计数显示采用一位数计数,通过数据转换再显示,则程序如何修改?若采用两位数分别计数显示呢?设计程序,显示024以内的偶数。设计电路和程序,完成从0到365的循环计数,要求循环5次后停止。,数字钟是一个将“ 时”,“分”,“

25、秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒。本任务是基于AT89S51单片机的LED电子钟的制作,因此只简单实现计时并显示的过程,不包括校时功能和一些显示星期、报时、停电查看时间等附加功能。,1.1 提出任务,利用AT89S51单片机控制LED数码管实现LED电子钟的制作设计。要求小时采用24进制计数,分和秒采用60进制计数。,一、设计示例,任务5 LED电子钟的制作,1.2 分析任务,电路组成及分析:采用数码管的动态显示方式,硬件电路采用图5-5,要显示的数码管的8个笔画端接在单片机的P0端口的8位上,而单片机的另一个端口P2的各个位分别控制8位

26、数码管的公共端,控制数码管是否点亮选通。在程序的控制下依次快速输出要显示的各个数,并同时控制对应的数码管工作。 软件设计思路:根据任务分析可以确定整个程序的主框架是以定时1s计算依一次的方式来实现数字电子钟。定时1s的程序段,使用动态显示程序实现延时,即完成了延时1s,也完成了数字的显示。在计算程序中,使对应于时、分和秒的变量分别按照24进制和60进制进行计算,动态显示程序直接引用这些变量,达到显示的数字也随之不断的变化,即完成了数字钟的功能。,1.3 源程序,#include “reg51.h“ /头文件 #define uchar unsigned char uchar display_c

27、ode=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /存放显示数字的编码 uchar time=0,0,0,0; /定义数组,存放小时、分、秒的计数值 void delay05ms(void) /延时程序 uchar i;for(i=250;i0;i-); ,void display() /显示程序 uchar i,k;k=0x80;for(i=0;i1;delay(); P0=display_codetimei%10;P2=k;k=k1;delay(); P2=0; ,1.3 源程序,void calc() /计算程序 time2+;

28、 /秒加1 if(time259) /判断是否计数到59s /到59s time2=0; /秒从0 计数 time1+; /分加1 if(time159) /判断是否到59分 /到59分 time1=0; /分从0计数 time0+; /小时加1 if(time023) /判断是否计数23小时 /满23小时 time0=0; /小时从0重新开始计数 ,1.3 源程序,void main(void) /主函数 uchar i; while(1) for(i=0;i250;i+) /与所有程序语句配合,实现1s延时 display(); calc(); ,显示效果如图6.12所示,调试过程中应该注

29、意的问题:,(1)编辑的C语言源文件应该以.c后缀保存; (2)C语言文件编辑好要添加到工程项目中去才能编译; (3)编译要生成.hex文件,这是软件设计与硬件电路联系纽带,要实施仿真必须将.hex文件添加到硬件电路单片机芯片中去; (4)为了增加P0口驱动数码管的能力,加入上拉电阻,仿真库元件选择RES-PACK-8,注意其接线,1为电源引脚,29接数码管段码端口; (5)注意8段数码管选择,共阴极7seg-MPX4-CA(高电平选通,低电平亮),共阳极7seg-MPX4-CC(低电平选通,高电平亮); (6)程序中采用循环程序的延时时间来实现每隔1s计数,仿真效果观察时可能不够精确。一般都

30、采用单片机定时/计数器的功能实现精确计时,这些内容将在后续课程介绍。,思考与练习,在数字电子时钟程序中加入星期显示,周一到周日,电路及程序如何设计?设计一场足球比赛的倒计时器,每半场45分钟。设计一个简易的交通灯控制系统,要求用数码管显示两个方向的时间,用发光二极管代替三色交通灯,编写程序、绘制电路并仿真。,任务小结,单片机外围扩展应用电路中,常常使用数码管实现数字显示。 数码管实际上是一组普通发光二极管的连接,根据二极管的连接方式可分为共阳型数码管和共阴型数码管。 要设计具有数码显示的单片机应用系统时,应根据要显示的数字内容来选择数码管及其驱动方式。 数码管的驱动方式有静态式和动态式之分。在

31、硬件连接上,静态式是每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,即每个数码管的每一个笔画二极管都对应连接单片机的一个端口。动态式是将所有数码管的八个笔画二极管分为位码选通和段码显示两个部分,分别由单片机端口控制。显然,动态驱动显示方案能节省大量的单片机I/O端口,因此在设计中多数数码管都采用动态式驱动。,任务小结,5. 对电路进行设计与仿真时,先设计好硬件电路,接下根据任务要求设计程序。一般按照以下顺序进行:将要显示数字的编码统一存入一个数组中,同时定义一个计数变量,其计数值经过数据转换后送到数码管的段码端口准备,轮到哪个数码管显示就由单片机的位码控制端口输出位码选通信号,数字即

32、可显示在选中的数码管上了。 6. 需要说明的是,两位数及两位数以上的动态显示实际上是一个一个送入数码管并输出显示的,由于这过程的时间间隔短,人在视觉上的暂缓效应使得多位数字的显示看上去是同时发生的。,任务6 按键变数的设计与制作,任务目标:通过学习任务二,熟悉单片机的按键控制技术等。 任务描述:按键变数的设计与制作由电路和程序构成。从硬件上看,它主要由:最小系统、数码管、按键等器件组成。本任务为使用三个独立按键,按下按键A使数字变大,按下按键B使数字变小,按下按键C清零。要求使用按键识别方法、按键抖动消除等技术。,任务6 按键变数的设计与制作,一、技能要点 1硬件电路制作,(2)元器件清单,任

33、务6 按键变数的设计与制作,(3)按键简介,按键简单的说就是一个开关。按键根据结构可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。目前,单片机系统中最常见的是触点式开关按键。,任务6 按键变数的设计与制作,(4)按键的检测直接用万用表, R1电阻挡,检测按键的通断即可。,任务6 按键变数的设计与制作,2程序编写 #include /头文件 unsigned char Numb; /定义变量void delay10ms(void) /延时10ms unsigned char i,j; for(i=20;i0;i-) for(

34、j=248;j0;j-); void delay02s(void) /延时0.2s unsigned char i; for(i=20;i0;i-) delay10ms(); /调用延时10ms void main(void) /主程序while(1) if(P3_7=0) delay10ms();if(P3_7=0) ,任务6 按键变数的设计与制作,2程序编写 Numb+;if(Numb=4) Numb=0;while(P3_7=0); switch(Numb) /提供四种选择case 0:P1_0=P1_0;delay02s();break;case 1:P1_1=P1_1;delay02

35、s();break; case 2: P1_2=P1_2; delay02s();break; case 3: P1_3=P1_3; delay02s();break; ,3、按键变数制作要点 1)根据自己设计的电路图,完成焊接与组装任务。焊接注意事项: (1)元件的成形,电阻采用卧式安装法。 (2)数码管注意方向和管脚。 (3)所有集成电路先装IC座,严禁将IC直接焊接在电路板上。 (4)排阻注意第一脚的位置。 (5)按键注意方向。 2)程序设计。程序设计训练步骤: (1)独立按键程序设计与调试。 (2)矩阵按键程序设计与调试。 (3)数码管显示、按键控制的综合程序设计与调试。,单独按键键盘

36、的原理,单独按键键盘很简单: 只需要测试与按键相 连接口线的电平即可。 如果是高电平 则没有被按下; 如果是低电平 则该按键被按下。,VCC,K2,K1,K0,P10,P11,P12,1、独立式键盘,行列扫描键盘,单个按键在键盘上的结构,P12,VCC,1,0,2、行列式键盘,A 判断有没有键被按下 B 键盘抖动的消除 C 键盘按下键的辨认 D 键盘松开的等待,(1)行列式键盘工作原理行列式键盘电路原理如上图所示。按键设置在行列式交点上,行列线分别连接到按键开关的两端。当行线通过上拉电阻接+5伏时,被钳位在高电平状态。键盘中有无按键按下是由列线送入全扫描字、行线读入行线状态来判断的。键盘中哪一

37、个键按下可由列线逐列置低电平后,检查行输入状态来判断。,(2).行列式键盘工作过程,A 判断案键的按下 首先判断是否有按键动作 P10、P11、P12三线有上拉电阻,平时高电平 输出P13、P14、P15、P16低电平, 如果没有键盘按下, P10、P11、P12 仍高电平 如果有键盘按下, P10、P11、P12 就有低电平出现,抖动现象: B 机械按键的抖动消除 按键按下过程,列线的状态如下,按下按键前,列线为高电平,按键按下与送开后,列线处于抖动的不稳定状态,按键稳定了,松开按键之后,根据机械键盘的特性,抖动的时间在1030毫秒之间 所以,一般在判断到有可能是按键按下之后,再延时1030

38、毫秒,再判断,这时已经是键盘按下的稳定时期。没有抖动了! 下面的事情就是判断是哪个键被按下了,B 机械按键的抖动消除,C 判断是哪个按键被按下,一行一行地扫描: 什么叫扫描? 送出低电平给行线 再判断列线状态比如:P13 低电平 如果 P11 被检测到也是低 则说明在 P13与P11的交叉点上的按键 被按下了!四行全扫一遍,就得到全部情况,VCC,P12,D 等待按键松开,原因: 如果按键没有松开就退出程序 则又检测到有按键被按下了如果等松开再退出 则只得到唯一一个被按下的按键值,3、键盘工作方式,键盘的工作方式:编程扫描方式、定时扫描方式、中断扫描方式三种。 在键盘扫描子程序中完成下述几个功能。 (1)判断键盘上有无键按下 (2)去键的机械抖动影响。 (3)求按下键的键号。 (4)键闭合一次仅进行一次键功能操作。,中断式,查询式,中断方式键盘接口,三能力拓展 1、个位数的加减乘除计算器的设计与制作 2、密码锁的设计与制作,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1