任务二单片机控制流水灯.ppt

上传人:za****8 文档编号:12855006 上传时间:2020-05-31 格式:PPT 页数:146 大小:2.18MB
返回 下载 相关 举报
任务二单片机控制流水灯.ppt_第1页
第1页 / 共146页
任务二单片机控制流水灯.ppt_第2页
第2页 / 共146页
任务二单片机控制流水灯.ppt_第3页
第3页 / 共146页
点击查看更多>>
资源描述
任务二单片机控制流水灯,教学导航任务单任务准备案例示范知识梳理与总结任务作业,教学导航,任务单,任务二电路图,任务二单片机控制流水灯,2.1C51基础2.2C51语句2.3C51函数与预处理2.4单片机时钟电路及时钟周期案例3单片机控制模拟广告流水灯,2.1C51基础,C51语言是针对8051系列及其扩展系列单片机的语言,支持符合ANSI标准的c语言程序设计,同时针对8051系列单片机的一些特点进行了扩展。,2.1.1C51的标识符和关键字,1、标识符程序设计者为自定义的变量、函数、类型所起的名字只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线不能与关键字同名,尽量“见名知义”,2.1.1C51的标识符和关键字,【例2.1】指出下面哪些是非法的标识符?af-2f6m+nx4b4afas_da.sstotalmainmonthint关键字:mainint非法字符:f-2m+na.ss开头非法:4af,2.1.1C51的标识符和关键字,2、关键字又称保留字,是程序设计语言中规定的、有固定含义的单词符号。(32个),C51扩展的关键字,数据类型,C数据类型,基本类型,构造类型,指针类型,空类型void,定义类型typedef,字符类型char,枚举类型enum,整型,实型,单精度型float,双精度型double,数组,结构体struct,共用体union,长整型long,整型int,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,2.1.2C51的数据类型,位型bit,短整型short,2.1.3C51的数据类型,1.字符型(char),(1)字符型常量字符常量是用单引号括起来的一个字符,如a,1,A等都是字符常量。注意,字符型常量区分大小写,因此a和A是不同的字符常量。不可以显示的控制字符,可以在该字符前面加一个“”组成转义字符,也就是把“”后面的字符转变成另外的意义。,转义字符,(2)字符型变量,字符型变量的长度为一个字节(即8位),而8051单片机每次可以处理8位数据,因此字符型变量非常适合于8051单片机。字符型变量分为无符号和有符号两种。如果没有显式地指明是无符号还是有符号,则默认为有符号字符型变量。,(2)字符型变量,对字符型变量赋值有两种方法:既可以将用单引号括起来的一个字符赋给字符型变量,也可以将一个在其取值范围内的正整数赋给字符型变量。对于有符号的变量,最具有重要意义的是其最高位((8位中最左一位)。在此位上,1代表“负”,0代表“正”,剩余的低7位代表变量的绝对值,因此有符号字符型变量所能表示的数值范围是从-128十127。而无符号的变量的最高位不作为符号位,这与人们的习惯比较一致,不易出错。,(3)字符串常量,字符串常量是用一对双引号括起来的字符序列不要把字符常量与字符串常量混淆。这是因为在C51中,系统在每一个字符串的结尾加一个被称为“字符串结束标志”字符0以判断字符串是否结束。因此“A”表示一个字符串,它包含了A和0两个字节,因此,无法存储到只有一个字节的存储空间的字符型变量中。同样地,China占用了6个字节而不是5个字节。注意:0是系统自动加上的,在写字符串时不必加0。,2.整型(int),(1)整型常量整型常量按进制有以下3种表示形式:1)十进制整数:如134、5、-5、0等。2)八进制整数:以0开头的数,例如034表示八进制数(34)8,等于十进数28。3)十六进制数:以0 x或0X开头的数是十六进制数,例如0 x3a代表十六进制数(3a)16,等于十进制数58;-0 x56代表十六进制数(56)16,等于十进制-88。,(2)整型变量,1)基本型:以int表示,长度为两个字节。2)短整型:以shortint表示,长度为两个字节。3)长整型:以longint表示,长度为四个字节。以unsigned表示,这种类型与前3种类型匹配而构成无符号整型、无符号短整型和无符号长整型。注意:int,shortint,longint的缺省类型为有符号型。,(2)整型变量,说明整型变量的一般形式为:类型说明符变量名,变量名,;同类型的整型变量之间和不同类型的整型变量之间都可以进行算术运算。整型变量和字符型变量之间也可以进行算术运算。,3.浮点型(float),(1)浮点型常量浮点常量只有十进制这一种进制,并且都被默认为double型。对于绝对值小于1的浮点数可省略小数点前面的零,如.654就是0.654的缩略形式。科学计数法:-3.3E9由尾数和阶两部分构成的,-3.3E9表示:-3.3109。,3.浮点型(float),(2)浮点型变量浮点型变量分为单精度型(float)和双精度型(double),长度都是4个字节浮点型变量定义方法:floata;doubleb;,4.指针型,指针型是一种特殊的数据类型,其本身就是一个变量,但在其中存放的是另一个数据的地址。在C51中,指针的长度一般是3个字节。根据所指向的变量类型的不同指针变量也有不同的类型,指针变量的类型也就表示了该指针指向的地址中的数据的类型。,4.指针型,指针类型的表示方法是在指针符号“*”前面冠以数据类型符号例如:char*pa;/定义pa为字符型指针unsignedint*pb;/定义pb为无符号整形指针float*pf;/定义pf为浮点型指针,5.位变量(bit),位变量的长度是1位(bit),位变量和前面介绍的字符型变量是可以直接被8051单片机处理的。位变量的值可以取0(false)或1(true)。对位变量进行定义的语法如下:bitflag1;bitsend_en=1;注意:不能定义一个位变量指针,如不能定义bit*flagl;也不能定义一个位变量数组,如不能定义bitflags3。,5.位变量(bit),与8051单片机硬件特性操作有关的位变量必须定位在8051单片机片内RAM的可位寻址空间中,也就是字节地址为20H-2FH的16个节单元。,6.特殊功能寄存器(sfr),定义:单片机内的各种控制寄存器、状态寄存器以及I/O端口锁存器、定时器、串行端口数据缓冲器是内部数据存储器的一部分,离散地分布在80HFFH的地址空间范围内,这些寄存器统称特殊功能寄存器(SFR,SpecialFunctionRegisters)。,数据存储器,内部RAM,特殊功能寄存器,(2)说明:51子系列离散分布有21个特殊功能寄存器SFR、52子系列为26个。凡地址能被8整除的寄存器(共11个)都是可位寻址的寄存器。,特殊功能寄存器变量定义方法,sfr类型的长度为一个字节,其定义方式如下:sfr特殊功能寄存器名=地址常量;说明“地址常量”就是所定义的特殊功能寄存器的地址,例如:sfrP1=0 x90;sfrSCON=0 x98;注意:在关键字sfr后面必须是一个名字,名字可以任意选取,但应符合一般的习惯。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H0FFH)在头文件reg51.h中对所有的特殊功能寄存器都进行了定义。,7.16位特殊功能寄存器(sfr16),在新一代的8051单片机中,特殊功能寄存器在功能上经常组合成16位来使用。为了有效地访问这种16位的特殊功能寄存器,可采用关键字sfrl6。sfrl6类型的长度为两个字节,其定义语法与8位SFR相同,但16位SFR的低端地址必须作为sfr16的定义地址。例如sfr16T2=0CCH;/定义TIMER2,其地址为T2L=0CCH、T2H=0CDH注意:这种定义方法适用于所有新一代的8051单片机中新增加的特殊功能寄存器,但不能用于定时器/计数器TIMER0和TIMER1的定义。,8.可寻址位(sbit),(1)sbit位变量名=位地址这种方法将位的绝对地址赋给位变量,位地址必须位于80H0FFH之间。(2)sbit位变量名=特殊功能寄存器名位位置当可寻址位位于特殊功能寄存器种时可采用这种方法,“位位置”是一个07之间的常数。(3)sbit位变量名=字节地址位位置这种方法以一个常数(字节地址)作为基础,该常数必须在80H0FH之间。“位位置”是一个0-7之间的常数。,sbit是一个独立的关键字,不要与关键字bit相混淆。,2.1.3C51的运算量,1、常量程序运行期间其值不能被改变的量,即常数。数值型常量:3、3.5、-9字符常量:a、n字符串常量:”InputInformation-1”,2.1.3C51的运算量,2、变量程序运行过程中其值可以改变的量。变量名:标识符x变量值:变量存储单元中的数据8变量类型:值的大小由其类型来决定变量要“先定义、后使用”,2.1.3C51的运算量,变量的定义变量的名字变量的数据类型系统根据数据类型为变量分配内存空间变量的取值范围变量可以进行的操作,存储种类数据类型存储器类型变量名表;,完整的变量定义格式:,(1)存储种类,1)自动变量函数体内部或者复合语句中定义的变量,如果省略存储种类说明或者在变量名前面加上存储种类说明符“auto”,即可将该变量定义为自动变量。通常采用缺省形式,即省略存储种类说明。自动变量的作用域在定义其的函数体或复合语句内部。自动变量始终是相对于函数或复合语句的局部变量。,(1)存储种类,2)外部变量在所有函数外部定义的变量或者使用存储种类说明符“extern”定义的变量称为外部变量,一个外部变量被定义后,就被分配了固定的内存空间,并且可以被一个程序中的所有函数使用外部变量属于全局变量,其作用域是整个程序,在程序的任何地方均可以对这种变量进行访问如果外部变量与自动变量有同名变量,则只有自动变量起作用。,(1)存储种类,3)静态变量静态变量的定义方法是在类型定义语句之前加关键字static。内部静态变量是在函数内部定义的,与自动变量相比,其作用域同样限于定义内部静态变量的函数内部,但内部静态变量始终都是存在的,其初值只是在进入时赋值一次,退出函数之后变量的值仍然保存但不能访问。外部静态变量是在函数外部被定义的,与外部变量相比,其作用域同样是从定义点开始,一直到程序结束,但外部静态变量只能在被定义的模块文件中访问,其数据值可以为该文件内所有的函数所共享,退出该文件后,虽然变量的值仍然保存着,但不能被其他模块文件访问。,内部静态变量的用法示例,#include#includevoidmain()chari;SCON=0 x52;TMOD=0 x20;TH1=0XE8;TR1=1;,for(i=1;i”,右移运算符用来将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃。对无符号数或者有符号数中的正数,左边高位移入0;对有符号数中的负数,左边高端移入1。右移1位相当于除以2,右移n位相当于除以2n,因此a2相当于a/4。,(6)左移运算符“”,右移运算符用来将一个数的各二进制位全部左移若干位,移到左端的高位被舍弃,右边的低位补0。左移1位相当于乘以2,左移n位相当于乘以除以2n。,7.复合赋值运算符,凡是二目运算符都可以和赋值运算符结合组成复合赋值运算符。C语言规定可以使用以下10种复合赋值表达式:+=、-=、*=、/=、%=、=、main()while(1)if(p10=1)P0=0 x0f;elseP0=0 xf0;,#includesbitp10=P10;voidmain()while(1)if(p10=1)P0=0 x0f;if(p10=0)P0=0 xf0;,3多级ifelse语句,if(表达式1)分支一elseif(表达式2)分支二,elseif(表达式3)分支三else分支n,多级if语句流程图,实例2-4,P0口接8只发光二极管,P1.0、P1.1分别接一个按键S1、S2,要求当没有键按下时,8全灭,当S1按键按下时,左边四个亮,当S2按键按下时,右边四个亮,当两个按键按下时,全亮。,流程图,源程序,#includesbitp10=P10;sbitp11=P11;voidmain()while(1)if(p10=0,P0口接8只发光二极管,P1.0、P1.1分别接一个按键S1、S2,要求当没有键按下时,8全灭,当S1按键按下时,左边四个亮,当S2按键按下时,右边四个亮,当两个按键按下时,全亮。,4switch语句,switch(整形或字符型变量)case变量可能值1:分支一;break;case变量可能值2:分支二;break;case变量可能值n:分支n;break;default:分支n+1或空语句;,switch语句流程图,【例2-5】,P1.0P1.3接4个按键,P1.4P1.7接4个发光二极管,现要求一般情况下,4个发光二极管全亮,如果只按S1时D1灭,只按S2时D2灭,依此类推。,源程序清单:,#includevoidmain()unsignedcharctl;P1=0X0F;while(1)ctl=P1;,ctl=ctl,2.2.3循环语句,1while语句while(表达式)循环体,事先测试循环,在执行语句之前判断表达式,因此,循环可能没有执行循环体就退出。,【例2-6】,使用while语句实现从1到100的累加。,#include#includevoidmain()unsignedinti=1;unsignedintsum=0;SCON=0 x52;TMOD=0 x20;TH1=0 xE8;TR1=1;,while(i0;i+);if(P10=0)break;while(1);,针对例2-9,若与P0.0相连的发光二极管不停地闪烁,当与P1.0相连的按键按下时停止闪烁。,2.2.4转移语句,2continue语句continue;continue语句的作用是跳过本次循环中剩余的循环体语句,立即进行下一次循环,【例2-11】,针对例2-9,其功能改变为当与P1.0相连的K1按下时,发光二极管暂停闪烁,K1放开时,发光二极管继续闪烁,试编写程序实现之。,#includesbitP10=P10;sbitP00=P00;voidmain()inti;while(1)if(P10=0)continue;P0=P0;for(i=30000;i0;i+);,2.3C51函数与预编译处理,采用函数有以下优点:可以将不同的模块分别进行封装,使程序的整体结构清晰明了;可以增加程序的可重复使用性,减少重复劳动;对于经常使用的程序段,使用函数可以显著地缩减代码的大小。,主函数与普通函数,主函数:每一个C51程序都必须至少有一个函数,以main为名,称为main函数或主函数。main函数是程序的入口,在程序运行时从main函数开始执行。普通函数:main函数之外的函数可以统称为普通函数。普通函数从用户使用的角度划分,可以分为标准函数(即库函数)和用户自定义函数。函数定义的形式上划分可以分为无参数函数、有参数函数和空函数。,2.3.1函数的定义,函数定义的一般形式为有两种:ANSIC标准形式:类型标识符名函数名(数据类型名形式参数1,数据类型名形式参数2,)函数体老版C语言形式:类型标识符名函数名(形式参数1,形式参数2,)数据类型名形式参数1;数据类型名形式参数n;函数体,1无参数函数,类型标识符名函数名()函数体,无参数函数往往并不返回函数值,在这种情况下,“类型标识符名,使用“void”!,串行口初始化函数,voidserial_initial()SCON=0 x52;/设置串行口控制寄存器SCONTMOD=0 x20;/定时器1工作于方式2TH1=0 xE8;/11.0592MHz,1200波特率TR1=1;/启动定时器1TI=1;,2有参数函数,类型标识符名函数名(数据类型名形式参数1,数据类型名形式参数2,)函数体,3空函数,类型标识符名函数名(),在实际设计中,在开发的初级阶段,程序的功能通常不是十分完善,这时就经常会使用空函数首先搭出程序的框架,再在后续的工作中逐渐扩充。但在最后定型的程序中一般是没有空函数的。,提示:,(1)在同一工程中,函数名必须惟一。(2)形式参数在同一个函数中必须惟一,但可以与其他函数中的变量同名。(3)不能在一个函数中再定义函数。(4)在定义函数时应指明函数返回值的类型,如果没有函数返回值,应将设为void,若省略了函数返回值的类型,则默认为int型。(5)函数的返回值是通过函数中的return语句获得的,若不需要返回函数值,可以不要return语句。(6)函数名后面的圆括号不可省略,在圆括号后面也不可加分号(;)。,2.3.2函数参数和返回值,1形式参数和实际参数在定义函数时函数名后面圆括号中的变量名称称为“形式参数”,简称“形参”;在主调函数调用被调函数时,函数名后面圆括号中的表达式称为“实际参数”,简称“实参”。,提示:,(1)形式参数在函数定义的时候没有分配存储空间,只有在函数被调用时才分配存储空间,并把实际参数的值复制到分配的存储空间中。(2)形式参数和实际参数占据不同的地址,形式参数的变化不影响实际参数。(3)函数调用完毕后,形式参数的存储空间立即释放,但实际参数仍然存在并维持原值,能被其他函数继续使用。(4)实际参数的个数与形式参数的个数必须一致,在数据类型上与形式参数一一对应匹配。(5)实际参数可以是常量、变量或表达式,但形式参数只能是变量。,2.函数的返回值,希望通过函数调用使主调函数能得到一个确定的值,这个值就是函数的返回值。函数的返回值是通过函数中的return语句获得的。如果需要从被调用函数中返回一个函数值,被调函数中必须包含return语句。返回值的类型必须与函数头中的类型标识符名致,否则以函数头中的类型为准,由系统自动转换。为了明确表示“不带回值”,可以用“void”定义“无类型”(或称“空类型”)。,2.3.3函数的原型声明,C51语言中,主函数与其他函数是平行的,相对于在同一个源程序文件中的main()函数,其他函数可以在main()函数之前定义。缺点:所有的函数都位于main()函数之前,使得整个源程序文件显得庞杂混乱。原型声明:所有的函数的定义都放在main()函数之后,但要在main()函数之前对其进行原型声明。,函数原型声明的格式,类型标识符函数名(数据类型名;数据类型名,);,尖括号中的内容可选,也就是可以只列出各个形式参数的数据类型名而不必列出形式参数的名称。,注意,函数原型声明与函数的定义是完全不同的,函数的定义是对函数功能的确立,是一个完整的函数单位。函数原型声明中的类型标识符名、函数名、形式参数的数据类型名都要和函数定义中一致,并且在圆括号后面必须加分号(;)。,2.3.4函数的调用,1函数调用的一般形式函数名(实际参数列表);如果被调函数是无参数函数,则实际参数列表为空,但函数名后面的圆括号不能省略。如果实际参数列表包括多个实际参数,则各参数之间用逗号隔开,实际参数与形式参数的个数应该相等,类型应该一致,实际参数与形式参数按顺序对应,一一传递数据。,2函数调用的方式,(1)函数语句:把函数调用作为一个语句。此时不要求被调函数返回函数值,只是完成一定的操作。(2)函数表达式:函数出现在一个表达式中,这种表达式称为函数表达式,这时要求函数带回一个确定的值来参与运算。(3)函数参数:在主调函数中将函数调用作为另一个函数调用的实际参数。这种在一个函数的过程中又调用了另外一个函数的方式,称为嵌套函数调用。,2.3.5内部函数与外部函数,1内部函数内部函数只能被本文件中其他函数所调用。static类型标识符名函数名(数据类型名形式参数1,数据类型名形式参数2,)函数体内部函数又称静态函数。使用内部函数可以使函数只局限于所在文件,即使不同的文件中有相同函数名的函数也不会相互干扰。通常把只由同一文件使用的函数和外部变量放在一个文件中,用static加以说明使之局部化,限制其他文件对其引用。,2外部函数,外部函数的定义方法是在函数的类型标识符名前加extern,即:extern类型标识符名函数名(数据类型名形式参数1,数据类型名形式参数2,)函数体如果在定义函数时省略extern,则默认为外部函数。在需要调用此函数的文件中对此函数进行原型声明时一般也要用extern来说明所用的函数是外部函数。,2.3.6预处理命令,在源程序中这些命令都放在函数之外,并且一般都放在源文件的前面。在编译系统对程序进行通常的编译(包括词法分析、语法分析、代码生成、代码优化等)之前,先对程序中这些特殊的命令进行预处理,然后将预处理的结果和源程序一起再进行通常的编译处理,以得到目标代码。这些特殊的命令就是预处理命令。(1)宏定义;(2)文件包含;(3)条件编译。,1宏定义,宏定义命令为#define,其作用是用一个标识符来表示一个字符串,称为宏。被定义为宏的标识符称为宏名,而被代替的字符串既可以是常数,也可以是其他任何字符串。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏代换或宏展开。,(1)不带参数的宏定义,#define宏名(字符串)当字符串为常数时通常不加括号常对程序中反复使用的表达式进行宏定义,字符串为表达式时要加括号宏名的有效范围是从宏定义命令#define开始,直到本源文件结束,或用undef终止宏定义。,(2)带参数的宏定义,#define宏名(形参表)(字符串)在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参数的宏定义将一个带形式参数的表达式定义为一个带形式参数表的宏名。对程序中所有带实际参数表的该宏名都用指定的表达式来替换,同时用参数表中的实际参数替换表达式中对应的形式参数。,提示:,1)带参数的宏定义在进行宏展开时,只是用语句中宏名后面括号内的实际参数字符串来替换define命令行中的形式参数。因此,对于宏展开后可能出现错误的表达式,在进行宏定义时应将该表达式用圆括号括起来。2)在宏定义时,在宏名与带参数的括号之间不能加空格,否则将空格以后的字符都作为替代字符串的一部分。,宏定义与函数的区别,2文件包含,文件包含处理是指一个源文件可以将另外的文件包含到本文件中。文件包含命令行的一般形式为:#include文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。,说明,(1)包含命令中的文件名可以用双引号括起米,也可以用尖括号括起来。使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的)。使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。,说明,(2)一个include命令只能指定一个被包含文件,若有多个文件要包含则需用多个include命令。(3)文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。(4)被包含文件与其所在的文件在预编译后已经成为同一个文件而不是两个文件,因此,如果被包含文件(filel.h)中有全局静态变量,则这些全局静态变量也在filel.c中有效,不必用extern说明。,单片机的定时控制功能是由片内的时钟电路和定时电路来完成的,而片内的时钟产生有两种方式:内部时钟方式外部时钟方式,2.4单片机时钟电路及CPU时序,2.4.1单片机时钟电路,内部振荡器方式,外部振荡器方式,两种时钟电路,片内的高增益反相放大器通过XTAL1、XTAL2外接作为反馈元件的片外晶体振荡器(呈感性)与电容组成的并联谐振回路构成一个自激振荡器,向内部时钟电路提供振荡时钟。振荡器的频率主要取决于晶体的振荡频率,一般晶体可在1.212MHz之间任选,电容C1、C2可在530pF之间选择,电容的大小对振荡频率有微小的影响,可起频率微调作用。,内部振荡方式的连接方法,外部时钟方式:,不同工艺制造的单片机芯片外部时钟电路连接方法,2.4.2CPU时序,CPU以不同的方式,通过复杂的时序电路执行并完成各种不同指令功能。CPU的控制器按照指令的功能发出一系列在时间上有一定次序的信号去控制和启动一部分逻辑电路,完成某种操作。在一定时刻发出一定的控制信号去启动一定的逻辑部件动作,这就是CPU的时序。,1.时钟周期,通过单片机的时钟电路可以产生系统时钟信号。系统时钟信号是一切微处理器、微控制器内部电路工作的基础。晶体振荡器输出的振荡脉冲经2分频成为内部时钟信号,用作单片机内部各功能部件按序协调工作的控制信号,其周期称为时钟周期(也称状态周期)。,2.机器周期,CPU完成一种基本操作所需要的时间称为机器周期Tcy。MCS-51系列单片机的的1个机器周期包括6个时钟周期。为了叙述方便,以S1S6分别表示6个时钟周期,以P1、P2表示每个时钟周期的两节拍,则1个机器周期依次由S1P1、S1P2、S2P1S6P2等12个节拍(每个节拍为1个振荡周期)组成。,机器周期与振荡周期的关系,如果系统时钟的晶振频率为fosc=12MHz,则1Tcy=12Tosc=12/fosc=12/(12106)=1s即:1个机器周期的时间为1s。,3.指令周期,基本的机器周期有取指周期、存储器读周期和存储器写周期等,各种指令功能都是由这几种基本机器周期实现的。CPU执行一条指令所需要的时间称为指令周期,它以机器周期为单位。MCS-51的指令可以分为单周期指令、双周期指令和四周期指令三种,它们的执行时间依次是1个、2个和4个机器周期。,单字节单周期指令,双字节单周期指令,单字节双周期指令例:INCDPTR,4.CPU时序,假读,案例3单片机控制模拟广告流水灯,发光二极管的连接方式:,共阳极:8个发光二极管的阳极连在一起,并且将此公共端接到+5V,这种连接方法称共阳极结构,当某一段发光二极管的阴极为低电平时,该段发光。共阴极:如果将8个发光二极管的阴极连在一起,并且将此公共端接地,称为共阴极结构,当某一段发光二极管的阳极为高电平时,该段发光。,流水灯原理分析,start:P1=0XFEP1=0XFDP1=0XFBP1=0XF7P1=0XEFP1=0XDFP1=0XBFP1=0X7Fgotostart,源程序:,#includevoidmain()unsignedcharoutput=0 xfe;while(1)P0=output;output=0;i-);,任务实施:,任务1:前面通过学习循环程序完成了逐一点亮发光二极管实现了一种流水灯效果,下面请各组在此基础上,完成每次点2个灯的流水灯效果。任务2:完成从外向内逐一点亮或从内向外的逐一点亮的流水灯效果。,知识梳理与总结,本任务是完成单片机通过并行I/O端口控制8只发光二极管实现流水灯效果,比较系统地介绍了C51的基本语法,包括标识符、关键字、C51数据类型、运算符与表达式、变量的存储种类与存储器类型、基本语句、函数与预处理,还简单介绍了单片机的位寻址区和特殊功能寄存器、时钟电路与CPU时序。本任务需要重点掌握的内容有:(1)C51数据类型、运算符和表达式,特别是sbit类型和sfr类型的使用;(2)变量的存储种类与存储器类型;(3)分支控制语句、循环控制语句及转移语句;(4)函数的定义与调用,函数参数传递与返回值,函数原型说明;(5)内部函数与外部函数;(6)宏定义与文件包含;(7)单片机时钟电路与CPU时序、机器周期、指令周期。,任务作业,P75T2-1、2-2、2-3、2-4,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


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

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


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