电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt

上传人:文库蛋蛋多 文档编号:2407607 上传时间:2023-02-18 格式:PPT 页数:123 大小:10.66MB
返回 下载 相关 举报
电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt_第1页
第1页 / 共123页
电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt_第2页
第2页 / 共123页
电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt_第3页
第3页 / 共123页
电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt_第4页
第4页 / 共123页
电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt_第5页
第5页 / 共123页
点击查看更多>>
资源描述

《电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt》由会员分享,可在线阅读,更多相关《电子教案---单片机原理及应用——基于Proteus和Keil C(第2版)[林立,张俊亮]第4章.ppt(123页珍藏版)》请在三一办公上搜索。

1、第4章 单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章单片机的C51语言,51汇编语言能直接操作单片机的系统硬件,指令执行速度快。但其程序可读性差,且编写、移植困难。,第4章单片机的C51语言,C51是为51系列单片机设计的一种C语言,其特点:,C51语言已成为51系列单片机程序开发的主流软件方法。,结构化语言,代码紧凑效率可与汇编语言媲美接近真实语言,程序可读性强易于调试、维护库函数丰富,编程工作量小产品开发周期短机器级控制能力,功能很强适合于嵌入式系统开发与汇编指令无

2、关,易于掌握在单片机基础上上手快,第4章单片机的C51语言,C51与标准C语言对比相同之处:语法规则、程序结构、编程方法差异之处:数据结构(数据类型、存储模式)、中断处理(第5章)、端口扩展(第8章)本章教学思路:在标准C的基础上学习数据结构(数据类型、存储模式)掌握C51软件开发方法(Keil Vision3软件)在C51的基础上学习单片机I/O口应用(入门与进阶),第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,程序由函数组成(一个主函数,或一个主函数和若干自定义函数)

3、;利用预处理命令对变量或函数进行集中定义或说明;函数和变量都需遵循先定义后使用的基本原则;主函数中的所有语句执行完毕,则程序结束。,第4章单片机的C51语言,C51与标准C程序结构完全相同,第4章单片机的C51语言,举例:LED闪烁控制功能,LOOP:CLR P1.0 ACALL DEL50 SETB P1.0 SJMP LOOPDEL50:MOV R7,#200DEL1:MOV R6,#125DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET END,第4章单片机的C51语言,预处理命令-,函数说明-,全局变量定义-,主函数-,自定义函数-,局部变量定义-,程序体,程序体-

4、,第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章单片机的C51语言,1.C51的变量,在程序执行过程中,数值可以发生改变的量称为变量。,变量名与存储单元地址相对应,变量值与存储单元的内容相对应。,例如,在哈佛结构的存储空间中如何建立变量概念?,第4章单片机的C51语言,【存储种类】数据类型【存储类型】变量名,(标准C),(标准C),*括号项可以缺省(但需有缺省值),C51变量定义的四要素:,(C51特有),(标准C+C51),第4章单片机的C51语言,【存储种类】数

5、据类型【存储类型】变量名,共有4个说明符:1、auto(自动型)变量的作用范围在定义它的函数体或语句块内。执行结束后,变量所占内存即被释放。2、extern(外部型)在一个源文件中被定义为外部型的变量,在其它源文件中需要通过extern说明方可使用。3、static(静态型)利用static可使变量定义所在的函数或语句块执行结束后,其分配的内存单元继续保留。4、register(寄存器型)将变量对应的储存单元指定为通用寄存器,以提高程序运行速度。,缺省存储种类为auto(自动)型变量,第4章单片机的C51语言,数据的不同格式叫做数据类型,*有符号数类型可以忽略signed标识符,标准C语言的数

6、据类型,【存储种类】数据类型【存储类型】变量名,第4章单片机的C51语言,C51扩充数据类型:bit、sfr或sfr16、sbit,bit 型,关键词bit用于定义一个位变量,语法规则:,bit bit_name=0或1;,例如:bit door=0;/定义一个叫door的位变量且初值为0,与标准C的变量定义相似:int a=5;/定义一个初值为5的整形变量a/语法规则:int int_name=常数;,第4章单片机的C51语言,sfr或sfr16型,关键词sfr或sfr16用于定义SFR字节地址变量,语法规则:sfr 或 sfr16 sfr_name=字节地址常数;,51MCU中有21个SF

