单片机应用系统设计与制作教案电子教研室孙雷明-1-第2章单片机高级语言设计一、教学目标1、掌握C51基本语句的使用方法;2、熟悉C51数据类型、标识符与运算符;3、掌握顺序、分支和循环程序结构;4、掌握函数的含义及调用方法二、教学重难点1、C51数据类型、标识符与运算符;2、顺序、分支和循环程序结构;3、函数的含义及调用方法三、教学内容2.1C语言源程序的结构特点C51主要有以下特点:(1)语言简洁、紧凑,使用方便、灵活;(2)运算符及其丰富;(3)生产的目标代码质量高,程序执行效率高;(4)C51程序由若干函数组成,具有良好的模块化结构,便于改进和扩充;(5)有丰富的库函数,可大大减少用户的编程量,显著缩短编程与调试时间,大大提高软件开发效率;(6)可以直接对硬件进行操作;(7)程序具有良好的可读性和可维护性;而汇编语言在大应用程序开发中,开发难度增加,可读性差。C51程序和标准C程序结构相同,采用函数结构。每个C51程序由一个或多个函数组成,在这些函数中至少应包含一个主函数main(),也可以包含一个main()函数和若干个其它的功能函数。程序的执行总是从main()函数开始的,其位置无特殊规定。程序的开始部分一般是预处理命令、函数说明和变量定义等。预处理命令include函数说明floatfun1();longfun2();inta,b;fun1(){函数体…}fun2(){函数体…}2.2标识符和关键字单片机应用系统设计与制作教案电子教研室孙雷明-2-标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个外部中断1,可以写做INT1,如果程序中有Int1,那么这两个是完全不同定义的标识符。标识符可以由字符串、数字和下划线等组成,但首字符必须是字母或下划线。C51编译器规定标识符最长可达255个字符,但只有前面32个字符在编译时有效,因此在编写源程序时标识符的长度不要超过32个字符。程序中对于标识符的命名应当简洁明了,含义清晰,便于阅读理解,如用标识符“min”表示最小值,用“TIMER1”表示定时器1等。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符,可以将下划线用作分段符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在编写C语言源程序时一般不允许标识符的命名与关键字相同。在KEILuVision中的关键字除了有ANSIC标准的32个关键字外还根据51单片机的特点扩展了相关的关键字。2.3数据类型与运算符2.3.1数据类型C语言的数据结构是以数据类型出现的,数据类型可分为基本数据类型和复杂数据类型,复杂数据类型由基本数据类型构造而成。C语言中的基本数据类型有char,int,short,long,float和double。对于C51编译器来说,short型与int型相同,double型与float型相同。基本数据类型如表2-3所示。2.3.2常量和变量常量是在程序运行过程中不能改变值的量,而变量是可以在程序运行过程中不断变化的量。变量的定义可以使用所有C51编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。1.常量常量是指在程序执行过程中其值不能改变的量。C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。2.变量编写程序时,常常需要将数据存储在内存中,方便后面使用或者修改这个数据的值。因此,需要引入变量的概念。在程序运行过程中,其值可以被改变的量称为变量。变量有以下3个要素。变量名:每个变量都必须有一个名字,即变量名。变量的命名规则与用户自定义标识符的命名规则相同。变量值:在程序运行过程中,变量值存储在内存中;不同类型的变量占用的内存单元(字节)数不同。在程序中,通过变量名来引用变量值。变量的地址:变量在内存中存放其值的起始单元地址。2.4C语言的语句一个C程序是由若干语句组成的,每个语句以分号作为结束符。C语言的语句可以分为5类,即控制语句、表达式语句、函数调用语句、空语句和复合语句。其中,除了控制语句外,其余4类都属于顺序执行语句。2.4.1顺序执行语句1.表达式语句单片机应用系统设计与制作教案电子教研室孙雷明-3-表达式语句由表达式加上分号组成,最常见的就是赋值语句,是由一个赋值表达式后面跟一个分号组成。2.函数调用语句由函数调用加上分号组成,例如:printf(”Heli0”);/*调用库函数,输出字符串*/3.空语句只有分号组成的语句称为空语句。在程序中,如果没有什么操作需要进行,但从语句的结构上来说必须有一个语句时,可以书写一个空语句。4.复合语句把多个语句用大括号括起来组成的一个语句称为复合语句。2.4.2控制语句控制语句用于控制程序流程,实现程序执行流程的转移。包括以下9种语句。if()…else…(条件语句)switch(多分支选择语句)for()…(循环语句)do…while()(循环语句)while()(循环语句)goto(无条件转向语句)continue(结束本次循环语句)return(从函数返回语句)break(终止执行switch或循环语句)2.5C语言的数组2.5.1数组的定义与引用1.一维数组一维数组只有一个下标,定义的形式如下:数据类型说明符数组名[常量表达式][={初值,初值……}]2.字符数组用来存放字符数据的数组称为字符数组,它是C语言中常用的一种数组。字符数组中的每一个元素都用来存放一个字符,也可用字符数组来存放字符串。字符数组的定义下一般数组相同,只是在定义时把数据类型定义为char型。2.6C语言的函数2.6.1函数的定义与调用1、函数的定义函数定义的一般格式如下:函数类型函数名(形式参数表)[interruptn][usingn]2、函数的调用与声明1)函数的声明与使用变量一样,在调用一个函数之前,必须对该函数进行声明。函数声明的一般格式为:[extern]函数类型函数名(形式参数列表)单片机应用系统设计与制作教案电子教研室孙雷明-4-2)函数调用的一般形式如下:函数名(实参列表);2.7C语言的编译预处理2.7.1常用预处理命令1.宏定义“#define”指令宏定义的作用是用一个字符串替换另一个字符串,可以使程序中的一些较长字符串使用方便,并且意义一目了然。宏定义的简单形式是符号常量定义,复杂形式是带参数的宏定义。(1)不带参数的宏定义不带参数的宏定义又称符号常量定义,一般格式为:#define标示符常量表达式(2)带参数的宏定义带参数的宏定义与符号常量定义的不同之处在于,对于源程序中出现的宏符号名不仅进行字符串替换,还要进行参数替换。带参数宏定义的一般格式为:#define宏符号名(参数表)表达式2.文件包含“#include”指令“#include”指令的作用是指示编译器将该指令所指向的另一个源文件加入到自身文件中。文件包含的形式为:“#include文件名”或“#include文件名”。任务:函数实现LED闪烁频率控制(2个频率闪烁速度切换)1)任务目的设计一个函数,采用单片机控制的LED闪烁,实现LED闪烁频率控制(2个频率闪烁速度切换)通过LED观察。2)任务准备工具:电烙铁、吸锡器、镊子、剥线钳、尖嘴钳、斜口钳。设备:万用表、计算机。材料:AT89C51单片机一块、发光二极管八只、相关电阻九个、电容三个、12MHZ晶振一个、万用表一块、导线若干、焊锡丝、松香等。3)任务实施:1.任务分析:向单片机内输送执行码来控制的8个LED闪烁,输送不能的延时时间方式来控制P3口8位LED两个频率闪烁速度切换,通过LED观察。单片机应用系统设计与制作教案电子教研室孙雷明-5-图2.6.2单片机控制LED两个频率切换闪烁参考程序如下://实例:用有参数控制P3口8位LED流水灯#includereg51.h/**********************************函数功能;延时一段时间***********************************/voiddelay(unsignedinta){unsignedintp;unsignedchark;for(p=0;pa;p++)for(k=0;k200;k++);}/******************************函数功能:主函数******************************/voidmain(void){unsignedchari;unsignedcharcodeTab[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f};while(1){for(i=0;i7;i++)单片机应用系统设计与制作教案电子教研室孙雷明-6-{P3=Tab[i];delay(1000);//流水灯控制码}for(i=0;i7;i++){P3=Tab[i];delay(255);}}}2.硬件搭建根据任务提供的电路原理图在万能电路板(或Proteus)上合理布置电路所需元器件,并将P0.0-P0.7分别与八个LED对应,进行连接。3.软件编程及编译在计算机中利用Keil软件,在软件中输入参考程序,并将输入的程序编译,直至没有错误。4.编程下载通过编程器或Proteus将.BIN或.HEX程序写入AT89C51芯片5.系统调试和演示图2.6.2单片机控制LED两个频率切换闪烁4)任务结论采用单片机控制LED闪烁,向单片机内输送执行码来控制的8个LED闪烁,输送不同的延时时间的方式来控制P3口8位LED两个频率闪烁速度切换。