单片机技术应用项目化教程(C语言版)(第2版) 课件 任务2.2_第1页
单片机技术应用项目化教程(C语言版)(第2版) 课件 任务2.2_第2页
单片机技术应用项目化教程(C语言版)(第2版) 课件 任务2.2_第3页
单片机技术应用项目化教程(C语言版)(第2版) 课件 任务2.2_第4页
单片机技术应用项目化教程(C语言版)(第2版) 课件 任务2.2_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目2霓虹灯控制系统任务2.2流水灯控制系统明确任务

在任务一中设计制作了一个LED灯的闪烁控制,本次任务做8个LED流水闪烁控制。要求每次只亮一个灯,从第1个开始亮,其它全灭;然后第2个灯亮,其它全灭;依次类推,第8个灯亮过之后,在转到第1个灯,循环不停。每个灯亮的间隔要求约0.5s。任务:设计制作8个流水灯控制系统。voidmain(void){unsignedchari,j;//定义局部变量

while(1) {LED=0; //小灯亮

for(i=0;i<200;i++) for(j=0;j<200;j++);LED=1; //小灯灭

for(i=0;i<200;i++) for(j=0;j<200;j++);}}回顾任务2.1程序:知识链接一、C51程序设计--函数

所谓函数,是指可以被其他程序调用的具有特定功能的一段相对独立地程序。C程序是由函数构成的。从用户使用角度,可分为库函数和用户自定义函数。库函数:由C系统提供,只需在程序前使用#include命令包含有该函数原型的头文件即可在程序中直接调用。用户定义函数:由用户按需要写的函数。返回值:分为有返回值函数和无返回值函数。从主调函数和被调函数之间数据传送的角度:分为无参函数和有参函数两种。所有的函数都是平行的,不能嵌套定义。但允许相互调用,也允许嵌套调用。main函数是主函数,它可以调用其它函数,而不允许被其它函数调用。一个C源程序有且只有一个主函数。函数定义的一般格式如下:函数类型函数名(形式参数列表)[interruptm][usingn]

{

声明部分可执行语句部分

return语句

}函数类型:说明了函数返回值的数据类型。函数名:用户为自定义函数取的名字,以便调用函数时使用,必须采用合法的标识符。形式参数表:表用于列出在主函数与被调用函数之间进行数据传递的形式参数的数据类型和名称。每个参数有一个类型符和参数名组成,参数名也必须是合法的标识符。函数可以没有参数,参数列表写一个void,也可空着。声明部分:主要完成变量的定义、对被调用函数时使用。执行部分:由一系列语句组成,完成函数的具体功能设计。return语句:使流程返回到调用处。函数的值通过return返回主调函数,函数的类型就是返回语句中表达式值的类型。一般格式为:return表达式;在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。如果被调函数中return语句没有表达式,return语句可省略,函数无返回值,可以用void定义。voiddelay(void){unsignedchari,j;//定义局部变量

for(i=0;i<200;i++) for(j=0;j<200;j++);}任务2.1中的延时程序部分可以定义成单独的一个函数。函数调用的一般形式如下:函数名(实际参数表列);注:①无参数函数没有实参表列;②有参数的函数调用,实际参数可以是常数、变量或其他构造类型数据及表达式。多个实参,用逗号隔开。函数调用中的实参与函数定义中的形参必须在个数、类型及顺序上严格保持一致。函数调用的前提是被调用函数必须已定义过。库函数:使用预处理命令“#include<**.h>将有关函数的信息包含到本文件中。用户自定义函数:如果在函数定义之前调用,需要在主调函数中对被调函数进行声明。函数声明一般形式如下:

[extern]函数类型函数名(形式参数表);

注:声明的函数不在文件内部,而在另一个文件中,声明时须带extern,指明使用函数在另一个文件中。在同一文件中则不需要。voidmain(void){

unsignedchari,j;//定义局部变量

while(1) {LED=0; //小灯亮

for(i=0;i<200;i++) for(j=0;j<200;j++);LED=1; //小灯灭

for(i=0;i<200;i++) for(j=0;j<200;j++);}}

delay();

delay();单片机执行指令以机器周期为最基本执行时间单位。所以延时时间计算最小单位为机器周期,用T来指代。voiddelay()//子程序调用2T{unsignedchari,j;//自变量定义T+Tfor(i=0;i<20;i++)//赋值T,判断2T,自加T,且下面语句、判断、自加执行20次 for(j=0;j<200;j++);//赋值T,判断2T,自加T,且判断、自加执行200次}//子程序返回2T延时程序耗时机器周期计‍算:2T+2T+T+[2T+T+200*(2T+T)+T]*20+2T=12087T如果单片机晶振为12MHz,机器周期为1μs,这个函数延时12087μs,约12ms。二、硬件电路

三、软件设计与编程

1.8个灯都采用位控制方式,方法同任务2.1一样,亮的灯输出0,灭的输出1.

位号76543210编码第1个灯亮111111100xFE第2个灯亮111111010xFD第3个灯亮111110110xFB第4个灯亮111101110xF7第5个灯亮111011110xEF第6个灯亮110111110xDF第7个灯亮101111110xBF第8个灯亮01111111Ox7F2.字节输出控制。需要对输出进行编码,根据显示方式编码,如果改变显示方式只需改变编码即可。while(1) { P1=0XFE; //第1个灯亮,其余灯灭

delay(); //延时

P1=0XFD; //第2个灯亮,其余灯灭

delay(); ----------P1=0X7F; //第8个灯亮,其余灯灭

delay(); }3.字节编码利用数组来表示出来,利用C语言中的循环指令,修改为精简程序,提高程序阅读效果,提升代码效率。数组是一种有序数据的集合。数组中每一个元素的类型相同。数组必须先定义后使用。一维数组的定义形式为:类型说明符数组名[常量表达式];类型说明符:数组中各元素的数据类型;数组名:用户定义的数组标示符;常量表达式:表示数据元素的个数,也称为数组的长度。数组中的元素用数组名和下标来唯一确定。例如: chara[10]; /*定义一个数组名a,有10个元素,每个元素的类型均为char*/下标从0开始顺序编号。因此数组a的10个元素分别是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],它们按顺序占用连续的存储空间。对数组的初始赋值,指按照数字大小依次为各个元素提供初始值,通过{}中的数据序列提供,元素之间用逗号隔开。可以只给出全部或是部分元素赋值,如果是部分数据则只给前面部分元素赋值,后面元素自动赋0值。unsignedchara[5]={0,1,2,3,4};如果不给可初始化的数组赋值则全部元素均为0值。在定义数组时如果未指定数组大小,则根据给出的元素的个数来自行确定数组大小。unsignedchara[]={0,1,2,3,4};unsignedcharcodelsd[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};//灯控制字节编码voidmain(void){unsignedcharu;while(1) {for(u=0;u<8;u++) //for循环,依次循环数组内字节编码

{

P1=lsd[u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论