7、R,如何定义与这些单元相关的变量?,第4章单片机的C51语言,例如,sfr P0=0 x80;/定义P0口地址80Hsfr PCON=0 x87;/定义PCON地址87H sfr16 DPTR=0 x82;/定义DPTR的低端地址82H,注意:C语言中十六进制整数是数值前加0 x或0X前缀,第4章单片机的C51语言,sbit型,部分SFR具有位地址,如何定义与这些位地址相关的变量?,绝对位地址,相对位地址,字节地址,两种位地址表达形式:相对位地址、绝对位地址,第4章单片机的C51语言,1)将SFR的绝对位地址定义为位变量名sbit bit_name=位地址常数;例如,sbit CY=0 xD7

8、;,3)将SFR的相对位位置定义位变量名 sbit bit_name=sfr_name 位位置;例如,sbit CY=PSW7;,2)将SFR的相对位地址定义为位变量名sbit bit_name=sfr字节地址 位位置;例如,sbit CY=0 xD07;,关键词sbit用于定义SFR位地址变量,三种定义形式:,C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。,第4章单片机的C51语言,用一条预处理命令#include 把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。,第4章单片机的C51语言,应用举例:,第4章单片机的C51语言,【存储

9、种类】数据类型【存储类型】变量名,51单片机的 3个逻辑存储空间:,片内数据存储器,片外数据存储器和程序存储器。,建立C51存储类型与存储空间的对应关系,第4章单片机的C51语言,C51的存储类型与存储空间对应关系表,编译模式,【存储种类】数据类型【存储类型】变量名,3种编译模式分别对应于3种缺省存储类型:,第4章单片机的C51语言,【存储种类】数据类型【存储类型】变量名,C51编译器可根据当前采取的编译模式自动认定默认的存储类型约定:若无特殊声明,一般均为“SMALL编译模式”,变量名可以由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度随编译系统而定。,变量名具有

10、字母大小写的敏感性,如SUM和sum代表不同的变量。强调:头文件中定义的变量都是大写的,若程序采取小写变量则需要重新定义。,第4章单片机的C51语言,【存储种类】数据类型【存储类型】变量名,第4章单片机的C51语言,C51扩展的若干关键字一览表,变量名不得使用标准C语言和C51语言的关键字。,unsigned char data system_status=0;,第4章单片机的C51语言,/定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。,数据结构定义举例,变量名为system_status,位与片内RAM区,无符号字符型,自动型,初值为零,第4章单片机

11、的C51语言,unsigned char bdata status_byte;,unsigned int code unit_id2=0 x1234,0 x89ab;,static char m,n;,/定义status_byte为无符号字符型自动变量,该变量位于bdata区,/定义unit_id2为无符号整型自动变量,该变量位于code区中,是长度为2的数组,且初值为0 x1234和0 x89ab。,/定义m和n为2个位于data区中的有符号字符型静态变量。,2.C51的指针,第4章单片机的C51语言,标准C语言指针的一般定义形式为:数据类型*指针变量名=这表示p1是一个指向int型变量的指

12、针变量,此时p1的值为int型变量a的地址,而a和p1两个变量都位于C编译器默认的内存区域中。,第4章单片机的C51语言,对于C51来讲,指针定义应包括以下信息:1)指针变量的存储类型(自身位于哪个存储区中)?2)被指向变量的数据类型和存储类型?,C51指针的一般定义形式:数据类型 存储类型1*存储类型2 变量名=&被指向 变量名;,数据类型被指向变量的类型,如int型或char型存储类型1被指向变量所在的存储区,缺省时由地址赋值关系决定存储类型2指针变量所在的存储区,缺省时为编译器默认的存储区,第4章单片机的C51语言,例1若采用SMALL编译模式,试解释下述定义的含义。char xdata

13、 a=A;char*ptr=,解:ptr是一个指向char型变量的指针,它本身位于SMALL编译模式默认的data存储区里,此时它指向位于xdata存储区里的char型变量a的地址。,第4章单片机的C51语言,例2试解释下述定义的含义 char xdata a=A;char*ptr=,解:以char*ptr形式定义的指针变量,既可指向位于xdata存储区的char型变量a的地址,也可指向位于idata存储区的char型变量b的地址(由赋值操作关系决定)。,前两句与例1相同 char xdata a=A;char*ptr=,第4章单片机的C51语言,例3:试解释以下指针定义的含义char xda

