电子教案单片机原理及应用——基于proteus和keil c(第2版)[林立,张俊亮]第4章

上传人:a**** 文档编号:243046002 上传时间:2024-09-14 格式:PPT 页数:123 大小:10.32MB
返回 下载 相关 举报
电子教案单片机原理及应用——基于proteus和keil c(第2版)[林立,张俊亮]第4章_第1页
第1页 / 共123页
电子教案单片机原理及应用——基于proteus和keil c(第2版)[林立,张俊亮]第4章_第2页
第2页 / 共123页
电子教案单片机原理及应用——基于proteus和keil c(第2版)[林立,张俊亮]第4章_第3页
第3页 / 共123页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,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,系列单片机程序开发的主流软件方法。,结构化语言,,代码紧凑,效率可与汇编语言媲美,接近真实语言,,程序可读性强,易于调试、维护,库函数丰富,,编程工作量小,产品开发周期短,机器级控制能力,,功能很强,适合于嵌入式系统开发,与汇编指令无关,,易于掌握,在单片机基础上上手快,第,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,初步应用编程,程序由函数组成(一个主函数,或一个主函数和若干自定义函数);, 利用预处理命令对变量或函数进行集中定义或说明;, 函数和变量都需遵循先定义后使用的基本原则;, 主函数中的所有语句执行完毕,则程序结束。,第,4,章,单片机的,C51,语言,C51,与标准,C,程序,结构完全相同,第,4,章,单片机的,C51,语言,举例:,LED,闪烁控制功能,LOOP: CLR P1.0,ACALL DEL50,SETB P1.0,SJMP LOOP,DEL50: MOV R7,#200,DEL1: MOV R6,#125,DEL2: DJNZ R6,DEL2,DJNZ R7,DEL1,RET,END,第,4,章,单片机的,C51,语言,预处理命令,-,函数说明,-,全局变量定义,-,主函数,-,自定义函数,-,局部变量定义,-,程序体,程序体,-,第,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,语言,【,存储种类,】,数据类型,【,存储类型,】,变量名,共有,4,个说明符:,1,、,auto,(自动型),变量的作用范围在定义它的函数体或语句块内。执行结束后,变量所占内存即被释放。,2,、,extern,(外部型),在一个源文件中被定义为外部型的变量,在其它源文件中需要通过,extern,说明方可使用。,3,、,static,(静态型),利用,static,可使变量定义所在的函数或语句块执行结束后,其分配的内存单元继续保留。,4,、,register,(寄存器型),将变量对应的储存单元指定为通用寄存器,以提高程序运行速度。,缺省存储种类为,auto (,自动,),型变量,第,4,章,单片机的,C51,语言,数据的不同格式叫做数据类型,*,有符号数类型可以忽略,signed,标识符,标准,C,语言的数据类型,【,存储种类,】,数据类型,【,存储类型,】,变量名,第,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,个,SFR,,如何定义与这些单元相关的变量?,第,4,章,单片机的,C51,语言,例如,,sfr,P0 = 0x80; /,定义,P0,口地址,80H,sfr,PCON = 0x87; /,定义,PCON,地址,87H,sfr16,DPTR=0x82; /,定义,DPTR,的低端地址,82H,注意:,C,语言中十六进制整数是数值前加,0x,或,0X,前缀,第,4,章,单片机的,C51,语言,sbit,型,部分,SFR,具有位地址,如何定义与这些位地址相关的变量?,CY,AC,F0,RS1,RS0,OV,F1,P,CY,AC,F0,RS1,RS0,OV,F1,P,CY,AC,F0,RS1,RS0,OV,F1,P,CY,AC,F0,RS1,RS0,OV,F1,P,D07,D7H,D6H,D5H,D4H,D3H,D2H,D1H,D0H,D0H,PSW,D06,D05,D04,D03,D02,D01,D00,绝对位地址,相对位地址,字节地址,两种位地址表达形式:相对位地址、绝对位地址,第,4,章,单片机的,C51,语言,1,)将,SFR,的,绝对位地址,定义为位变量名,sbit,bit_name,=,位地址常数,;,例如,,sbit,CY = 0xD7;,3,)将,SFR,的,相对位位置,定义位变量名,sbit,bit_name,=,sfr_name,位位置,;,例如,,sbit,CY = PSW7;,2,)将,SFR,的,相对位地址,定义为位变量名,sbit,bit_name,=,sfr,字节地址,位位置,;,例如,,sbit,CY = 0xD07;,关键词,sbit,用于定义,SFR,位地址,变量,,三种定义形式:,C51,编译器在头文件“,REG51.H”,中定义了全部,sfr/sfr16,和,sbit,变量。,第,4,章,单片机的,C51,语言,用一条预处理命令,#include ,把这个头文件包含到,C51,程序中,无需重新定义即可直接使用它们的名称。,第,4,章,单片机的,C51,语言,应用举例:,第,4,章,单片机的,C51,语言,【,存储种类,】,数据类型,【,存储类型,】,变量名,51,单片机的,3,个逻辑存储空间:,片内数据存储器,片外数据存储器和程序存储器。,建立,C51,存储类型,与,存储空间,的对应关系,data,区,code,区,xdata,区,bdata,区,pdata,区,idata,区,第,4,章,单片机的,C51,语言,C51,的存储类型与存储空间对应关系表,SMALL,系,统,COMPACT,系统,LARGE,系统,编译模式,【,存储种类,】,数据类型,【,存储类型,】,变量名,3,种编译模式分别对应于,3,种,缺省存储类型,:,第,4,章,单片机的,C51,语言,【,存储种类,】,数据类型,【,存储类型,】,变量名,C51,编译器可根据当前采取的编译模式自动认定默认的存储类型,约定,:若无特殊声明,一般均为“,SMALL,编译模式”,变量名可以由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度随编译系统而定。,变量名具有字母大小写的敏感性,如,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,章,单片机的,C51,语言,unsigned char bdata status_byte;,unsigned int code unit_id2=0x1234, 0x89ab;,static char m, n;,/,定义,status_byte,为无符号字符型自动变量,该变量位于,bdata,区,/,定义,unit_id2,为无符号整型自动变量,该变量位于,code,区中,是长度为,2,的数组,且初值为,0x1234,和,0x89ab,。,/,定义,m,和,n,为,2,个位于,data,区中的有符号字符型静态变量。,2. C51,的指针,第,4,章,单片机的,C51,语言,标准,C,语言指针的一般定义形式为:,数据类型 *指针变量名,= &,被指向变量名,;,其中,指针变量指向一个由“数据类型”说明的变量。被指向变量和指针变量都位于,C,编译器默认的存储区中。,例如:,int a =A;,int *p1= ,这表示,p1,是一个指向,int,型变量的指针变量,此时,p1,的值为,int,型变量,a,的地址,而,a,和,p1,两个变量都位于,C,编译器默认的内存区域中。,第,4,章,单片机的,C51,语言,对于,C51,来讲,指针定义应包括以下信息,:,1,)指针变量的存储类型(自身位于哪个存储区中)?,2,)被指向变量的数据类型和存储类型?,C51,指针的一般定义形式:,数据类型,存储类型,1,*,存储类型,2,变量名,=&,被指向,变量名,;,数据类型,被指向变量的类型,如,int,型或,char,型,存储类型,1,被指向变量所在的存储区,缺省时由地址赋值关系决定,存储类型,2,指针变量所在的存储区,缺省时为编译器默认的存储区,第,4,章,单片机的,C51,语言,例,1,若采用,SMALL,编译模式,试解释下述定义的含义。,char xdata a = A;,char *ptr = ,解:,ptr,是一个指向,char,型变量的指针,,,它本身位于,SMALL,编译模式默认的,data,存储区里,,,此时它指向位于,xdata,存储区里的,char,型变量,a,的地址,。,第,4,章,单片机的,C51,语言,例,2,试解释下述定义的含义,char xdata a = A;,char *ptr = ,char idata b = B;,ptr = ,解:,以,char *ptr,形式定义的指针变量,既可指向位于,xdata,存储区的,char,型变量,a,的地址,也可指向位于,idata,存储区的,char,型变量,b,的地址(由赋值操作关系决定)。,前两句与例,1,相同,char xdata a = A;,char *ptr = ,第,4,章,单片机的,C51,语言,例,3,:试解释以下指针定义的含义,char xdata 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,的数据结构,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,中传递给,max(),函数的参数,a,和,b,,存放在何处可使汇编程序能够获取到它们的值;,3,),返回值传递,汇编语言计算得到的结果,存放在何处可使,C,语言程序能够获取到。,C51,程序中调用汇编语言,需要解决三个问题:,第,4,章,单片机的,C51,语言,举例:,在两个数据中选出较大的数据,,并赋值给变量,c,。其中,要求选数任务采用汇编子程序完成。,1,)程序的寻址问题,第,4,章,单片机的,C51,语言,通过在汇编文件中定义同名的“函数”来实现。,第,4,章,单片机的,C51,语言,2,)参数传递问题,第,4,章,单片机的,C51,语言,3,),返回值传递问题,2. C51,中嵌入汇编代码,在,C51,函数内嵌入汇编代码,可以有三种不同方法。,方法一,直接在函数体内的,每个汇编语句前加“,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,编译器、汇编编译器、连接器、库管理及仿真调试器,通过一个,windows,下的集成开发环境(,uVisoin3,)组合起来。,第,4,章,单片机的,C51,语言,Vision3,的软件界面包括,4,大组成部分,即菜单工具栏,工程管理窗口,文件窗口和输出窗口。,菜单工具栏,工程管理窗口,文件窗口,输出窗口,第,4,章,单片机的,C51,语言,Vision3,中共有,11,个下拉菜单。工具栏的位置和数量可以通过设置选定和移动。,第,4,章,单片机的,C51,语言,工程管理窗口用于管理,工程文件目录,,它由,5,个子窗口组成:,文件窗口,,寄存器窗口,帮助窗口,函数窗口,模版窗口。,工程管理窗口:,第,4,章,单片机的,C51,语言,输出窗口:,输出窗口用于编译过程中的信息交互作用,由,3,个子窗口组成:,编译窗口,,命令窗口,搜寻窗口。,第,4,章,单片机的,C51,语言,信息窗口:,观察窗口,(,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,章,单片机的,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,章,单片机的,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,仿真运行(可以在运行过程中进行调试),步骤,:下载( ) 运行( ) 停止( ),第,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,、断点运行,全速运行到断点行停止(,双击设置,/,解除断点,),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,章,单片机的,C51,语言,输出单元:,发光二极管(,L,ight,E,mitting,D,iode,),基本输出元件,低电平驱动,限流电阻,R = 100,1k,高电平驱动,灌电流,拉电流,基本输入输出单元,与编程,输入单元:,按钮,(Button),或开关(,Switch,),基本,输入元件,第,4,章,单片机的,C51,语言,P0,口为漏极开路结构,需要外接上拉电阻,当按键未按下压时,,Px.n,端口为高电平,;,按压按键后为低电平。,实例,1,独立按键识别,【,要求,】,采用独立按键方式实现下述功能:开机时,LED,全熄,然后根据按键动作使相应灯亮,并将亮灯状态保持到按压其它键时为止。,第,4,章,单片机的,C51,语言,独立按键,每个按键都彼此独立地各占有一位,I/O,口线。特点是电路简单,但占用,I/O,口线较多。,第,4,章,单片机的,C51,语言,按键的闭合电平为,0,但,LED,的驱动电平为,1,,故不能直接将,P0,口的状态送到,P1,口,而应使其先取反再送出;,为使按键抬起后,LED,能保持先前的点亮状态,需要在按键未压下期间禁止向,P2,输出,P0,状态值。,【,分析,】,参考程序如下:,第,4,章,单片机的,C51,语言,“,取反”操作的优先级高于“与”操作,void main( ) ,char key = 0; /,定义按键变量,P2=0; /,初始状态为灯全灭,while(1),key = P0 /,读取按键状态,高,4,位清零,if (key != 0) P2 = key; /,有按键动作时,,P0,状态值送,P2,第,4,章,单片机的,C51,语言,编程界面和运行界面分别如下图,第,4,章,单片机的,C51,语言,实例,1,运行效果,实例,2,键控流水灯,第,4,章,单片机的,C51,语言,【,要求,】,K1,为“,启动键,”,首次按压,K1,可产生“自下向上” 的流水灯运动,;,K2,为“,停止键,”,按压,K2,可终止流水灯的运动;,K3,和,K4,为“,方向键,”,分别产生 “自上向下”和 “自下向上” 运动。,K1,K2,K3,K4,第,4,章,单片机的,C51,语言,思路分析,:根据键值修改标志位,根据标志位控制灯状态,总体关系流程图,第,4,章,单片机的,C51,语言,键值:,按压,K1xxxx 1110B,按压,K2xxxx 1101B,按压,K3xxxx 1011B,按压,K4xxxx 0111B,无按键, xxxx 1111B,按键动作判断,(,P0 & 0x0f,)是否等于,0x0f,?若是,说明无按键动作,反之则有按键动作。,0x0e,0x0d,0x0b,0x07,0x0f,获取按键状态,第,4,章,单片机的,C51,语言,修改方向和启停标志值,第,4,章,单片机的,C51,语言,亮灯,P2,输出码,:,xxxx 0001,xxxx 0010,xxxx 0100,xxxx 1000,D1,D4,循环方向控制,char led =,0x01,,,0x02,,,0x04,,,0x08;,for (i=0; i=0; i- ) P2 = led i; /,移动,第,4,章,单片机的,C51,语言,第,4,章,单片机的,C51,语言,实例,2,原理图与程序界面图,程序运行效果,视频,第,4,章,单片机的,C51,语言,实例,3,混合编程,将实例,2,中,C51,的,delay,函数改用汇编语言实现,并完成系统的混合编程。,程序说明,分别编写汇编语言(,delay.asm,)与,C51,语言(实例,3.c,)两个程序文件,并将其添加到,Keil,的同一项目中。,第,4,章,单片机的,C51,语言,C51,部分与实例,2,基本相同,delay,函数声明,第,4,章,单片机的,C51,语言,delay.asm,与实例,3.c,文件中函数,delay,同名的子程序,汇编子程序的头部格式,;,延时处理函数,(,汇编语言,),PUBLIC _DELAY,DE SEGMENT CODE,RSEG DE,_DELAY:MOV R0,#225,DEL2: DJNZ R0,DEL2,DJNZ R7,_DELAY,RET,END,第,4,章,单片机的,C51,语言,数码管原理与编程,LED,显示元件,人机交互输出设备,其作用是指示中间运行结果与运行状态。,点式,字段式,LED,光柱式,LED,的类型,第,4,章,单片机的,C51,语言,com,为公共端,共阳极,LED,共阴极,LED,引脚配置,七段式,LED,显示器,(,7-Segment Display,),不同,显示字符,采需用不同,LED,组合关系实现(,显示码,字模,),第,4,章,单片机的,C51,语言,以,共阴极,为例,部分字符的显示码(字模)为:,七段,LED,数码管的,标准显示字符,为,0,9,,,A,F,显示字符,显示码(共阴),其它字符:,0011 1000B = 0x38,“,L,”,字符的显示码,“,H,”,字符的显示码,0111 0110B = 0x76,第,4,章,单片机的,C51,语言,实例,4,LED,数码管显示,在,P0,口连接一个共阴极数码管,使之循环显示,0,9,数字。,分析:,将显示码循环输出到,P0,口即可实现循环显示。但由于数字,0,9,的,显示,段码没有规律可循,需要采取,查表方式,进行操作:,第,4,章,单片机的,C51,语言,循环,10,次 ?,N,延时,循环指针,i,赋值,(10),P0 ,数组,i,Y,将显示码,按序,存放在一个数组中,顺序号与代表的显示字符相对应。,(如,,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,语言,初始化:,P2 = P0 = table,0,;,解决办法:,取模运算(,%10,),个位,整除,10,运算(,/10,),十位,P2 = table,count%10,;,P,0 = table,count/10,;,显示输出:如何将计数值拆成两个独立的数?,第,4,章,单片机的,C51,语言,参考程序,程序运行效果,第,4,章,单片机的,C51,语言,第,4,章,单片机的,C51,语言,4.1 C51,的程序结构,4.2 C51,的数据结构,4.3 C51,与汇编语言的混合编程,4.4 C51,仿真开发环境,4.5 C51,初步应用编程,端口的简单应用,端口的进阶实践,第,4,章,单片机的,C51,语言,数码管动态显示原理与编程,两种显示接口:静态显示接口和动态显示接口,静态显示接口,:一个数码管的引脚独立占据一根,I/O,口线。,优点,:被显示数据只要送入并行口后就不再需要,CPU,干预,因而显示效果稳定。,缺点,:占用资源较多,第,4,章,单片机的,C51,语言,动态显示接口,:,所有数码管的,段码线对应并联,接在一个并行口上,而每位数码管的公共端分别由一位,I/O,线控制;,由并口输出的显示码可被所有数码管收到,但只有满足导通条件的数码管可以被驱动。,第,4,章,单片机的,C51,语言,工作原理,:,采用快速切换方式(如,10ms,),每一时刻只有一只数码管导通工作。利用视力暂留特性,可获得连续显示效果。,优点,:占用资源较少,缺点,:占用机时较多(需要,CPU,随时刷新显示值),第,4,章,单片机的,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,“,0x38”, 1#,“,0”,,,2#,“,1”,A-G,“,0x5b”, 1#,“,1”,,,2#,“,0”,P2,led_mode0, P3,xxxx xx10B =2,P2,l,ed_mode1, P3,xxxx xx01B =1,led_mode =0x38,0x5b,led_point=0,P2=led_modeled_point,led_point=1-led_point,P3 =2 - led_point,第,4,章,单片机的,C51,语言,如果不考虑开关,switch,,动态显示“,L2”,的程序可以如下:,;,/LED,“指针”,/,显示字模,led_point=0,P2=led_modeled_point,led_point=1-led_point,P3 =2 - led_point,第,4,章,单片机的,C51,语言,A-G,“,0x76”, 1#,“,0”,,,2#,“,1”,A-G,“,0x4f”, 1#,“,1”,,,2#,“,0”,字符数组,led_mode =0x38,0x5b,0x76,0x4f,开关状态变量,switch_sta,复合指针变量,led_point + switch_sta,显示字符,L,2,H,3,switch_sta+led_point,0,1,2,3,led_point,0,1,0,1,switch_sta,0,0,2,2,P3 = 2 - led_point,2,1,2,1,led_point=0,P2=led_mode,led_point +switch_sta,led_point=1-led_point,P3 =2 - led_point,switch_sta=,0,2,完整的主函数,第,4,章,单片机的,C51,语言,#include ,char led_mod = 0x38,0x5B,0x76,0x4F;,void delay(unsigned int 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);,led_point=0,P2=led_mode,led_point +switch_sta,led_point=1-led_point,P3 =2 - led_point,switch_sta=,0,2,编程界面,第,4,章,单片机的,C51,语言,第,4,章,单片机的,C51,语言,运行效果图,第,4,章,单片机的,C51,语言,行列式键盘原理与编程,独立式键盘的电路简单,易于编程,但占用的,I/O,口线较多,当需要较多按键时可能产生,I/O,资源紧张问题。,独立式键盘电路,第,4,章,单片机的,C51,语言,行列式键盘,将,I/O,口分为行线和列线,按键跨接在行线和列线上,列线通过上拉电阻接正电源。,44,行列式键盘,7407,六高压输出缓冲器,/,驱动器,行列式键盘的特点,:占用,I/O,口线少,但软件过程复杂。,第,4,章,单片机的,C51,语言,键盘扫描,同时将各行电平置,1,,分别将各列电平置,0,。,扫描码:,key_scan = 0xef, 0xdf, 0xbf, 0x7f;,写,P3: P3=key_scani;,键盘扫描原理,(以,P3,口接,4,4,键盘为例),第一次,1110 1111B,第二次,1101 1111B,第三次,1011 1111B,第四次,0111 1111B,= 0xef,= 0xdf,= 0xbf,= 0x7f,第,4,章,单片机的,C51,语言,(P3 & 0x0f) = 0x0f,无键压下,(P3 & 0x0f),0x0f,有键压下,按键闭合状态判断,0#,:,1110 1110B0xee,1#,:,1101 1110B0xde,F#,:,0111 0111B0x77,按键闭合前后,所在行线端口电平反转;,读,P3,后,若发现其低,4,位为,f,,说明无键压下;反之则相反。,键值,按键闭合时从引脚读出的数值。,第,4,章,单片机的,C51,语言,查找闭合键键号,for (j = 0 ; j 16 ;j+) ,if (P3= key_buf j) return j;,键值数组,key_buf = 0xee, 0xde, 0xbe, 0x7e,0xed, 0xdd, 0xbd, 0x7d,0xeb, 0xdb, 0xbb, 0x7b,0xe7, 0xd7, 0xb7, 0x77;,键号,按照一定规则给按键分配的编号,闭合键键号,:,闭合键值与键值数组相等时的查询号,第,4,章,单片机的,C51,语言,实例,7,功能,:开机黑屏;按下任意按键后,数码管上显示该键的键号(,0,F,);若没有新键按下,维持前次按键结果。,行列式键盘,+,静态数码显示,第,4,章,单片机的,C51,语言,实例,7,程序流程图,获取键号函数,P3,键扫描码,(P3 & 0x0f) = 0x0f?,查找闭合键键号,键号,key = 0,f,扫描,4,次,?,键号,key= -1,返回,Y,Y,N,N,主函数,获取键号函数,键号,= -1?,P2,键号显示码,N,Y,P2,黑屏显示码,第,4,章,单片机的,C51,语言,完整程序,第,4,章,单片机的,C51,语言,程序运行效果,第,4,章,单片机的,C51,语言,按键在闭合和断开瞬间会因弹簧开关的变形产生电压波动,软件消抖法:,延时,10ms,后再次扫描按键状态。若仍判为“闭合”说明确有键压下;若为“非闭合”说明是误动作。,按键抖动波形,键盘消抖原理,:,第,4,章,单片机的,C51,语言,消抖实例,:,(,实例,5),本章小结,C51,的数据类型与变量的定义,都必须考虑单片机的存储结构。,在,Keil,下进行,C51,开发的基本步骤是:建立工程输入源程序设置编译参数编译连接下载调试。,单片机,I/O,口基本编程应用包括按键(或开关)状态检测、发光二极管输出控制、数码管动态显示以及行列式键盘扫描编程等内容。,第,4,章,单片机的,C51,语言,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 幼儿教育


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!