单片机原理与应用实验报告.docx
单片机原理与应用试验指导书卢 钢 张翼华中科技大学文华学院信息学部 2023.6前 沿本试验指导书是华中科技大学文华学院“ 单片机原理与应用教学改革”教研工程工程编号: J09007403F7 的组成局部。其根本指导思想是:试验全过程,即为单片机应用系统开发的全过程;就是依据任务要求试验设计题目或用户需求, 首先设计出合理的硬件系统,然后以此为根底进展相应软件程序设计,测试、分析结果,再修改、再测试,直至正确实现设计任务的要求。硬件电路设计是单片机嵌入式应用系统设计的根底,以往传统的试验往往无视了这个环节,结果造成同学们试验完了,还不清楚是怎么回事。加强硬件电路设计这个环节,是本试验指导书特点之一。基于上述思想,第一,本单片机试验开发仪由单片机最小系统和十多个独立功 能模块或器件构成,它们的信号线通过接线排座引出,为敏捷设计不同的单片 机应用系统供给了平台。同样的设计题目,可以设计出不同的硬件电路和不同的软 件程序。其次,要求同学完成试验的同时完成试验报告。试验报告包含:设计题目,硬件电路设计含电路图和简要原理说明 ,软件程程设计含序流程图、原代码和注释,试验结果分析试验过程中消灭问题、缘由及解决方案。以此,进一步增加同学 对单片机应用系统设计全过程的理解和把握,同时训练同学撰写报告的力量。第三,在每个 试验中,给出了不同的设计题目,每个题目给出了不同的硬件电路和软件编程参考设计,其 目的,使同学了解同样的设计题目,有不同的解决方案。第四,每个试验中都给出了思考题, 以此使同学们进一步理解单片机系统硬件与软件之间的关系和进一步把握单片机工作原理。建议同学们千万不要抱着毕业之后到公司去学习的态度,由于企业主要目的是盈利,而培训要花费相当长的时间和精力,因此对于企业来说,更青睐那些学问构造 健全、应用阅历丰富、创力量强的人。这正好印证了我们常说的一句话:时机总 是留给那些有预备的人!抓紧预备,从学问构造、专业技能等方面塑造自己、进展 自己,提高实际应用力量,以增加自己在就业时的筹码。我们期望本试验指导书能为同学们学好单片机原理与应用课程和把握单片机应用系统设计供给有益帮助。由于编写时间较仓促,加上作者的水平有限,讲义中难免有遗漏和缺乏之处,恳请宽阔教师、同学提出贵重意见,批判和指正,以便作者做进一步改进,更好满足同学们学习单片机的需要。编者2023.6试验要求1、试验前必需阅读教科书的有关局部和本试验指导书,了解试验目的、 内容、步骤, 做好试验前的预备工作,否则不得上机操作。2、依据试验指导书说明正确连线,严禁带电接线和接插元器件。通电前须经过指导教师检查认可前方能通电。3、在弄清楚试验原理与过程前,不准随便拨弄各种与试验无关的旋钮和开关,凡与本次试验无关的任何设备都制止动用和摸弄,留意安全。4、在弄清楚试验原理与过程前, 严禁用手触摸试验系统印制电路板和元器件的引脚, 防止静电击穿芯片。5、试验中假设损坏仪器或元器件,应准时向指导教师报告。6、在试验室内保持安静和卫生,不得随便走动和喧哗,认真完成试验。7、试验完成后,关掉电源,准时整理试验台桌面,保持环境干净。8、按规定认真完成试验报告,在规定的时间内缴上试验报告。9、凡试验或试验报告未能按规定完成的学生,不能参与本课程的考试或考察。目 录试验一 单片机试验开发仪硬件学习1试验二 单片机开发环境搭建5试验三 单片机掌握LED 灯试验15试验四 数码管试验20试验五 按键试验27试验六 中断试验35试验七 定时器试验41试验八 串口通信试验48附录一 试验报告模板56附录二 单片机试验开发仪电路图58试验一 单片机试验开发仪硬件学习一、试验目的生疏单片机开发仪硬件电路原理图、 PCB 板元器件布局以及跳线帽和接线插座的作用。二、 51 单片机试验开发仪硬件电路简介51 单片机试验开发仪硬件电路原理图详见附件。原理图按功能模块给出,每个模块分别给出了相应器件和外接连线定义符号,它可作为设计应用系统中的一个独立器件或功能模块使用。该试验开发仪由51 单片机最小系统、电源模块、矩阵键盘模块、独立键盘模块、 8 位 LED 数码管显示模块动态数码管 、1 位 LED 数码显示管静态数码管 、10 位 LED 灯模块 (交通灯等多个模块构成。我们在设计单片机应用系统硬件电路时,需依照设计要求,由单片机最小系统和某些功能模块或器件组成。这里只介绍单片机最小系统模块。其他模块在具体试验或应用设计时,再进展学习。51 单片机最小系统原理图如图1-1 所示。单片机的 4 个 I/O 口, P0 口、P1 口、P2 口、P3 口分别接至 JP10 、JP8 、JP11 和 JP9 接线排座,通过接线排座与有关器件连接,实现 I/O 对不同模块的操作掌握以及系统扩展,从而实现不同的应用系统。留意:其中某些 I/O 引脚已固定作为某种信号,直接或通过短路帽连接到固定器件。例如, P2.0 、P2.1 作为 EEPROM 器件的 SDA 和 SCL 信号直接接到该器件的第5、第 6 脚; P3.4 作为实时时钟芯片 DS1302 的 DSIO 信号,通过短路帽 JP1302 连接到DS1302 的第 6 脚 SDIO) 。单片机的复位电路模块如图 1-2 所示,利用短路帽经 J9 ,可便利实现高电平脉冲复位或低电平脉冲复位,这点以选用单片机型号确定。 51 单片机为高电平脉冲复位,其复位引脚 RST( 引脚 9应通过短路帽使 J9 的 2、1 短接。图 1-1 51 单片机最小系统 MCU) 原理图图 1-2 单片机复位电路二、 51 单片机试验开发仪元器件布局单片机试验开发仪元器件布局如图1-3 和 1-4 所示。单片机试验开发仪元器件布局如图 1-3 和 1-4 所示。图 1-3 单片机试验开发仪元器件布局图1图 1-4 单片机试验开发仪元器件布局图2三、试验开发仪使用 IC 芯片1、U0:DS1302,实时时钟RTC)芯片;2、U1:24C16,串行I2C EEPROM 芯片;3、U2:MAX232,串口通信TTL-RS232 电平转换芯片;4、U3:CH340T,USB 转串口TTL 芯片;5、U4、U5:74HC595,串入并出移位存放器芯片输出锁存器;6、U7:PCF8591,I2C 总线A/D、D/A 芯片;7、U8:74LS165,并入串口移位存放器芯片输入锁存器;8、U9:MAX485,串行通信口TTL-RS485 电平转换芯片;9、U10:NE555,时基电路定时器芯片,用它可设计成几十种应用电路;10、U12:74LS138,3-8 译码器芯片;11、U13:74537,8 位锁存器芯片;12、U15: NLN2023,达林顿驱动芯片输出电流可达1A,可驱动步进电机;13、U18:UDN2916,双全桥PWM 马达驱动器芯片;14、STC90C516: STC90 系列 C51 单片机;15、DS18b20: 单线数字温度传感器;16、IR: 红外线接收头试验二 单片机开发环境搭建软件的开发离不开开发环境,开发环境是指在根本硬件和数字软件的根底上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,通常包括文本编辑环境、语言编辑器、对应的函数库和帮助文件等。目前 MSC-51 单片机开发中使用最为广泛的是美国 Keil uvision 公司的 Keil uVsion 集成开发环境。该环境能运行在 Windows 操作系统上,集成了 KeilC51 编译器、uvision IDE 集工程治理、编译工具、代码编写工具、代码调试以及完全仿真于一体,供给了一个简洁易用的开发平台。一、试验目的1、进一步生疏 51 单片机试验开发仪。2、Keil C51 软件使用。二、设计题目1、点亮 8 只 LED 灯的第 7 个 LED 灯用P2 口2、点亮 8 只 LED 灯的第 1 个 LED 灯用P0 口三、试验步骤keil 51 使用Keil uVsion 自带工程治理器,所以用户不需要在工程治理上花费过多的精力,只需要依据以下步骤操作即可建立一个属于自己的工程。(1) 、启动 uVsion,建立工程文件并且选择器件。(2) 、建立源文件、头文件等相应的文件。(3) 、将工程需要的源文件、头文件、库文件等添加到工程中。(4) 、修改启动代码并且设置工程相关选项。(5) 、编译并且生成 Hex 或者 Lib 文件。1、建立工程工程(1) 、开机,运行 Keil uVision4,其运行界面如图 2-1 所示。图 2-1 Keil 运行界面(2) 、点击“ProjectNew Project”菜单,弹出“Creat New Project”对话框,如图 2-2 所示。图 2-2 创立工程(3) 、选择工程文件要存放的路径,输入工程文件名 ,最终单击保存,如图 2-3 所示。在“保存在”下拉框中选择工程文件要存放的路径,在“文件名”文本框处用键盘敲入你要给这个工程起的工程名如“test1”,用鼠标左键单击“保存”按键。图 2-3 输入工程名(4) 、选择 MCS-51 单片机的型号,如图 2-4、图 2-5 所示。在弹出的“Select a CUP Data Base File”对话框中选择“STC MCU Database”,单击 “OK”按键。图 2-4 选择CPU 数据库文件然后在弹出的“Select Device for Target Target”对话框中选择单片机的型号。我们单片机试验开发板上CPU 的型号是“ STC90C516RD+”,因此我们在对话框中选择 “STC90C52RC”。图 2-4 选择单片机型号选择单片机型号之后,消灭对话框询问是否自动参加 MCS-51 单片机的启动文件,点“是”,该文件用于初始化单片机内部存储器等,添加完成之后在工程治理窗口中可以看到 startup.A51 文件已经被参加。到此为止,我们还没有建好一个完整的工程,虽然工程名有了,但工程当中还没有任何文件及代码,接下来我们添加文件及代码。2、建立和包含文件在工程文件中创立的源文件并且包含相应的文件,其步骤如下:(1) 、鼠标左键单击“File”“New”菜单项,或单击界面上的快捷图标所示。,如图图 2-6图 2-6 建源文件(2) 、保存建的文件,单击 SAVE 或者用鼠标左键单击菜单“File” “Save As.”,如图 2-7 所示。图 2-7 保存建源文件(3) 、在弹出的“Save As”对话框中输入你给这个文件起的文件名。留意:后缀名必需为.C单击“保存”,如图 2-8 所示。图 2-8 保存建源文件(4) 、将源文件添加到工程中。回到编辑界面,在左边资源治理器中用鼠标左键单击“Target 1”前面的“+”号,然后在“Source Group 1”选项上单击右键,然后选择“And Files to Source Group 1”菜单项,如图 2-9 所示。图 2-9 将源文件添加到工程中(5) 、选择要参加的文件,单击 Add,然后单击Close,如图 2-10 所示。文件类型选择“C Source file*.c”。图 2-10 选择要参加的文件3、代码编写完成前面的添加步骤之后用户就可以开头代码的编写,如图2-11 所示。图 2-11 代码编写4、工程配置工程配置是指对工程的实际状况设置参数,使得编译能按当前工程的实际状况对代码进展编译操作。单击菜单“Project”中的“Option for Target“Target 1”选项或菜单栏上的快捷图标 ,如图 2-12 所示。图 2-12 选择目标其中有很多项选择项,我们只需将:(1) 、XtalMHz- 改为单片机试验开发板上的晶振的频率-12MHz,如图 2-13 所示。图 2-13 配置晶振(2) 、选中“Output”选项单中的“ Create Hex File”选项,这是为了能生成供 MSC-51单片机执行的Hex 文件,如图 2-14 所示。然后单击“确定”。图 2-14 创立Hex 文件5、编译工程并且处理错误单击主菜单中“Project” “Built target”, 对工程进展编译并且生成对应的Hex文件。编译通过,程序没有错误。此时下边窗口显示“test1” - 0 Error(s), 0 Warning(s). 如图 2-15 所示。图 2-15 程序编译假设在编译中消灭错误则会在“output”窗口中看到对应的错误信息。双击“output” 窗口中对应的错误信息,则在编辑窗口光标会跳到出错的对应语句,并且在左边消灭一个蓝 色箭头,便利使用户修改。假设修改之后的编译,选择“Rebuilt all Target Files”即可。四、硬件电路设计参考1、使用总线法,用单片机的P2 口来驱动 8 个 LED,接线排座JP11单片机P2 口和接线排座 JP1LED 灯用 8PIN 排线连接起来。2、 使用位操作法,用单片机的P0.0 驱动 8 个 LED 灯的第 1 个,用杜邦线将JP10 接线排座的第 1 引脚单片机的P0.0)与接线排座JP1 的第 1 引脚LED 灯 D1)连接。五、软件程序设计参考编程时留意:由于发光二极管的阳极接高电平,只有当掌握它的 I/O 口输出为低电寻常, 才可以驱动其点亮留意 8 个 LED 发光二极管在试验板上的位置。1、点亮第 7 个发光二级管#include<reg51.h> void mainP2=0xbf;2、点亮第 1 个发光二级管#include<reg51.h> sbit led0=P00; void mainled0=0;六、思考1、点亮第 4 个发光二极管位操作法,用P2 口2、点亮第 3 个发光二级管总线法,用P0 口试验三 单片机掌握 LED 灯试验一、试验目的1、 进一步把握Keil 的使用,生疏单片机C 语言编程。2、 学习 I/O 口的使用方法。二、设计题目1、 单只 LED 灯D3) 闪耀2、 双 4 只 LED 灯D1、D3、D5、D7 与D2、D4、D6、D8交替闪耀3、 8 只 LED 灯D1、D2、D3、D4、D5、D6、6D7、D8流水灯显示三、试验原理发光二级管是半导体二极管的一种,可以把电能转化为光能,常简写为LED。发光二 极管与一般二极管一样是由一个PN 结组成,也具有单向导电性。只要加在发光二极管两端的电压超过它的导通电压一般为1.7V-1.9V它就会导通,而当流过它的电流超过肯定电流时一般 2-3mA它就会发光。LED 常用在MCS-51 单片机中指示单片机的某个开关量的状态。对单片机的掌握,其实就是对I/O 口单片机引脚的掌握。单片机共四个端口,P0、P1、P2、P3;每个端口分别有 8 个引脚 P0.0-P0.7、P1.0-P1.7、P2.0-P2.7、P3.0-P3.7;这 32 个引脚既可以作输出脚,又可以作输入脚。作输出脚时,单片机可以掌握指示灯、数码管、电机等外部器件;作输入脚时,可以“感受”按键、开关、传感器等外部器件例如接收数据-此就是作为输入脚的,单片机的每个引脚都是可以分开掌握的,即独立的给高或 者低电平。想要点亮一个小灯,首先要将小灯与单片机的一个 I/O 口连接好,然后将此引脚给高或者低电平,接着这个小灯就可以依据你给的电平实现点亮或熄灭了。四、硬件电路设计参考LED 模块排线接口如图 3-1 所示。依据试验原理,只要将所需掌握的 LED 对应排线引脚连接到单片机一个I/O 口即可。1、 连接方法JP11P2和JP1 和 LED 灯的 JP1 用 8PIN 排线连接起来。2、 硬件说明使用单片机的P2 口来驱动 8 个 LED,发光二极管的阳极接高电平,故 P2 口为低电寻常, 就可以驱动其点亮。五、软件程序设计参考1、单只LED 灯D3闪耀程序一: #include<reg51.h>void delay(void)unsigned int i; for(i=0;i<20230;i+);void main(void)while(1)P2=0xfb; delay; P2=0xff; delay;程序二: #include<reg51.h> void mainwhile(1)unsigned int a; P0=0xfb; /1111 1011 a=5000;while(a-);P0=0xff;/1111 1111 a=5000;while(a-);2、双 4 只 LED 灯D1、D3、D5、D7 与 D2、D4、D6、D8交替闪耀#include<reg51.h>#define uint unsigned int #define uchar unsigned char void delay;void mainwhile(1)P2=0xaa; delay; P2=0x55;delay;void delayuint x,y; for(x=100;x>0;x-)for(y=600;y>0;y-);3、8 只 LED 灯D1、D2、D3、D4、D5、D6、D7、D8流水灯显示#include<reg51.h>void delay(void)unsigned char i,j; for(i=0;i<250;i+)for(j=0;j<250;j+);void mainwhile(1)P2=0xfe;delay; P2=0xfd; delay; P2=0xfb; delay; P2=0xf7;delay; P2=0xef; delay; P2=0xdf; delay; P2=0xbf; delay; P2=0x7f;delay;学到了这里,信任大家对单片机有了一个初步的生疏,知道怎样去创立一个工程,以及 怎样去操作一个I/O 口了,其实单片机的学习就是通过对 I/O 口的操作来实现不同的功能。请同学们记住学习中不怕难,就怕不努力,肯花时间,就肯定学的好。六、思考题1、 点亮 2、3、5、6 这四个LED 灯。2、 点亮单片机开发试验仪上的D1、D3、D5、D7 灯与D2、D4、D6、D8 灯交替闪耀3、 跑马灯。试验四 数码管试验一、试验目的1、 把握数码管显示原理静态显示和动态显示。2、 把握数码管显示编程。二、设计题目1、让单位数码管显示一个 5用P0 口2、让四位数码管第四位显示一个3位选用P2 口掌握,段选用P0 口掌握3、 在八个数码管上显示 0、1,27三、试验原理数码管是一种半导体发光器件,是MCS-51 单片机系统中用得格外多的一种输出通设备,其根本单元是发光二级管。MCS-51 单片机系统中最常使用的是 8 段数码管。1、数码管显示原理afgbedcdp·gf GNDa bab cdefg5Vab cd ef gdpdped GND cdpab图 4-1 数码管内部原理图8 段数码管的内部构造是由 8 个发光二极管组成的,如图4-1 所示,从图4-1a可看出,一位数码管的引脚是 10 个,显示一个 8 字需要 7 个小段,另外还有一个小数点,所以其内部一共有 8 个小的发光二极管,最终还有一个公共端,生产商为了封装的统一,单位数码管都封装 10 个引脚,其中第 3 和第 8 引脚是连接在一起的。而它们的公共端又可以分为共阳极和共阴极,如图 4-1b所示。共阳极数码管的 8 个发光二极管的阳极正极连接在一起接高电平一般接电源,其它管脚接各段驱动电路输出端。当某段的输出端为低电寻常,则该段所连接的发光二极管导通并点亮,依据发光字段的不同组合可显示出各种数字或字符。共阴极数码管的 8 个发光二极管的阴极负极连接在一起接低电平一般接地,其它管脚接各段驱动电路输出端。当某段的输出端为高电寻常,则该段所连接的发光二极管导通并点亮,依据发光字段的不同组合可显示出各种数字或字符。因此我们在显示数字的时候首先做的就是给“0-9”十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。当数码管为多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以掌握多位一体中的哪一位数码管点亮,而连接在一起的段线可以掌握这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片机及外部驱动电路就可以掌握任意的数码管显示任意的数字了。2、数码管静态显示静态显示的特点是每个数码管的段选必需接一个8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可始终保持,直到送入字形码为止。这种方法的优点是占用CPU 时间少,显示便于监测和掌握。缺点是,当显示多位数字时,将占用较多的I/O 端口, 硬件电路比较简单,本钱较高。3、数码管动态显示动态显示的特点是将全部位数码管的段选线并联在一起,由位选线掌握是哪一位数码管有效。点亮数码管承受动态扫描显示。所谓动态扫描显示即轮番向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉似乎各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。四、硬件电路设计参考1、单位数码管静态显示单位静态数码管模块电路及排线接口如图4-2 所示。该数码管为共阳极数码管。(1) 、连接方法用 8PIN 排线将JP3 与 JP10 单片机I/O P0 口连接,如图 4-3 所示。(2) 、硬件说明图 4-2 共阳极数码管接线图使用单片机的 P0 口来驱动单位数码管 8 个 LED,单位数码管是共阳极的,发光二极管的阳极接高电平,故赋P0 口相应位为低电寻常,就可以驱动数码管某段点亮。图 4-3 单位数码管显示排线连接图2、八位数码管接线图8 位共阴极数码模块电路及接线图,如图 4-4 所示。J16 为位选码接口排线,J12 为字形码接口排线,字形码经74HC573U13锁存器接到数码管,锁存器LE 端经J21 短路帽接VCC 时,输入数据直通至输出端,当LE 端经 J21 短路帽接 JP10 时,其输入数据经JP10 掌握将其锁存至输出端。图 4-4 8 位共阴极数码管接线图(1) 、连接方法:1) 、JP18单片机 I/O P1 口和J16数码管位选码接口用 8PIN 排线连接起来。2) 、JP10单片机 I/O P0 口和J12数码管字形码接口用 8PIN 排线连接起来。(2) 、J21 短路帽使LE 接 VCC,短路帽JP165 断开。排接线连接如图 4-5 所示。图 4-5 8 位数码管显示排线连接图(3) 、硬件说明四位数码管是共阴极的。依据硬件电路原理,对单片机 P0 口写字形码,对单片机 P1口某位写 0,则与之对应的那位数码管显示P0 口输出字形码所对应的数字。五、软件程序设计参考1、让单位数码管显示一个 5 方式一: #include<reg51.h>void mainwhile(1)P0=0x92;方式二: #include<reg51.h> unsigned char table= 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; void mainP1=table5; while(1);2、让八位数码管第四位显示一个3 #include<reg51.h>void mainwhile(1)P1=0xef;P0=0x4f;3、在八个数码管上显示 0、1,27 #include<reg51.h>#define uint unsigned int #define uchar unsigned char uchar num1;uchar code du= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f;uchar code wei= 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe; void delay;void mainwhile(1)for(num1=0;num1<8;num1+)P1=weinum1; P0=dunum1; delay;void delayuint x,y; for(x=2;x>0;x-)for(y=110;y>0;y-);六、思考题1、 让单位数码管显示一个 3用 P2 口2、让八位数码管第三位显示一个2用P2 口掌握位选,用P0 口掌握段选3、在单位数码管上循环显示数字0-9试验五 按键试验一、试验目的1、把握单片机键盘与单片机接口2、把握单片机键盘独立键盘和矩阵键盘程序设计方法3、把握软件消退按键抖动的方法二、设计题目1、用独立按键掌握LED 亮灭。2、设计一 4×4 矩阵键盘,定义键盘数字为 0F;编制一位数码管显示按下键盘值程序。三、试验原理键盘是计算机系统中不行缺少的输入设备,当按键少时可接成线性键盘 (或称独立键盘),即一个键盘占用一个I/O 口中一位,当按键较多时,这样的接法占用口线较多。在按键较多时,常将按键接成矩阵的形式,可以节约口线,例如一个I/O 口可按 4×4 的形式接16 个按键。1、独立按键检测原理独立式按键承受每个按键单独占用一个I/O 口中的一位构造,即按键的一端与电源地相连,另一端与单片机的任一 I/O 口中的一位相连。开头时先给该 I/O 口赋一高电平,然后让单片机不断检测该I/O 口是否变为低电平,当按键闭合时,即相当于该 I/O 口通过按键与地相连,变成低电平;程序一旦检测到 I/O 口某位变为低电平,则说明连接该位的按键被按下, 然后执行相应的指令。图 5-1 示出了单片机试验仪的独立键盘模块。它有K1K8 8 个独立键盘组成,每个按键有一端公共接地,另一端分别连接至 JP5 接线排座的 8 个引脚,可通过这些引脚连接到某个 I/O 口。图 5-1 8 个独立按键接线图2、矩阵键盘检测原理矩阵键盘通常由列线和行线构成,按键设在行线,列线交点处,行、列线分别连接到按键开关的两端。列线按键一端通过电阻接VCC,行线按键另一端的接地是通过程序对某 I/O 口输出数字“0”实现。矩阵键盘的每一个键都有自己的行值和列值,行值和列值的组合是识别这个按键的编码,称为键码。图 5-2 示出了单片机试验仪 4×4 矩阵键盘模块,它有 P 14、P 15、P 16、P 17 四行和-P 10、P 11、P 12、P 13 四列构成当列线连接到某 I/O 时,可通过相应口经一电阻与 VCC-连接,见图 1-1,共构成 S1S16 个按键。四行行线和四列列线分别连接到JP4 接线排座的引脚,可通过它们连接到某个I/O 口,实现键盘键盘闭合推断,获得键盘的键值。图 5-2 4×4 矩阵键盘接线图检测是否有键按下和检测哪个键按下的根本原理和过程如下: 列线通过上拉电阻接+5V,被钳在高电平状态。假设将行线全部输出低电平,则读入列端口开关状态,假设为全1111 则无键按下,否则有键按下。当有键入时,再逐行逐列检查: 马上行线依次送低电平 0,检查列输入状态,假设为全 1111,则按键不在此行;否则在此行,且在0 电平行与 0 电平列线相交的那个键按下。由上所述,矩阵键盘的检测,第一步是推断是否有键按下?如有键盘按下,其次步是检测哪个键盘按下?从而得到键码值,最终依据需求,执行相应的程序。3、按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴有一连串的抖动。抖动时间的长短由按键的机械持续特性打算,一般为5ms-10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作打算的,一般为零点几秒至数秒。按键的动作时序如图 5-3 所示。一个完整按键过程可以分为以下几个阶段:图 5-3 按键的动作过程(1) 、未按下的等待状态。在按键未按下的 T1 时间,I/O 口为高电平。此时按键处于空闲状态。(2) 、按下的抖动阶段。在按键刚刚按下的时候,由于按键的机械构造、按下力度准时间 等因素,造成I/O 口电平不稳定,此时I/O 口的信号处于抖动状态。抖动的时间为T2。T2 一般为 5ms-20ms。(3) 、有效的按下状态。T3 为有效按下按键时间。在有效按下状态时,一个有效的按键动作就产生。(4) 、释放抖动状态。与按下的抖动阶段相对应,在释放的时候按键也会有抖动。释放抖 动状态的时间为T4.(5) 、有效的释放状态。在释放抖动状态完毕后就是有效的释放状态了。按键抖动会引起一次按键被误读屡次。为确保 CPU 对按键的一次闭合仅作一次处理,必需去除抖动。在按键闭合稳定时读取按键的状态,并且必需判别到按键释放稳定后再做处理。按键的抖动,可用硬件或软件两种方法来处理。我们在这里仅介绍软件延时消抖,即检测出按键闭合后执行一个延时程序,产生5ms-20ms 的延时,让前沿抖动消逝后再一次检测按键的状态,假设仍保存闭合状态电平, 则确认为真正有按键按下。当检测到按键释放后,也要给5ms-20ms 的延时,待后沿抖动消逝后才能转让该键的处理程序。四、硬件电路设计参考1、利用 P3.2 作为独立键盘输入口,独立键盘选K1;P0.0 掌握 LED 灯,LED 等选 D1。JP9 接线排的第 6 引脚单片机 P3.2与 JP15 接线排座的一引脚独立按键 K1用杜邦线连接, 使用独立按键K1。JP10 接线排座的第 6 引脚单片机 P0.0与 JP1 接线排座的第一引脚LED灯 D1用杜邦线连接。2、利用单片机P2 口低 4 位作为矩阵键盘的行线,高 4 为作为矩阵键盘的列线;利用 8PIN 排线将最小系统模块的接线排座J8 和矩阵按键模块的接线排座JP4 连接留意引脚号的对应关系)。利用 P0 口作为数码管的字形码输出口,利用 8PIN 排线将最小系统模块的接线排座 J10 和单位数码管模块的接线排座JP3 连接留意引脚号的对应关系)。五、软件程序设计参考1、用按键掌握LED 亮灭#include<reg51.h>#define uchar unsinged char #define uint unsigned int sbit key1=P32;sbit led0=P00; void delayuint i,j; for(i=500;i>0;i-)for(j=110;j>0;j-);void mainP3=0xff; while(1)if(key1=0) led0=0; else led0=1;2、矩阵键盘程序设计依据硬件电路设计,其键盘键码示于表5-1。设键盘对应数字如表 5-2 所示。表 5-1 矩阵键盘键码表(S1)EE(S2)DE(S3)BE(S4)7E(S5)ED(S6)DD(S7)BD(S8)7D(S9)EB(S10)DB(S11)BB(S12)7B(S13)E7(S