14、ta a=A;char xdata*ptr=【解】ptr是位于data存储区且固定指向xdata存储区的char型变量的指针变量,此时ptr的值为变量a的地址(不能像例2那样再将idata存储区的char型变量b的地址赋予ptr)。,第4章单片机的C51语言,例4:试解释以下指针定义的含义char xdata a=A;char xdata*idata ptr=【解】ptr是固定指向xdata存储区的char型变量的指针变量,它自身存放在idata存储区中,此时ptr指向位于xdata存储区中的char型变量a的地址。,第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构

15、 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章单片机的C51语言,C51语言编程可胜任单片机的基本测量与控制任务。对于某些特殊的I/O 接口处理、中断处理、强调程序执行速度等场合,仍希望采用汇编程序。C51 编译器提供了与汇编语言程序的接口规则,可方便地实现C51 与汇0编语言程序的相互调用。本节仅讨论在C51中调用汇编函数和在C51中嵌入汇编代码两种方法。,概要,第4章单片机的C51语言,1.在C51中调用汇编程序,1)程序的寻址,main.c中调用的max函数,如何与汇编文件中的相应代码对应起来;,2)参数传递,main.c中传递给ma

16、x()函数的参数a和b,存放在何处可使汇编程序能够获取到它们的值;,3)返回值传递,汇编语言计算得到的结果,存放在何处可使C语言程序能够获取到。,C51程序中调用汇编语言,需要解决三个问题:,第4章单片机的C51语言,举例:在两个数据中选出较大的数据,并赋值给变量c。其中,要求选数任务采用汇编子程序完成。,1)程序的寻址问题,第4章单片机的C51语言,通过在汇编文件中定义同名的“函数”来实现。,第4章单片机的C51语言,2)参数传递问题,第4章单片机的C51语言,3)返回值传递问题,2.C51中嵌入汇编代码,在C51 函数内嵌入汇编代码,可以有三种不同方法。,方法一 直接在函数体内的每个汇编语

17、句前加“asm”预编译指令,例如:,第4章单片机的C51语言,第4章单片机的C51语言,方法二 把asm 作为关键字,后续汇编用大括号括起来即可,例如:,第4章单片机的C51语言,方法三在C 模块内通过语句“#pragma”嵌入汇编代码,例如:,第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程,第4章单片机的C51语言,1.Keil的编译环境 Vision3,Keil是德国Keil Software公司的51单片机开发软件包,包括C编译器、汇编编译器、连接器、库管理及仿真调试

18、器,通过一个windows下的集成开发环境(uVisoin3)组合起来。,第4章单片机的C51语言,Vision3的软件界面包括4大组成部分,即菜单工具栏,工程管理窗口,文件窗口和输出窗口。,第4章单片机的C51语言,Vision3中共有11个下拉菜单。工具栏的位置和数量可以通过设置选定和移动。,第4章单片机的C51语言,工程管理窗口用于管理工程文件目录,它由5个子窗口组成:文件窗口,寄存器窗口,帮助窗口,函数窗口,模版窗口。,工程管理窗口:,第4章单片机的C51语言,输出窗口:输出窗口用于编译过程中的信息交互作用,由3个子窗口组成:编译窗口,命令窗口,搜寻窗口。,第4章单片机的C51语言,信

19、息窗口:观察窗口(Watch&Call Stack Windows)输出窗口(Output Windows)存储器窗口(Memory Window)反汇编窗口(Dissambly Window)串行窗口(Serial Window),第4章单片机的C51语言,建立工程输入源程序工程设置 程序编译运行调试,2、Vision3的基本使用方法,举例:LED闪烁控制功能,第4章单片机的C51语言,(1)建立工程,点击“Project-New Project”菜单,在编缉框中输入一个名字(设为exam1),无需扩展名。,第4章单片机的C51语言,选择目标CPU(Intel系列的80C51BH),第4章单

20、片机的C51语言,(2)输入源程序点击新建文件按钮打开一个新的文本编缉窗口,第4章单片机的C51语言,输入程序源代码,以*.c保存该文件。,第4章单片机的C51语言,(3)添加源程序(右击“Source Group1”点击“Add file to Group”Source Group1”添加生成的.c文件),第4章单片机的C51语言,(4)工程设置,右击Project 窗口的Target 1选择“Project-Option for target target 1”工程设置对话框,第4章单片机的C51语言,设置对话框中的OutPut 页面(勾选“Creat Hex file”),第4章单片机的

