




已阅读5页,还剩133页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1单片机系统开发过程,简单的例子:让一个发光二极管闪烁5次。,1、明确系统功能:让一个发光二极管闪烁5次。,系统启动后,一支发光二极管闪烁5次后熄灭,当按下一个按钮开关后再闪烁5次后熄灭。以后每次按下按钮开关,发光二极管都会闪烁5次。,第三章单片机系统开发过程51单片机指令系统简介,2、硬件设计(单片机+外围器件),外围器件:,一个发光二极管、三个电阻、三个电容,一个按钮开关,3、搭建硬件平台,在面包板上插入器件,用导线完成电气连接。,4、软件设计ORG00H;设置起始地址START:MOVR0,#5;循环闪烁5次,R0为计数器LOOP:MOVP1,#00H;P1口输出全0,点亮二极管CALLDELAY;调用延时子程序MOVP1,#0FFH;P1口输出全1,熄灭二极管CALLDELAY;调用延时子程序DJNZR0,LOOP;R0减1,若不为0转LOOP处,JBP2.0,$;测P2.0为高电平(无按键)则执行本行JMPSTART;否则,有键按下,跳到START处重新开始执行,DELAY:;延时子程序(500ms)RET;返回主程序END;汇编程序结束,5、下载程序到单片机并调试,(1)在Vision中把目标程序编辑好,(2)编译、连接无错后生成单片机可执行的代码文件,(3)用下载线下载到单片机系统板中,(4)运行程序,(5)根据运行结果检查功能实现情况,若未达系统要求,则在Vision中修改程序,然后重复步骤(2)(5),直至达到系统要求.,在程序反复检查无逻辑错误时,应检查硬件电路是否有问题.,3.2VisionVision软件的使用1、新建一个工程(项目),并为该项目选定合适的CPU然后保存该工程。,具体步骤:选ProjectNewProject保存工程,在弹出窗口中选所需CPU(如选ATMEL),双击该.CPU.,选AT89S51,并确定。,2、设置工程,使编译、连接后能生成可执行代码文件,右击,OptionsforTarget1,选择CreateHEX,在弹出的窗口选,3、新建源文件,选FileNew输入源程序保存,(汇编程序:文件名.asm;C程序:文件名.c,(存在工程文件夹),4、为工程中添加源程序文件,在右边Project窗口单击SourceGroup1,在下拉菜单中选AddFilestoGroupSourceGroup1选项,,在弹出的框中选择你的源文件和文件类型,然后点击ADD,再点击close。,5、编译工程中的源程序,生成.HEX(可执行)文件,在Project窗口中选Target1BuildTargetF7,(点击)对源程序编译连接。(或点击RBuildTarget),程序有语法错误时,会在输出窗口(OutputWindows)中显示错误信息和警告信息,修改编译成功后生成HEX文件,生成.HEX文件后,可利用专门的下载程序,将此可执行程序下载到单片机内的ROM中运行,3、在窗口中点击,打开你系统的.hex文件,3.3STC-ISPV3.91软件的使用1、双击,打开在线烧录程序,2、在窗口的“MCUTYPE”下拉菜单中选择(STC89C51RC),4、在COM栏选下载端口(一般是COM1)5、关电路板上的电源6、点击Download,打开电路板上的电源,烧录程序,若烧录出现问题,点击stop。,注意:5、6两步骤的顺序不能颠倒!即在点击Download之前要先关掉板上的电源。,7、打开电路板上的电源,程序即开始运行。,3.4单片机应用系统C语言程序设计,单片机应用系统的程序设计有两种方法:一种是基于汇编语言的,另一种是基于C语言的。,汇编语言程序的机器代码生成效率高,但可读性较差,而C语言程序的可读性和可移植性远超过汇编语言。,C51是一种专门为51单片机设计的高级语言C编译器,支持符合ANSI标准的C语言,同时针对51单片机的特点做了一些特殊扩展。,C语言的主要特点:,语言简洁,使用方便灵活。它是程序设计语言中规模最小的语言之一。,ANSI标准C语言只有32个关键字,9种流程控制语句。,程序可移植性好。,所设计的程序不依赖机器硬件。,表达方式灵活。,利用C语言的多种运算符可组成各种表达式,还可采用多种方法来获得表达式的值,使程序设计具有更大的灵活性。,表达能力强。,具有丰富的数据结构类型和多种运算符。用户可灵活采用多种数据类型和使用各种运算符,实现复杂运算。,可直接操作计算机硬件。,C语言具有直接访问机器物理地址的能力,C51的编译器都可直接对单片机内部的SFR和I/O端口进行操作,可以直接访问片内、片外存储器,还可以进行各种为操作。,生成的目标代码质量较高。,可进行结构化程序设计。,C语言以函数作为程序设计的基本单位,非常适合结构化程序设计。,用C51语言编写单片机应用程序,不用具体组织、分配存储器资源和处理端口数据,但对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。,与标准C语言相比,C51包含的数据类型、变量存储模式、输入输出处理、函数等方面有一定差异,需根据单片机存储结构及内部资源来定义相应的数据类型和变量,而其它语法规则、程序结构及设计方法等与标准C语言相同。,3.4.1C51的程序结构,一、C51语言概述,C语言程序由若干函数组成,其中有且仅有一个主函数,每个函数都是完成某个特殊任务的子程序段。,组成程序的若干函数可保存在一个源程序文件中,也可保存在几个源程序文件中,最后将它们连接在一起。,函数之间可以互相调用,但主函数只能调用其它函数而不能被其它函数调用。,主函数是程序的入口,主函数中的所有语句执行完毕,则程序结束。,二.、C51语言程序结构,可实现一个LED闪烁控制功能的C51源程序,C51语言程序的基本结构:,式中:func1()funcN()代表用户定义的函数,程序体指C51提供的任何库函数调用语句、控制流程语句或其它函数调用语句。,3.4.2C51的数据结构,1.C51的变量,变量的基本属性是变量名和变量值。在程序中定义了变量,C51编译器就会给这个变量分配相应的存储单元。此后变量名就与存储单元地址相对应,变量值就与存储单元的内容相对应。,定义一个变量的格式如下:存储种类数据类型存储类型变量名,C51的变量概念示意图,图中引用变量a实现了对分配内存20H单元的数据操作,(1)存储种类,存储种类是指变量在程序执行过程中的作用范围。,变量的存储种类有四种:自动(auto)用存储种类说明符auto定义的变量外部(extern)用外部种类存储符extern定义的变量静态(static)用存储种类说明符static定义的变量寄存器(register)用存储种类说明符register定义的变量,自动变量:,自动变量作用范围在定义它的函数体或复合语句内部,在定义它的函数体或复合语句被执行时,C51才为该变量分配内存空间,当函数调用结束或复合语句执行结束时,自动变量占用的内存空间被释放。,定义变量时若省略存储种类,则变量默认为自动变量。通常将函数体内和复合语句中使用频繁的变量放在片内RAM中,且定义为自动变量,可有效利用片内RAM资源。,外部变量:,在一个函数内,要使用已在本函数外或别的程序模块文件中定义过的外部变量时,在本函数体内要用extern说明该变量。,通常将多个函数或模块共享的变量定义为外部变量。,外部变量是全局变量,在程序执行期间一直占有固定的内存空间。当片内RAM资源紧张时,不建议将外部变量放在片内RAM。,外部变量被定义后,即分配了固定的内存空间,在程序的整个执行时间内都是有效的。,静态变量:,静态变量又分为内部静态变量和外部静态变量。,在函数体内定义的静态变量为内部静态变量,它在该函数体内有效,但在该函数体外不可见,这使变量在定义它的函数体外被保护,实现了离开函数时值不会被改变。,寄存器变量:,通常将使用频率最高的那些变量定义为寄存器变量,但目前已不推荐使用这种方式。,外部静态变量是在函数外部定义的静态变量。它在程序中一直可见,但在定义的范围之外是不可见的。,在多文件或多模块处理中,外部静态变量只在定义其的文件内部或模块内部有效。,(2)数据类型,数据的不同格式叫做数据类型,有符号数据类型可以忽略signed标识符,如int等价于signedint,char等价于signedchar等。,为了更有效地利用51单片机的内部结构,C51还增加了一些特殊的数据类型,它们分别对应于bit、sfr、sfr16和sbit四个关键字。,bit位型,利用bit位型,可定义一个位变量或位函数,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1。,C51增加的特殊数据类型,sfr特殊功能寄存器型,51系列单片机内的21个特殊功能寄存器(SFR),分散在片内RAM区的高128字节,地址为80HFFH。为了能直接访问这些SFR,需要通过关键字“sfr”对其进行定义,语法如下:sfrsfr_name=地址常数;,sfr_name是一个特殊功能寄存器名,“=”后面必须是常数,其数值范围必须在特殊功能寄存器地址范围内,即位于0 x80-0 xFF之间。例如,sfrP1=0 x90;/定义P1口地址90HsfrPSW=0 xD0;/定义PSW地址D0H,对于16位SFR,要使用关键字“sfr16”,定义的地址必须是16位SFR的低端地址。sfr16DPTR=0 x82;/定义DPTR,其DPL=82HDPH=83H,注意:不能用sfr16定义定时器/计数器0和1。,sbit可寻址位,在单片机应用中,经常要访问特殊功能寄存器中的某些位,用关键字sbit定义可位寻址的特殊功能寄存器的位寻址对象。定义方法有如下三种:,sbit位变量名=位地址将位的绝对地址赋给位变量名,位地址必须位于0 x80H0 xFF之间。例:sbitCY=0 xD7;/将位的绝对地址赋给变量,sbit位变量名=SFR名称位位置当可寻址位位于特殊功能寄存器中时,可采用这种方法。其中SFR名称必须是已定义的SFR的名字,位位置是一个07之间的常数。例:sfrPSW=0 xD0;sbitCY=PSW7;/定义CY位为PSW.7,位地址为0 xD7,sbit位变量名=字节地址位位置这种方法是以一个字节地址作为基地址,该地址必须在0 x80H0 xFF之间。例如,sbitCY=0 xD07;/将位的相对地址赋给变量,注:C51编译器把51单片机常用特殊功能寄存器和特殊位进行了统一定义,并存放在“reg51.h”或“reg52.h”头文件中,只须在使用前用预处理命令#include把这头文件包含到程序中,就可使用殊功能寄存器名和特殊位名称。,(3)存储类型,51系列单片机有三个逻辑存储空间:片内低128BRAM,片外64KBRAM和片内外统一编址的64KBROM。,51系列单片机逻辑存储空间示意图,C51的存储类型与存储空间对应关系表,注:一个变量除了与存储单元相对应外,还与它所在的存储空间有关,即还需要指出其存储类型。,如果在定义变量时省略了存储类型标识符,C51编译器会根据当前编译模式自动认定默认的存储类型。编译模式共分为:小编译模式(SMALL)、紧凑编译模式(COMPACT)和大编译模式(LARGE)三种模式,编译模式与存储类型,(4)变量名,C51对变量名的规定与标准C类似,由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度无统一规定,随编译系统而定。,注意:大写和小写字母是两个不同的标识符,习惯上变量用小写表示。变量名除了不可使用标准C语言的32个关键字外,还要不可使用C51扩展的新关键字。,C51扩展的21个关键字一览表,C51扩展的21个关键字一览表(续),注:所有变量在使用前必须说明,即必须“先定义,后使用”,凡未被定义的,不作为变量名。,unsignedchardatasystem_status=0;/定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。,unsignedcharbdatastatus_byte;/定义status_byte为无符号字符型自动变量,该变量位于bdata区中。,unsignedintcodeunit_id2=0 x1234,0 x89ab;/定义unit_id2为无符号整型自动变量,该变量位于code区中,为长度为2的数组,初值为0 x1234和0 x89ab。,staticcharm,n;/定义m和n为2个位于data区中的有符号字符型静态变量。,externfloatxdatavar4;/在片外RAM空间定义外部实型变量var4。,C51的指针与标准C的指针几乎是一样的,都可以简单理解为“存储某个地址的变量”。,2.C51的指针,例如要存取变量a中的值时,可以先将变量a的地址放在另一个变量b中,访问时先找到变量b,从中取出变量a的地址,然后根据这个地址从内存单元中取出变量a的值。在这里,变量b称为指针变量。,上述说法相当于inta=AA;int*b=char*ptr=,ptr是一个char型的指针变量,它本身位于默认的data存储区(因为它省略了存储类型),它的值是xdata存储区里变量a的地址。,例2charxdataa=A;char*ptr=变量b位于idata存储区中,执行完*ptr=变量a是idata区域里的变量;charidata*ptr=定义指针时就限定它只能指向某一个区域,例如idata,例4若例3中的ptr指针自身位于xdata存储区,由于指针变量本质上也是变量,所以,可在例3的“charidata*ptr”里,为ptr加上指明所在区域的xdata即可,charidataa=A;charidata*xdataptr=xdata指明了ptr本身是在xdata存储区里的,而它是一个(charidata*)类型的变量,即指向idata区域的一个char类型的指针。,3.4.3C51的运算符,说明:(1)关于/(除)运算的结果,若:两个整数相除,运算结果的值为整数(如5/3,结果为1)两数中有一个为负值时,结果向零取整。(如-5/3为-1两数中有一个为实数时,结果为double型,1C51的基本算术运算符基本算术运算符有5种:,*(乘),/(除),(模运算符,又称求余)。,-7%4,7%-4,-7%-4的值为多少?,(2)参加/(模)运算的两数为整型数据结果,结果为整型数,如7%4的值为3,(-3,3,-3),关系运算符有6种:(小于)、(大于)、(小于或等于)、(大于或等于)(相等),!(不等于)。,2C51的关系运算符,前4种运算符的优先级别高(彼此间优先级相同),后两种运算符的优先级较低(彼此间优先级相同)。,关系运算的结果只有两种:“真”(1)和“假”(0)。,例:设a5,b4,c3,则ab的值为“真”,表达式的值为1,若有赋值语句d(ab)c按优先级,先算ab,表达式的值为1;再算1c,表达式的值为0,所以d0。,逻辑运算符有3种:”就构成了表达式语句,如算术表达式、关系表达式等。最典型的是用赋值表达式组成的赋值语句。例如:i=1;i+;,1、表达式语句C语言所有的操作都是通过表达式来实现的。表达式语句:表达式;,2、函数调用语句函数调用语句由函数名、括号、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);例:printf(Hello,worldn);,“函数调用语句”也可以看成是表达式语句,C语言称为“表达式语言”。,3.4.4C语句概述,3、控制语句控制语句用于控制程序流程,以实现程序的各种基本结构。共有9种控制语句,分成三类:选择语句、循环语句和转移语句。C使用控制语句控制程序的执行,常用的控制语句有:ifelseswitch选择控制forwhiledowhile循环控制continuebreakreturngoto转移控制,条件语句有三种格式:,格式1:If(条件表达式)语句1,格式2:If(条件表达式)语句1else语句2,格式3:If(条件表达式1)语句1elseif(条件表达式2)语句2elseif(条件表达式3)语句3.elseif(条件表达式m)语句melse语句n,注意:1)当条件后面的语句多于一句时,要用一对“”把这些语句括起来。2)用格式3实现多重ifelse嵌套时,注意if-else的配对,else总是和其前面最近的if相配。此外,嵌套层数会增加程序阅读难度。,开关语句,Switch(表达式)case常量表达式1:语句1break;case常量表达式2:语句2break;.case常量表达式n:语句nbreak;Default:语句d,循环语句,while(表达式)其含义是:当条件成立时反复执行循环体中的语句,直到条件不成立时为止。,dowhile(条件),for(;),break语句作用:跳出当前的switch语句或循环语句,流程控制语句,continue语句作用:结束当前这一轮循环,即跳过循环语句中尚未执行的语句,开始下一轮循环,而不是结束整个循环。,注:continue只用在for、while、do-while等循环语句中,一般与if语句一起使用,可以加速循环。,返回语句returnreturn(表达式)return表达式,作用:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数。,跳转语句goto语句标号作用:无条件转移到指定标号处,注:最好不使用goto语句,4、复合语句,例:while(ib?a:b);main()/*主调函数,函数内无被调函数说明intmax();*/intx=70,y=40,m;m=max(X,Y);,(1)函数是C51程序的基本单位,一个C51程序至少有一个主函数main(),也可以由一个主函数main()和若干个其它函数构成。若干其它函数受主函数调用,被调用的函数既可以是编译器提供的库函数,也可以是用户自己根据需要设定编制的函数。(2)一个函数由函数说明部分和函数体两部分组成。(3)函数说明部分由函数名、函数类型、函数属性、函数参数名和形式参数类型组成,其中允许没有函数参数,函数名后面必须有1个圆括号,括号内就是可有可无的形式参数表。(4)函数体是用大括号围起来的部分。大括号内有两部分内容:一部分是变量及变量的定义;另一部分是由若干语句组成的执行部分。如果一个函数内有多个大括号,则最外层的一对大括号为函数体的范围。有的函数体既有变量定义部分,又有执行部分;有的函数体仅有执行部分无变量定义部分;有的函数这两部分都没有。,3.4.6C51程序设计的编程规则,(5)语句的组成规则为:每个变量必须先定义后使用;变量名由英文字母组成,英文字母要区分大小写,大小写不同则变量名不同;书写格式自由,一行可以写多个语句,一个语句也可以写成多行,但每条语句必须以“;”结尾;分号是C语言的必须组成部分,每个语句和数据在定义的最后必须有一个分号,程序的最后一个语句也应有分号。,(6)C语言对I/O操作实现了“函数化”,分别调用库函数scanf和printf等函数完成,无专门的输入/输出语句。(7)C51的注释用/*/表示,有了注释,阅读程序更方便。C51程序结构如下:全局变量说明/*可被各函数引用*/main()/*主函数*/*函数体开始*/局部变量说明/*限于在本函数内使用*/执行语句(包括调用其它函数的语句)/*主函数的函数体结束*/,function1(形式参数表)/*可被调用的一个函数*/形式参数说明/*函数1的函数体开始*/局部变量说明执行语句(包括调用其它函数的语句)/*函数1的函数体结束*/functionn(形式参数表)/*可被调用的第n个函数*/*格式同函数1,从“”开始,到“”结束*/,3.5C51初步应用编程,1.I/O端口的简单应用,(1)基本输入输出单元与编程,输出:发光二极管作为输出状态显示设备具有电路简单、功耗低、寿命长、响应速度快等特点。最简单的发光二极管接口形式是通过限流电阻R直接挂在IO口线上,限流电阻通常取1001k左右,发光二极管与单片机的简单接口,输入按键、开关是最基本的输入设备,与单片机相连的简单方式是直接与IO口线连接。当按键、开关闭合时,对应口线的电平就会发生反转,CPU通过读端口电平即可识别是哪个按键或开关闭合。,注意:P0口内部结构为漏极开路状态,因此与按键或开关接口时需要有上拉电阻,而P1-P3不需要。,按键或开关与单片机的简单接口,独立按键识别和控制LED点亮程序设计,要求开始时LED均熄灭,随后根据按键动作点亮相应LED,按键释放后继续保持直至新的按键按下为止。,电路如下图,由电路可知,接于P0.0-P0.3的任意一个按键按下时,相应端口的电平将由“1”状态变为“0”状态;而接于P2.0-P2.3的任意一个LED在端口输出“1”时将被点亮。,参考程序如下,#include/定义51寄存器头文件包含到程序中,voidmain(void),charkey=0;/定义一个变量,初值为0,P2=0;/熄灭所有LEDP0=0 xff;/向P0写“1”,使P0口可正确读入按键状态,while(1)/循环key=P0/将P0口读入的按键状态取反并/与0fH按位与,清高4位留低4位,if(key!=0)P2=key;/key不为0有键按下则将key/送P2口控制相应的LED点亮/否则,再循环读按键状态,编程界面和运行界面分别如图,例2:键控流水灯,在上例电路图的基础上,编写可键控的流水灯程序。要求实现功能为,当K1按下时,要求流水灯流动;K2按下时停止流动,且全部灯灭;K3按下时使灯由上往下流动,K4则使灯由下往上流动。,程序说明,判断按键动作,并根据按键的组合状态控制流水灯状态。流水灯控制码事先存放在数组中。本例电路中LED为低电平驱动,故控制码中输出0电平对应着灯亮,反之,1电平对应着灯灭。流水速度可以根据需要调整延时数值了。,参考程序如下,/定义数组,并将控制各位灯亮的码作为/初值放入其中,/定义delay延时函数(带参数time),/定义内循环控制变量j,/定义按键扫描函数,/若无按键返回0,否则返回/从P0口读入的按键状态(高/4位被清0。,/定义两个位变量dir,run,并赋初值,/定义int型变量i,/根据key函数返回值决定如何控制LED,/若K1按下run=1,跳出switch/若K2按下run=0,跳出switch/若K3按下dir=1,跳出switch/若K4按下dir=0,跳出switch,/若ren=1(K1按下),去判断dir的值,/否则(ren=0,K2按下),向P2口输出0,熄灭所有LED,/由i控制顺序取出控制码,/若dir=1,控制LED,/调用延时函数,/否则(dir=0),控制LED,/由i控制反序取出控制码,/送P2,/送P2,/调用延时函数,第4章单片机的C51语言,Keil项目和程序界面如下图所示,(2)LED数码管原理与编程,数码管这种七段显示器内部由7个条形发光二极管和一个小圆点发光二极管组成,分为两种:共阴极所有二极管的阴极连接在一起为公共端共阳极所有二极管的阳极连接在一起为公共端,单个数码管的引脚配置如下图所示,其中com为公共端。,共阴极,共阳极,com,com,又称COM:字选线adp:段选线,给a-g7个发光二极管和dp加正电压点亮,加零电压熄灭,不同亮暗的组合形成不同的字形,这种组合成为段码。,共阳极七段码,共阴极七段码,C0HF9HA4HB0H99H92H82HF8H80H90H,3FH06H5BH4FH66H6DH7DH07H7FH6FH,用1个I/O口线控制dpgfedcba,用8位I/O口线控制数码管,若其各位与七段发光管和小数位发光管的对应关系如下的话:D7D6D5D4D3D2D1D0dpgfedcba则LED显示的字型和字段(控制)码有如下的对应关系。,例3:LED数码管显示,将单片机P0口的P0.0-P0.7与1个共阴极数码管的a-dp引脚相连,编程控制循环显示0-9数字,时间间隔0.2s。,硬件电路原理图,程序设计:显示的数字0-9的段码之间没有规律可循,故采取查表的方式来完成所需段码的获取。按数字的顺序存放待显示字型的字段码。在程序中建立字段码数组led_mod如下:0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f。,定义i变量初值为0,i=0,i=9,N,Y,P0=led_modi,延时,i=i+1,主函数流程,参考程序,/定义带参的延时函数,形参time,/定义整型变量j,控制内循环,/time控制外循环,/定义主函数,/内循环体为空语句,/定义字符型变量i,用于控制循环和取数组元素,/循环取各数字字段码送P0口显示,/延时,例4:静态显示方式的计数显示器,对按键动作进行统计,并将按键次数通过数码管显示。要求显示范围为1-99,增量为1,超过99后自动循环显示。,硬件电路原理图,P3.7,采用共阳极数码管简单按键接口,P3.7,程序设计:初始显示00,定义1个计数变量,不断扫描按键,有按键计数变量加1,并判断是否超范围,超则将其置为0。改变显示的数,方法是:将计数结果拆分成十位和个位(计数值整除10得到十位上的数值,它对10取模得到个位上的数值),再分别查找取出对应字段码送相应显示端口。检测等待按键松开,如此反复。,计数变量count=0,设P3.7做输入,0的字段码送p0、p1口,count=0,N,Y,P0=tablecount/10P1=tablecount%10,延时,count+1,主函数流程,P3.7=0,P3.7=0,N,count=100?,Y,Y,N,等键释放,参考程序,P3_7=1;,,将P3_7置1以保证正确输入,P1,/P1,P1,;/P1,例5.数码管动态显示原理与编程,数码管与单片机的接口方式有静态显示接口和动态显示接口之分。,静态显示:静态显示接口是一个并行口接一个数码管,其优点是:被显示数据只要送入并行口后就不再需要CPU干预,因而显示效果稳定。但该方法占用资源较多,动态显示:动态显示接口是将所有数码管的个段码线对应端并联起来分别接在8位并行口的对应口线上,而每位数码管的公共端分别由另外一个口的不同I/O线控制。,数码管动态显示接口示意图,动态显示:动态显示采用循环导通1位数码管截止其它数码管的做法。当循环显示间隔时间较小(如10ms)时,由于人眼的暂留特性,将看不出数码管的闪烁。动态显示接口的特点是占用资源较少,但由于显示值需要CPU随时刷新,故占用机时较多。,六位共阴极LED动态显示接口,7407驱动LED的段,P1.0P1.5作位选经7404驱动连接各LED的com端,要求数码管从左至右显示123456。,程序设计将要显示的数123456的七段码依次放入数组,从数组中取第1个七段码送P0口,控制从左开始选通数码管显示,显示几毫秒后,左移修改字选控制码。,然后从数组取下一待显数的七段码送P0口在下一位显示,如此循环逐位显示完6位,再从头开始。,#includecharled_mod=0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d;,voiddelay(unsignedinttime);,voidmain()unsignedchari;/定义控制从数组中取七段码的位置变量unsignedcharled_vei;/定义存字选控制码变量,while(1)led_vei=0 x01;/字选控制码初值(点亮最左边数码管),for(i=0;i0;time-)for(j=0;j125;j+);,(3)行列式键盘原理与编程,前面例题中的按键都是每键分别接在一根IO口线上,这称为独立式键盘。它的电路简单,易于编程,但占用的IO口线较多,当需要较多按键时可能产生IO资源紧张问题,这时应采用行列式键盘。,行列式键盘方案的一般做法是,将IO口分为行线和列线,按键置于行线和列线交叉位置的上方,行线则通过上拉电阻接正电源。按键压下时,行线和列线将发生短接,利用软件扫描技术可以判断出闭合状态。,44行列式键盘硬件电路图,行列式(矩阵)键盘识别的常用方法有两种:列扫描法线反转法,1)列扫描法(逐列进行)向某列线发出低电平信号,如该列线上所设置的键没有任何一个按下的话,则行线端口读回的是全“1”信号,否则,得到非全“1”信号,且为“0”位的位置对应按键所在行的位置。,找到闭合键后,获取其键值,据此转至该键对应的功能程序。,为防止多键同时按下,往往从第0列一直扫描到最后1列,若只发现1个闭合键,则为有效按键,否则,全部作废。,行和列是人为认定的,为此认定:通过上拉电阻接电源的口线对应的是行线。,按键在闭合和断开瞬间会因弹簧开关的变形而产生电压波动现象,其按键抖动波形如图,按键抖动会造成一次按键对应多次响应的问题,需要采用措施消除抖动影响。单片机常用软件延时10ms的办法来消除抖动的影响。当检测到有键按下时,先延时10ms,然后再检测按键的状态,若仍是闭合状态,则认为真正有键按下。当需要检测到按键释放时,也需做同样的处理。,a.先检查是否键按下。向列线端口送全列扫描码(列线全送“0”),行线端口做输入(行线全送“1”),然后,读入行线端口的状态,若行线中有为0位(即非全“1”),则有键按下。,c.判断按键位置。进行逐列扫描,被扫描列送0,其余列送“1”,每次均读入行线端口状态,看哪条行线为“0”。由行、列线的状态可判断是哪个键被按下(为“0”的行、列交叉处),d.计算确定按键的键号NN=为0行的行首键号+(发现按键时正扫描的)列号,具体实现步骤,b.有键按下则延时除抖动。即延时20mS左右,再次读行线端口看是否仍为有键按下,若有,则确认为一次有效按键。,4行X4列矩阵键盘控制如图P1.4-P1.7控制行线P1.0-P1.3控制列线,列扫描法汇编程序设计,行置1,MOV30H,#0;存键值单元清0MOVP1,#0F0H;列全“0”行全“1”MOVA,P1;读P1口ANLA,#0F0H;保留高4位CJNEA,#0F0H,JIN;判是否有按键,RETJIN:ACALLDELAY20msJIN0:MOVR2,#4;循环列扫描次(R2记录扫到第几列)MOVR3,#01H;起始列扫描码R3,初始扫3号列JIN1:MOVA,R3;当前扫描码ACPLA;获得本次列扫描信号MOVP1,A;列扫描输出MOVA,P1;读键盘ANLA,#0F0H;保留读回的行信息CJNEA,#0F0H,JIN2;判断有无按键,有则转JIN2MOVA,R3;无按键,列扫描码A,准备扫下一列,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,+5v,P1.7P1.6P1.5P1.4P1.3P1.2P1.1P.10,3号列,0号列,RLA;A右移1位,修改列扫描码MOVR3,A;保存当前列扫描码DJNZR2,JIN1;4列未扫完继续循环RET;无键按下返回JIN2:DECR2;获得按键所在列的列号MOVR1,#0;0行行首键号R1JNBACC.7,JIN3;是0行有键按下则转JIN3MOVR1,#4;否则,1行行首键号R1JNBACC.6,JIN3;是1行有键按下则转JIN3MOVR1,#8;否则,2行行首键号R1JNBACC.5,JIN3;是2行有键按下则转JIN3MOVR1,#12否则,3行行首键号R1JIN3:MOVA,R1;按键所在行的行首键号AADDA,R2;计算键值=行首键号+列号MOV30H,A;存键值到30H单元JN4:MOVA,P1;读键盘,等待键释放ANLA,#0F0H;保留行状态值CJNEA,#0F0H,JN4;若行状态值不为全”1”则转RET,2)线反转法线反转法比列扫描法速度快,但在硬件上要求行线与列线外接上拉电阻。方法如下:,先将行线作为输出,列线作为输入,行线输出全“0”、列线全“1”,接着读入列线的值;然后,再将行线作为输入,列线作为输出,并将刚才读到的列线值从列线所接的端口输出,再读取行线的输入值。那么在闭合键所在的行线上值必为0。,这样,当一个键被按下时,必定可读到一对唯一的只有1位为0的行、列值。,根据上两步的结果,可确定按键所在行和列。,a.先将行线编程为输入,列线输出全0列信号,读入行线状态,若非全1则有键按下,此时,为0位对应行为按键所在行,线反转法具体实现步骤,b.再将行线编程为输出,列线做输入,行线输出全0行信号,读入列线状态,此时为0位对应列为按键所在列。,c.计算该按键的键号N=行首键号+列号,线反转法键盘扫描流程,与写入的相等否,与写入的相等否,例6行列式键盘应用,44行列式键盘电路原理图如下,要求按任意按键后,显示出该按键对应的数(0-F)。,第一行,第一列,若用8位2进制数用以下方式来表示键编码:高4位对应行、低4位对应列,每个键的编码是,除其所在行、列对应位为1外,其余位为0,则有:,1行1列键编码11H2行1列键编码21H3行1列键编码41H4行1列键编码81H1行2列键编码12H2行2列键编码22H.3行3列键编码44H4行3列键编码84H.4行4列键编码88H,0,1,2,4,E,F,D,C,5,8,9,B,P2,P3.7,P3.0,参考程序,0-F16个数符的共阴七段码依次放入led_mod数组,0-F16个键对应的编码依次放入key_buf数组,/说明扫描键盘返回键值函数,本程序有键盘扫描和软件延时两个子程序函数,主函数调用键盘扫描子程序,获取用户按键对应值年,完成静态显示。,/带参延时函数,线反转法扫描键盘返回键值(该数对应段码在led_mod中的位置),k1存首次发现有键按下时的键盘状态,k2存按键码,送全列扫描码:行线高电平、列线低电平,/调用键盘扫描函数,返回键值送key保存,/key用来存放按键对应值,/00H送P2口,灭数码管,/有键按下则据键值从led_mod中/取对应段码送P2口显示,/延时一段时间,/读回P3的值不等于f0H则有键按下,否则无按键/有键按下则读回P3的状态存k1,,/若键盘状态与前键盘状态k1相同则确有键按下/送全行扫描码,行线全0,列线全1,/全行、列扫描读回值相或后取反,得键编码,/据键编码在key_buf中搜索,,k2=(P3k1);,/无键按下则返回-1,/延时,(4)并行I/O口综合应用:步进电机的控制与编程,步进电机是一个数字角度转换器,也是一个串行的数模转换器,它是用电脉冲控制转动速度和转角的电磁机械装置。,步进电机最大的应用是在数控机床的制造中,因为其不需要A/D转换,能直接将数字脉冲信号转化成角位移,所以,是理想的数控机床的执行元件。如:步进电机用作数控铣床进给伺服机构的驱动电动机。,步进电机还可用在其他机械上,如:作为自动送料机和软盘驱动器的马达,也可应用在打印机和绘图仪中。,步进电机是过程控制及仪表中的主要控制元件,广泛用于定位系统。,步进电机的工作、控制原理,磁极上有5个均匀分布的矩形小齿,转子上没有绕组,而有40个小齿均匀分布在其圆周上,且相邻两个齿之间的夹角为9。,步进电机上的定子有6个等间距的磁极,两个相邻磁极之间的夹角为60,线圈绕过相对的两个磁极,构成一相(A-A,B-B,C-C)。,这使定子上相邻两磁极间对应转子上的小齿数为6个,出现了错齿现象。,23,给某组绕组通电时,相应的两个磁极就形成N-S极,产生磁场,并与转子形成磁路。若这时定子的小齿与转子没有对齐,则在磁场的作用下转子将转动一定的角度,使转子齿与定子齿对齐,从而使步进电机向前“走”一步,转动一个固定的步距(进)角度。,通电一周,转子转过一个齿距角,一个齿距角分N步(拍)走完。,若以A-B-C次序对三相通电,每相通电转子转动个齿,即步进角为3,这样,转子就以每相3的速度正转,反次序通电则反转。此通电方式称为三相三拍方式。,若以A-AB-B-BC-C-CA-A的顺序对磁极绕组通电,完成一个循环为6拍,称为三相六拍方式,每拍转子转1.5,可使电机定位精度提高一倍,同时,转动变得更平稳。,用单片机控制脉冲发生器产生脉冲信号,按一定规律输出给驱动器,即可控制步进电机按要求转动。转动的角度大小与施加的脉冲个数成正比,转动的速度与脉冲频率成正比。,三相三拍方式下,转子转1周(360)需120步,三相六拍方式转1周则需240步。因此,在同样的运行角度与速度下,三相六拍方式的驱动脉冲的频率要提高一倍,对驱动开关管的开关特性要求较高。,步进电机控制系统的组成,步进控制器现在,一般用计算机控制系统,由软件代替步进控制器。优点:线路简化,成本降低,可靠性提高。可灵活改变步进电机的控制方案,使用起来很方便。功率放大器脉冲放大,以驱动步进电机转动。,用单片机控制步进电机原理系统图,用单片机代替步进控制器,把并行二进制码转换成串行脉冲序列,并实现方向控制。只要负载是在步进电机允许的范围之内,每个脉冲均使电机转动一个固定的步距角度。根据步距角的大小及实际走的步数,只要知道初始位置,便可知道步进电机的最终位置。,步进电机设计主要解决如下几个问题:用软件的方法实现脉冲序列;步进电机的方向控制;步进电机控制电路及程序的设计。,1)脉冲序列的生成,脉冲幅值由数字元件电平决定。TTL05VCMOS010V接通和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京市房山区燕山教育委员会所属事业单位第一批招聘教师30人模拟试卷及参考答案详解一套
- 2025年高通量试验反应堆及配套产品项目建议书
- 2025年福建泉州市华侨大学分析测试中心招聘实验技术系列人员(4月)考前自测高频考点模拟试题及答案详解(名校卷)
- 2025湖南郴州资兴市第一人民医院招聘考前自测高频考点模拟试题及1套参考答案详解
- 2025河南洛阳师范学院招聘7人模拟试卷及答案详解(网校专用)
- 2025北京邮电大学第二批招聘38人考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025年黄山市祁门县国有投资集团有限公司人才招聘5人模拟试卷完整参考答案详解
- 2025年河北石家庄市明泽职业中专学校公开招聘教师23名模拟试卷及答案详解(全优)
- 2025广东深圳市九洲电器有限公司招聘法务专员等考前自测高频考点模拟试题及答案详解(必刷)
- 2025广东广州市中山大学孙逸仙纪念医院耳鼻喉科科研助理招聘1人考前自测高频考点模拟试题及完整答案详解1套
- 《电子制动系统》课件
- GB/T 43586-2023聚烯烃冷拉伸套管膜
- 矩阵论智慧树知到课后章节答案2023年下哈尔滨工程大学
- 活出生命的意义课件
- 拆除废旧电缆桥架施工方案
- 人教版九年级道德与法治 上册 第三单元《文明与家园》大单元整体教学设计
- 酒店营销与数字化实务完整全套教学课件
- 二年级应用题大全800题二年级上册数学乘法应用题
- YY/T 1851-2022用于增材制造的医用纯钽粉末
- GB/T 19575-2004农产品批发市场管理技术规范
- 《管理沟通实务(第四版)》课件第一章 沟通与管理沟通
评论
0/150
提交评论