C语言程序设计及仿真调试.ppt_第1页
C语言程序设计及仿真调试.ppt_第2页
C语言程序设计及仿真调试.ppt_第3页
C语言程序设计及仿真调试.ppt_第4页
C语言程序设计及仿真调试.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

第4章 C语言程序设计及仿真调试,4.1 C语言程序设计基础(自行复习),4.2 Keil C,4.3 C语言程序设计及调试实例,【例4-1】编程实现通过延时函数,由P1.0输出方波信号。 解:C语言程序如下: #include “reg51.h” /8051寄存器定义头文件 sbit P10=P10; /定义P1.0引脚 void delay(long cnt) /延时函数 while(cnt0) cnt-; void main(void) P10=1; while(1) /主程序循环 delay(1000); P10=P10; ,由P1.2口输出信号,如何修改程序?,【例4-2】单片机P1口的P1.0和P1.1各接一个开关K1、K2,P1.4、P1.5、P1.6和P1.7各接一只发光二极管。有K1和K2的不同状态来确定哪个发光二极管被点亮。,#include “reg51.h” void main() char a; a=P1; a=a&0x03; /屏蔽高6位 if (a=0) P1=0x83; else if (a=1) P1=0x43; else if (a=2) P1=0x23; else P1=0x13; ,将例2用while循环实现。 #include “reg51.h” void main() char a; while (1) a=P1; a=a&0x03; /屏蔽高6位 switch (a) case0:P1=0x83;break; case1:P1=0x43;break; case2:P1=0x23;break; case3:P1=0x13; ,4. 2 Keil C,一、C51数据类型与运算,1.C51数据类型 bit 位变量 bit位变量是可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1。 bit lock; /将lock定义为位变量 bit direction; /将direction定义为位变量,sbit 可独立寻址的位变量 利用它能访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。 sbit CY=0xD7; /定义进位标志CY的地址为D7H sbit AC=0xD06; /定义辅助进位标志AC的地址为D6H sbit RS0=0xD03; /定义RS0的地址为D3H,sfr 8位特殊功能寄存器 sfr占用一个内存单元,值域为 0255。利用它能访问51单片机内部的所有特殊功能寄存器。 例如: sfr PSW=0xD0; /定义程序状态字PSW的地址为D0H sfr TMOD=0x89; /定义定时器/计数器方式控制寄存器TMOD的地址为89H sfr P1=0x90; /定义P1口的地址为90H,sfr16 16位特殊功能寄存器 sfr16占用两个内存单元,值域为 065535。sfr16和sfr一样用于操作特殊功能寄存 器,不同的是它用于操作占两个字节的寄存器,如定时器T2。 sfr16 T2=0xCC; /定义8052定时器2,低8位地址为 / T2L=CCH,高8位T2H=CDH,2. C51数据存储类型,位运算的操作对象只能是整型和字符型数据,不能是实型数据。C51提供以下六种位运算。 & (按位与) 相当于ANL指令 | (按位或) 相当于ORL指令 (按位异或) 相当于XRL指令 (按位取反) 相当于CPL指令 (右移) 相当于RR指令,位运算符及其表达式,二、 C51流程控制语句,1、 选择语句 if语句 switch/case语句 2、 循环语句 while语句 do-while语句 for语句,数组,数组是相关数据的一个有序集合,数组中的每个元素都是同一类型的数据。, 一维数组 由具有一个下标的数组元素组成的数组称为一维数组。 例如:int a5=1,2,3,4,5; /给全部元素赋值,a0=1,a1=2,a2=3,a3=4,a4=5,例15:, 二维数组 由具有两个下标的数组元素组成的数组称为二维数组。,int a34=1,2,3,4,5,6,7,8,9,10,11,12;/全部初始化,指针,关于指针的基本概念请参阅有关资料,当定义一个指针变量时,若未指定它所指向的对象的存储类型,则该指针变量被认为是一般指针;反之若指定了它所指对象的存储类型,则该指针被认为是基于存储器的指针。, 基于存储器的指针 基于存储器的指针是在说明一个指针时,指定它所指向的对象的存储类型。 例如:char xdata *px; px为指向一个定义在xdata存储器中的字符变量的指针变量。px本身在默认的存储器区域(由编译模式决定),其长度为2字节。 例16:, 一般指针 在函数的调用中,函数的指针参数需要用一般指针。一般指针的说明形式如下: char *pz;,C51函数,函数的嵌套函数的定义与分类 函数的调用调用与递归调用 C51的库函数,C51的库函数,C51编译器提供了丰富的库函数,使用这些库函数大大提高了编程效率,用户可以根据需要随时调用。每个库函数都在相应的头文件中给出了函数的原型,使用时只需在源程序的开头用编译预处理命令#include将相关的头文件包含进来即可。,数学函数库math.h 标准函数库stdlib.h 绝对地址访问头文件absacc.h 内部函数库intrins.h 访问SFR和SFR_bit地址头文件reg.h,预处理 (P126),包含命令#include,宏定义命令#define等。 在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理部分。 语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。下面介绍常用的几种预处理功能。,1宏定义 无参宏定义: 无参宏的宏名后不带参数。其定义的一般形式为: #define 标识符 字符串 其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。符号常量的定义就是一种无参宏定义。 常对程序中反复使用的表达式进行宏定义。例如:#define M (y*y+3*y) 定义M 表达式(y*y+3*y)。在编写源程序时,所有的(y*y+3*y)都可由M代替,,2文件包含 文件包含是C预处理程序的另一个重要功能。文件包含命令行的一般形式为: #include “文件名“ 例如: #include “stdio.h“ #include “math.h“ 文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行, 从而把指定的文件和当前的源程序文件连成一个源文件。在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。,对文件包含命令还要说明以下几点: (1)包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法都是允许的: #include “stdio.h“ #include 区别:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找; 使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。 (2)一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。 (3)文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。,3条件编译 (自行学习) 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。 (1)第一种形式: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的功能是,如果标识符已被#define命令定义过,则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有。,(2)第二种形式: #ifndef 标识符 程序段1 #else 程序段2 #endif 功能:如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。,(3)第三种形式

温馨提示

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

评论

0/150

提交评论