21、C51语言,设置对话框中的Debug 页面(选中Use和下拉框“PROTEUS VSM MONITOR”),第4章单片机的C51语言,(5)编译源程序(形成hex文件),点击F7或工具按钮启动编译、连接功能。,完成后将在命令窗口中显示编译结果,第4章单片机的C51语言,若有语法错误,双击出错提示可指出错误所在行号,第4章单片机的C51语言,1、将Keil编译形成的*.hex文件加载到*.DSN文件中,通过proteus控制仿真运行(无法在运行过程中进行调试),程序运行的两种方法:,第4章单片机的C51语言,2、在Keil软件里控制Proteus仿真运行(可以在运行过程中进行调试),步骤:下载(

22、)运行()停止(),第4章单片机的C51语言,(6)一般调试过程,启动调试过程Ctrl+F5、Debug-Start/Stop Debug Session 开始调试详见下页 结束调试、Debug-Stop Running,第4章单片机的C51语言,调试工具栏,复位,运行到光标行,执行完当前子程序,过程单步,单步,停止,运行,调试菜单栏,快捷键,指向下条运行行,第4章单片机的C51语言,基本调试手段:1、运行到光标行从当前行运行到光标所在行(Ctrl+F10)2、严格单步运行遇到函数时亦单步进行(F11)3、跨函数单步运行遇到函数时将其视作一行语句(F10)4、断点运行 全速运行到断点行停止(双

23、击设置/解除断点)5、监视输出端口打开I/O窗口(Peripherals-I/O-Ports)6、监视运行变量打开Watch#1窗口(点击),第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程 4.5.1 I/O端口的简单应用 4.5.2 I/O端口的进阶实践,第4章单片机的C51语言,输出单元:发光二极管(Light Emitting Diode)基本输出元件,低电平驱动,限流电阻R=1001k,高电平驱动,灌电流,拉电流,4.5.1.1 基本输入输出单元与编程,输入单元:按

24、钮(Button)或开关(Switch)基本输入元件,第4章单片机的C51语言,P0口为漏极开路结构需要外接上拉电阻当按键未按下压时,Px.n端口为高电平;按压按键后为低电平。,实例1 独立按键识别,【要求】采用独立按键方式实现下述功能:开机时LED全熄,然后根据按键动作使相应灯亮,并将亮灯状态保持到按压其它键时为止。,第4章单片机的C51语言,独立按键每个按键都彼此独立地各占有一位I/O口线。特点是电路简单,但占用I/O口线较多。,第4章单片机的C51语言,按键的闭合电平为0,但LED的驱动电平为1,故不能直接将P0口的状态送到P1口,而应使其先取反再送出;,为使按键抬起后LED能保持先前的

25、点亮状态,需要在按键未压下期间禁止向P2输出P0状态值。,【分析】,参考程序如下:,第4章单片机的C51语言,“取反”操作的优先级高于“与”操作,void main()char key=0;/定义按键变量 P2=0;/初始状态为灯全灭 while(1)key=P0/有按键动作时,P0状态值送P2,第4章单片机的C51语言,编程界面和运行界面分别如下图,第4章单片机的C51语言,实例1运行效果,实例2 键控流水灯,第4章单片机的C51语言,【要求】K1为“启动键”,首次按压K1可产生“自下向上”的流水灯运动;K2 为“停止键”,按压K2可终止流水灯的运动;K3和K4为“方向键”,分别产生“自上向

26、下”和“自下向上”运动。,K1K2K3K4,第4章单片机的C51语言,思路分析:根据键值修改标志位,根据标志位控制灯状态,总体关系流程图,第4章单片机的C51语言,键值:按压K1xxxx 1110B按压K2xxxx 1101B按压K3xxxx 1011B 按压K4xxxx 0111B无按键 xxxx 1111B,按键动作判断(P0&0 x0f)是否等于 0 x0f?若是,说明无按键动作,反之则有按键动作。,0 x0e 0 x0d 0 x0b 0 x07 0 x0f,获取按键状态,第4章单片机的C51语言,修改方向和启停标志值,第4章单片机的C51语言,亮灯P2输出码:xxxx 0001xxxx

27、 0010 xxxx 0100 xxxx 1000,D1D4循环方向控制,char led=0 x01,0 x02,0 x04,0 x08;,for(i=0;i=3;i+)P2=led i;/移动,for(i=3;i=0;i-)P2=led i;/移动,第4章单片机的C51语言,第4章单片机的C51语言,实例2原理图与程序界面图,程序运行效果,视频,第4章单片机的C51语言,实例3 混合编程,将实例2中C51的delay函数改用汇编语言实现,并完成系统的混合编程。,程序说明,分别编写汇编语言(delay.asm)与C51语言(实例3.c)两个程序文件,并将其添加到Keil的同一项目中。,第4章

28、单片机的C51语言,C51部分与实例2基本相同,delay函数声明,第4章单片机的C51语言,delay.asm,与实例3.c文件中函数delay同名的子程序,汇编子程序的头部格式,;延时处理函数(汇编语言)PUBLIC _DELAYDE SEGMENT CODERSEG DE_DELAY:MOV R0,#225DEL2:DJNZ R0,DEL2 DJNZ R7,_DELAY RETEND,第4章单片机的C51语言,4.5.1.2 LED数码管原理与编程,LED显示元件人机交互输出设备,其作用是指示中间运行结果与运行状态。,第4章单片机的C51语言,com为公共端,共阳极LED,共阴极LED,

29、引脚配置,七段式LED显示器,(7-Segment Display),不同显示字符采需用不同LED组合关系实现(显示码,字模),第4章单片机的C51语言,以共阴极为例,部分字符的显示码(字模)为:,七段LED数码管的标准显示字符为09,AF,显示字符,显示码(共阴),其它字符:,0011 1000B=0 x38,“L”字符的显示码,“H”字符的显示码,0111 0110B=0 x76,第4章单片机的C51语言,实例4 LED数码管显示,在P0口连接一个共阴极数码管,使之循环显示09数字。,分析:将显示码循环输出到P0口即可实现循环显示。但由于数字09的显示段码没有规律可循,需要采取查表方式进行

30、操作:,第4章单片机的C51语言,将显示码按序存放在一个数组中,顺序号与代表的显示字符相对应。(如,char led_mod=x1,x2,.,xn)通过循环变量指定待送出的数组元素,第4章单片机的C51语言,参考程序,第4章单片机的C51语言,视频,第4章单片机的C51语言,实例5 计数显示器,统计按键次数并以十进制形式显示,按键次数大于99后重新由0开始计数。,个位LED接P2口,十位LED接P0口(共阴型),按钮接P3.7口线,按压时为0电平,第4章单片机的C51语言,编程分析:,问题:按键压下时可能被连续计数,第4章单片机的C51语言,如何避免连续计数?,第4章单片机的C51语言,初始化

31、:P2=P0=table0;,解决办法:取模运算(%10)个位 整除10运算(/10)十位,P2=tablecount%10;,P 0=tablecount/10;,显示输出:如何将计数值拆成两个独立的数?,第4章单片机的C51语言,参考程序,程序运行效果,第4章单片机的C51语言,第4章单片机的C51语言,4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程 4.5.1 I/O端口的简单应用 4.5.2 I/O端口的进阶实践,第4章单片机的C51语言,4.5.2.1 数码管动态显示原理与编程,两种显示接

32、口:静态显示接口和动态显示接口,静态显示接口:一个数码管的引脚独立占据一根I/O口线。优点:被显示数据只要送入并行口后就不再需要CPU干预,因而显示效果稳定。缺点:占用资源较多,第4章单片机的C51语言,动态显示接口:所有数码管的段码线对应并联接在一个并行口上,而每位数码管的公共端分别由一位I/O线控制;由并口输出的显示码可被所有数码管收到,但只有满足导通条件的数码管可以被驱动。,第4章单片机的C51语言,工作原理:采用快速切换方式(如10ms),每一时刻只有一只数码管导通工作。利用视力暂留特性,可获得连续显示效果。优点:占用资源较少缺点:占用机时较多(需要CPU随时刷新显示值),第4章单片机

33、的C51语言,实例6 数码管动态显示,采用共阴极动态LED显示原理,实现如下功能:SW1向下拨时显示字符“L2”,向上拨时显示字符“H3”。,第4章单片机的C51语言,分析:Proteus中的双联LED数码管相当于两个并联的数码管。,7SEG-MPX2-CC-BLUE,Blue,2 Digit,7-segment Cathode Display,第4章单片机的C51语言,A-G“0 x38”,1#“0”,2#“1”,A-G“0 x5b”,1#“1”,2#“0”,P2led_mode0,P3 xxxx xx10B=2P2led_mode1,P3 xxxx xx01B=1,led_mode=0 x

34、38,0 x5b,第4章单片机的C51语言,如果不考虑开关switch,动态显示“L2”的程序可以如下:,;,/LED“指针”,/显示字模,第4章单片机的C51语言,A-G“0 x76”,1#“0”,2#“1”,A-G“0 x4f”,1#“1”,2#“0”,字符数组 led_mode=0 x38,0 x5b,0 x76,0 x4f,开关状态变量 switch_sta,复合指针变量 led_point+switch_sta,完整的主函数,第4章单片机的C51语言,#include char led_mod=0 x38,0 x5B,0 x76,0 x4F;void delay(unsigned i

35、nt time);sbit P17=P17;void main()char led_point=0,switch_sta=0;while(1)if(P17=1)switch_sta=2;else switch_sta=0;P3=2-led_point;P2=led_modswitch_sta+led_point;led_point=1-led_point;delay(30);,编程界面,第4章单片机的C51语言,第4章单片机的C51语言,运行效果图,第4章单片机的C51语言,4.5.2.2 行列式键盘原理与编程,独立式键盘的电路简单,易于编程,但占用的I/O口线较多,当需要较多按键时可能产生I

36、/O资源紧张问题。,独立式键盘电路,第4章单片机的C51语言,行列式键盘将I/O口分为行线和列线,按键跨接在行线和列线上,列线通过上拉电阻接正电源。,44行列式键盘,7407六高压输出缓冲器/驱动器,行列式键盘的特点:占用I/O口线少,但软件过程复杂。,第4章单片机的C51语言,键盘扫描,同时将各行电平置1,分别将各列电平置0。,扫描码:key_scan=0 xef,0 xdf,0 xbf,0 x7f;写P3:P3=key_scani;,键盘扫描原理(以P3口接44键盘为例),第一次 1110 1111B 第二次 1101 1111B第三次 1011 1111B第四次 0111 1111B,=

37、0 xef=0 xdf=0 xbf=0 x7f,第4章单片机的C51语言,(P3&0 x0f)=0 x0f 无键压下(P3&0 x0f)0 x0f 有键压下,按键闭合状态判断,0#:1110 1110B0 xee 1#:1101 1110B0 xdeF#:0111 0111B0 x77,按键闭合前后,所在行线端口电平反转;读P3后,若发现其低4位为f,说明无键压下;反之则相反。,键值按键闭合时从引脚读出的数值。,第4章单片机的C51语言,查找闭合键键号,for(j=0;j 16;j+)if(P3=key_buf j)return j;,键值数组key_buf=0 xee,0 xde,0 xbe

38、,0 x7e,0 xed,0 xdd,0 xbd,0 x7d,0 xeb,0 xdb,0 xbb,0 x7b,0 xe7,0 xd7,0 xb7,0 x77;,键号按照一定规则给按键分配的编号,闭合键键号:闭合键值与键值数组相等时的查询号,第4章单片机的C51语言,实例7,功能:开机黑屏;按下任意按键后,数码管上显示该键的键号(0F);若没有新键按下,维持前次按键结果。,行列式键盘+静态数码显示,第4章单片机的C51语言,实例7程序流程图,第4章单片机的C51语言,完整程序,第4章单片机的C51语言,程序运行效果,第4章单片机的C51语言,按键在闭合和断开瞬间会因弹簧开关的变形产生电压波动,软件消抖法:延时10ms后再次扫描按键状态。若仍判为“闭合”说明确有键压下;若为“非闭合”说明是误动作。,按键抖动波形,键盘消抖原理:,第4章单片机的C51语言,消抖实例:,(实例5),本章小结,C51的数据类型与变量的定义,都必须考虑单片机的存储结构。在Keil下进行C51开发的基本步骤是:建立工程输入源程序设置编译参数编译连接下载调试。单片机I/O口基本编程应用包括按键(或开关)状态检测、发光二极管输出控制、数码管动态显示以及行列式键盘扫描编程等内容。,第4章单片机的C51语言,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号