欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    PI-C单片机C语言学习入门实例.doc

    • 资源ID:630344       资源大小:250KB        全文页数:25页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    PI-C单片机C语言学习入门实例.doc

    #*PIC 单片机单片机 C 语言入门语言入门1.2.1 认识认识 PIC 单片机单片机 C 语言语言用 C 语言来开发单片机系统软件最大的好处是编写代码效率高。软件调试直观、维护升级方便、 代码的重复利用率高、便于跨平台的代码移植等等,因此 C 语编程在单片机系统设计中已得到越来 越广泛的应用。 但在单片机上用 C 语言写程序和在 PC 机上写程序绝对不能简单等同。珊在的 PC 机资源十分 丰富,运算能力强大,因此,程序员在写 PC 机的应用程序时,几乎不用关心编译后的可执行代码 在运行过程中需要占用多少系统资源,也基本不用担心运行效率有多高。写单片机的 C 语言程序最 关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系 结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用性很高的 C 语程序。 本书围绕 PIC 中档系统单机来展开讨论的,Microchip 公司自己没有针对 PIC 中档系列单片机 的 C 语言编译器,但很多专业的第三方公司有众多支持 PIC 单片机的 C 语言编译器提供,常见的 有 Hitech、CCS、IAR、Bytecraft 等公司。其中笔者最常用的是 Hitech 公司的 PICC 编译器,它稳 定可靠,编译生成的代码效率高,在用 PIC 单片机进行系统设计和开发的工程师群体中得到广泛认 可。其正式完全版软件需要购置,但在其网站上有限时的试用版供用户评估。另外,Hitech 公司针 对广大 PIC 的业余爱好者和初学者,还提供了完全免费的学习版 PICC-Lite 编译器套件。它的使用 方式与完全版相同,只是支持的 PIC 单片机型号限制在 PIC16F84、PIC16F877 和 PIC16F628 等几 款。这几款 Flash 型的单片机因其所具备的丰富的片上资源而最适用于单片机学习入门,因此,笔 者建议感兴趣的读者可以从 PICC-Lite 入手掌握 PIC 单片机的 C 语言编程。 我们一起来认识训练项目 2跑马灯的仿真与演示的程序 LEDS.C。 1#include“pic.h“ 2int a;/定义整型变量 a 3void main( ) 4TRISB=0X00;/定义端口 B 为输出模式 5while(1)/while 循环语句 6PORTB=0XFE;/1111 1110 7for(a=1000;a>0;a-);/for 循环语句 8PORTB=0XFD;/1111 1101 9for(a=1000;a>0;a-);/for 循环语句 10PORTB=0XFB;/1111 1011 11for(a=1000;a>0;a-);/for 循环语句 12PORTB=0XF7;/1111 0111 13for(a=1000;a>0;a-);/for 循环语句 14PORTB=0XEF;/1110 1111 15for(a=1000;a>0;a-);/for 循环语句 16PORTB=0XDF; /1101 1111 17for(a=1000;a>0;a-);/for 循环语句 18PORTB=0XBF;/1011 1111 19for(a=1000;a>0;a-);/for 循环语句 20PORTB=0X7F;/0111 1111 21for(a=1000;a>0;a-);/for 循环语句 22 #*23 说明: 第 1 行:#include“pic.h“是文件包含语句,表示把语句中指定文件的全部内容复制到此处,与 当前的源程序文件链接成一个源文件。该语句中指定的文件 pic.h 是 Hitech-PICC 编译器提供的头 文件,保存在“C:HT-PICinclude”路径下,该文件包含了对 PIC 单片机特殊功能寄存器 SFR 和位 名称的定义。在编写每一个程序时,首先编写的一条语句就是#include“pic.h“。 第 2 行:int a。是定义一个整型变量 a,具体什么是整型变量?有何功能?请看数据与数据类 型号中的介绍。 第 3 行:void main( )。定义主函数 void main( )。其是 C 语言程序中必不可少的主函数,也是 程序开始执行的第一个函数。函数一般分成两个部分,一个部分为函数名:main,另一个部分为函 数体:从第 4 行的到 23 行的为止。 第 4 行:TRISB=0X00。是给单片机的 B 端口方向寄存器赋值,使 B 端口数据方向为输出方向, 具体 TRISB 寄存器功能请查看【知识链接 3】PIC 单片机 I/O 接口及其应用。 第 5 行:while(1)。是 while( ) 循环语句。 第 6 行:PORTB=0XFE。是给单片机的 B 端口寄存器赋值,使 B 端口寄存器为 0XFE,具体 PORTB 寄存器功能请查看【知识链接 3】PIC 单片机 I/O 接口及其应用。 第 7 行:for(a=1000;a>0;a-)。是 for 循环语句。 第 821 行都与第 6、7 行相类似,在此就不再重复,int 、while、for 等 C 语言知识接下将一 一介绍。1.2.2 数据与数据类型数据与数据类型数据是计算机的对象,任何程序设计都要进行数据处理。具有一定格式的数字或数值称为数据, 数据的不同格式称为数据类型。 在 C 语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,如 图 1-2-1 所示。图 1-2-1 C 语言的数据类型 在进行 PIC 单片机程序设计时,支持的数据类型与编译器相关。Hitech-PICC 编译器所支持的 数据类型如表 1-2-1 所示,其遵循 Little-endian 标准,多字节变量的低字节放在存储空间的低地址, 高字节放在高地址。数据类型单精度型(float)双精度型(double)整型 (int) 实型(浮点型)字符型 (char)基本类型构造类型枚举类型号 (enum) 数组类型结构体类型 (struct)共用体类型 (union)指针类型空类型(void)#*表 1-2-1 Hitech-PICC 编译器所支持的数据类型序号数据类型名称长度(位数)值 域1位类型bit1B0 或 1 2有符号字符型char8B-128 +1273无符号字符型unsigned char8B0 2554有符号整型short16B-32768 +327675无符号整型unsigned short16B0 655356有符号整型int 16B-32768 +327677无符号整型unsigned int16B0 655358有符号长整型long32B-2 147 483 648 +2 147 483 6479无符号长整型unsigned long32B0 4294 967 29510浮点型float24B-2 147 483 648 +2 147 483 64711双精度浮点型double24B 或 32B-8 388 608 +8 388 607 或 -2 147 483 648 +2 147 483 647注:Hitech-PICC 编译器缺省认定 double 型变量为 24 位长,但可以改变编译选项改成 32 位长1.2.3 常量与变量常量与变量单片机程序中处理的数据有常量和变量两种形式,二者的区别在于:常量的值在程序执行期间 是不能发生变化的,而变量的值在程序执行期间可以发生变化。 1常量常量 在程序运行的过程中,其值不能改变的量称为常量。常量的数据类型有整型、浮点型、字符型 和字符串型。 (1)整型常量可以表示为十进制数、十六进制数或八进制数等,例如:十进制数 12、-60 等; 十六进制数以 0x 开关,如 0x13、0xAB 等;八进制数以字母 o 开关,如 o14、o17 等。若要表示长 整型,就在数字后面加字母 L,如 104L、o34L、0Xf340L 等。 (2)浮点型常量可以分为十进制表示形式和指数表示形式两种,如 0.888、3345.345、123e3、-2.4e-2 等。 (3)字符型常量是用单引号括起来的单一字符,如a 、 9等。 (4)字符串型常量是用双引号括起来的一串字符,如“test” 、 “ok”等。字符串是由多个字符 连接起来组成的。 2变量变量 在程序运行中,其值可以改变的量称为变量。一个变量主要由两部分构成;一个是变量名,一 个是变量值。每个变量都有一个变量名,在内存中占据一定的存储单元(地址) ,并在该内存单元 中存放该变量的值。 下例为对符号常量和变量进行说明: 1#define CONST 60 2void main( ) 3int variable, result; 4variable = 20; 5result = variable * CONST; 6 第 1 行:#define CONST 60。这一行定义了一个符号常量 CONST,其值为 60。这样在后面的#*程序中,凡是出现 CONST 的地方,都代表常量 60。 第 2 行:variable 和 result 就是变量。它们的数据类型为整型(int) 。 注意:符号常量与变量的区别在于,符号变量的值在作用域(本例中为主函数)中,不能改变, 也不能用等号赋值,习惯上,总将符号常量名用大写,变量名用小写,以示区别。(1)变量的定义)变量的定义变量必须先定义后使用,用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译 系统才能为变量分配相应的存储空间。变量的定义格式如下: 存储种类 数据类型 存储器类型 变量名表; 其中,数据类型和变量名表是必须的,存储种类和存储类型是可选项。 存储种类有四种:auto(自动变量) 、extern(外部变量) 、static(静态变量)和 register(寄存 器变量) 。默认类型为 auto(自动变量) 。 例如: int a ;/*定义 a 为整型变量*/ int m,n;/*定义 m 和 n 为整型变量*/ float x,y,z;/*定义 x,y,z 单精度实型变量*/ char ch;/*定义 ch 为字符变量*/ long int t;/*定义 t 为长整型变量*/ static int r;/*定义 r 为静态的整型变量*/ 进行变量定义时,应注意以下几点: 允许在一个数据类型标识符后,说明多外相同类型的变量,各变量名之间用逗号隔开; 数据类型标识符与变量名之间至少用一个空格隔开; 最后一个变量名后必须以分号“;”结尾; 变量说明必须放在变量使用之前,一般放在函数体的开头部分; 在同一个程序中变量不允许重复定义。 例如: int x,y,z; int a,b,x; /*变量 x 被重得定义*/(2)变量的初始化)变量的初始化在定义变量的同时可以给变量赋初值,称为变量的初始化。变量初始化的一般格式为:数据类型标识符 变量名 1=常量 1,变量名 2=常量 2,变量名 n=常量 n;例如: int m=3,n=5; /*定义 m 和 n 为整型变量,同时 m,n 分别赋初值 3,5*/ float x=0,y=0,z=0; /*定义 x,y,z 为单精度实型变量,同时 x,y,z 都赋初值为 0*/ char ch=a; /*定义 ch 为字符型变量,同时赋初值字符a*/ long int a=1000,b;/*定义 a,b 为长整型变量,同时 a 赋初值 1000*/(3)整型变量)整型变量整型变量的基本类型符为 int,可以根据数值的范围将整型变量定义为基本整型变量、短整型 变量或长整型变量。 基本整型变量用 int 表示; 短整型变量用 short int 表示(或用 short)表示; 长整型变量用 long int 表示(或用 long)表示。#*在计算机(或单片机)中数据是以二进制形式表示的,基本整型变量占用内存 2 个字节,即 16 位。16 位中最左边的一位表示符号,该位 0,表示正数;该位 1,表示负数。一个基本整型变量 的值范围为-215(215-1) ,即-32 76832 767。实际应用时注意整型变量的值不能超出范围, 否则容易出错,为了充分利用变量表示数据的范围,可以将变量定义为“无符号”类型。归纳起来, 可以使用以下 6 种整型变量: 带符号基本整型变量signed int 无符号基本整型变量unsigned int 带符号短整型变量signed short int 无符号短整型变量unsigned short int 带符号长整型变量signed long int 无符号长整型变量unsigned long int 如果在定义整型变量时不指定 unsigned,则隐含为有符号(signed) 。 假设定义两个变量 a 和 b 如下: int a; usigned int b; 则变量 a 的取范围为了-32 76832 767。而变量 b 的取值范围为 065 535。图 1-2-2(a) 表示有符号的基本整型变量 a 的最大值(32 767) ,图 1-2-2(b)表示无符号的基本整型变量 b 的 最大值(65 535) 。0111111111111111(a)有符号整型变量1111111111111111(b)无符号整型变量 图 1-2-2 变量 a 和 b 的最大值(4)实型变量)实型变量实型数据与整型数据在内定中的存储方式不同,实型数据是按照指数形式存放的,系统把一个 实数分成小数和指数两个部分分别进行存放。指数部分采用规范化的指数形式,例如:-21.34638 在内存中的存放形式如图 1-2-3 所示。实型号变量分为单精度(float) 、双精度(double)和长双精 度(long double) ,但 Hitech-PICC 编译器只支持单精度(float)和双精度(double)两种,具体规 则如表 1-2-1 所示。-.21346382图 1-2-3 实数在内存中的存放形式(5)字符型变量)字符型变量字符型变量用来存放字符常量,注意只能存放一个字符。例如:=32 767符号位表示数据 的最高位 =65 535符号 小数部分 指数- .2134638 2#*char c1,c2,c3,c4,c5;/定义 5 个字符变量 c1=a;/正确 c2=”a”; /不正确 c3=abc; /不正确 c4=107; /正确 c5=6; /正确 将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将 该字符的相应的 ASCII 代码放到存储单元中。例如: char c1,c2;/定义 2 个字符变量 c1=a;c2=b;/给字符变量 c1 赋值为a、c2 赋值为b 字符a的 ASCII 代码为十进制数 97,字符b的 ASCII 代码为十进制数 98,在内存中变量 c1、c2 的实际上是以二进形式存放的。(6)位变量)位变量bit 型位变量只能是全局的或静态的。PICC 将把定位在同一 bank 内的 8 个位变量合并成 1 个 字节存放于一个固定地址。因此,所有针对位变量的操作将直接使用 PIC 单片机的位操作汇编指令 高效实现。基于此,位变量不能是局部自动型变量,也无法将其组合成复合型号高级变量。1.2.5 运算符和表达式运算符和表达式数据处理是程序的核心部分。在数据处理中,各种运算又是最主要的部分。C 语言不仅数据类 型丰富,而且运算符也十分丰富,几乎所有的操作都可以用运算符来处理。由运算符加适当的运算 对象(常量、变量、函数等)可构成表达式,而表达式是 C 语言的重要要素之一,因此掌握好运算 符的使用对编写程序十分重要。 对于每一个运算符,要注意从两个方面去把握:运算符的优先级和运算符的结合性。运算符的 优先级指多个运算符用在同一个表达式中时先进行什么运算,后进行什么运算;而运算的结合性是 指运算符所需要的数据是从左边开始取还是从右边开始取,因而有所谓“左结合性”和“右结合性” 之说。 C 语言提供了丰富的运算符,它们能构成多种表达式,处理不同的问题,从而使 C 语言的运算 功能十分强大。另外 C 语言的运算符可以分为 12 类,如表 1-2-3 所示。表 1-2-3 C 语言的运算符运算符名运算符名运算符运算符算术运算符+ - * / % + -关系运算符> = > j=+i;/j=101,i=101 j=i+;/j=101,i=102 j=-i;/j=101,i=101 j=i-;/j=101,i=100 编程时常将“+” 、 “-”这两个运算符用于循环语句中,使循环变量自动 1;也常用于指针变 量,使指针自动加 1 指向下一个地址。3赋值运算符与赋值表达式赋值运算符与赋值表达式赋值运算符“=”的作用变是给变量赋值,如“x=10;” 。用赋值运算符将一个变量与一个表达 式连接起来 的式子称为赋值表达式,在表达式后面加“;”便构成了赋值语句。赋值勤语句的格 式如下。#*变量 = 表达式; 例如: k=0xff;/将十六进制数 FFH 赋予变量 k b=c=33;/将 33 同时赋予变量 b 和 c d=e;/将变量 e 的值赋予变量 d f=a+b; /将表达式 a+b 的值赋予变量 f 由此可见,赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性, 因此有下面的语句: a=b=c=5; 可以理解为: a=(b=(c=5); 按照 C 语言的规定上,任何表达式在其末尾加上分号就构成语句。因此“x=8;”和“a=b=c=5;”都是赋值语句。 如果赋值运算符两过的数据类型号不相同,系统将自动进行类型转换,即把赋值右边的类型换 成左边的类型。具体规定如下: 实型赋给整型,舍去小数部分。 整型赋给实型,数值不变,但将以浮点开式存放,即增加小数部分(小数部分的值为 0) 。 字符型赋给整型,由于字符型为 1 字节,而整型 2 字节,故将字符 ASCII 码值放到整型量 的低 8 位中,高 8 位为 0。 整型赋给字符型,只把低 8 位赋给字符量。 图 1-2-4 表示了各数据类型自动转换的规则。图 1-2-4 各种数据类型的高低顺序 在 C 语言程序设计中,经常使用复合赋值运算符对变量进行赋值。复合赋值运算符就是在赋值 符“=”之前加上其他运算符,表 1-2-4 中优先级 14 就是复合赋值运算符。 构成复合赋值表达式的一般形式为: 变量 双目运算符 = 表达式; 它等效于: 变量 = 变量 运算符 表达式; 例如: a+=5;/相当于 a=a+5; x*=y+7;/相当于 x=x*(y+7); r%=p;/相当于 r=r%p; 在程序中使用复合赋值运算符,可以简化程序,有利于编译处理,提高编译效率并产生质量较 高的目标代码。4关系运算符与赋值表达式关系运算符与赋值表达式在前面介绍过的分支选择程序结构中,经常需要比较两个变量的大小关系,以决定程序下一步 的操作。比较两个数据量的运算符称为关系运算符。C 语言提供了 6 种关系运算符: 大于运算符:>;低intunsigned longdoubleunsigned longshor、char float高#* 大于等于运算符: >=; 小于运算符:、>=的优先级相同,=和!=优先级相同;前者优先级高于后者。 例如:“a=b>c;”应理解为“a=(b>c);” 。 关系运算符优先级低于算术运算符,高于赋值运算符。 例如:“a+b>c+d;”应理解为“(a+b)>(c+d);” 。 关系表达式是用关系运算符连接的两个表达式。它绵一般形式为: 表达式 关系运算符 表达式 关系表达式的值只有 0 和 1 两种,即逻辑的“真”与“假” 。当指定的条件满足时,结果为 1,不满足时结果为 0。例如表达式“5>0;”的值为“真” ,即结果为 1;而表达式“(a=3)>(b=5);” 由于 3>5 不成立,故其值为“假” ,即结果为 0。 a+b>c/若 a=1,b=2,c=3,则表达式的值为 0(假) a>3/2/若 x=2,则表达式的值为 1(真) c=5/若 c=1,则表达式的值为 0(假)5关系运算符与赋值表达式关系运算符与赋值表达式C 语言中提供了三种逻辑运算符,一般形式有以下三种。 逻辑与运算符:/定义整型变量 a 3void main( ) 4TRISB=0X00;/定义端口 B 为输出模式 5while(1)/while 循环语句 6PORTB= PORTB|0XFE;/1111 1110 7for(a=1000;a>0;a-);/for 循环语句 8PORTB= PORTB|0XFD;/1111 1101 9for(a=1000;a>0;a-);/for 循环语句 10PORTB= PORTB|0XFB;/1111 1011 11for(a=1000;a>0;a-);/for 循环语句 12PORTB= PORTB|0XF7;/1111 0111 13for(a=1000;a>0;a-);/for 循环语句 14PORTB= PORTB|0XEF;/1110 1111 15for(a=1000;a>0;a-);/for 循环语句 16PORTB= PORTB|0XDF; /1101 1111 17for(a=1000;a>0;a-);/for 循环语句 18PORTB= PORTB|0XBF;/1011 1111 19for(a=1000;a>0;a-);/for 循环语句 20PORTB= PORTB|0X7F;/0111 1111 21for(a=1000;a>0;a-);/for 循环语句 22 23 分析上面程序可知,该程序实现的流水灯效果。7逗号运算符与逗号运算表达式逗号运算符与逗号运算表达式在 c 语言中逗号“, ”也是一种运算符,称为逗号运算符,其功能是把两个表达式连接起来组 成一个表达式,称为逗号表达式,其一般形式为: 表达式 1,表达式 2,表达式 n #*逗号表达式的求值过程是:从左军右分别求出各个表达式的值,并以最右边的表达式 n 的值作为整个逗号表达式的值。程序中使用逗号表达式的目的,通常是要分别求逗号表达式内各表达式的值,并不一定 要求整个逗号表达式的值。例如: x=(y=10,y+5);上面括号内的逗号表达式,逗号左边的表达式是将 10 赋给 y,逗号右边的表达式进行 y+5 的计算,逗号表达式的结果是最右边的表达式“y+5”的结果 15 赋给 x。并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明、函数参数表中的逗号 只是用做各变量之间的间隔符,例如: unsigned int i, j; 1.2.6 基本语句基本语句C 语言程序的执行部分由语句组成。C 语言提供了丰富的程序控制语句,按照结构化程序设计 的基本结构:顺序结构、选择结构和循环结构,组成各种复杂程序。这些语句主要包括表达式语句、 复合语句、选择语句和循环语句等。1表达式语句表达式语句 表达式语句是最基本的 C 语言语句。表达式语句由表达式加上分号“;”组成,其一般形式如 下: 表达式; 执行表达式语句就是计算表达式的值。例如: PORTB=0XFD;/赋值语句,在程序 LEDS.c 中将端口 B 赋值为 0XFD x=y+z; / y 和 z 进行加法运算后赋值给变量 x i+; /自增 1 语句,i 增加 1 后,再赋给变量 i 在 C 语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分号“;” ,程序执行 空语句时需要占用一条指令的执行时间,但是什么也不做。在程序中常常把空语句作为循环体,用 于消耗 CPU 时间等待事件发生的场合。例如,在 LEDS.c 函数中,有下面语句: for(a=1000;a>0;a-);/for 循环语句 上面的 for 语句后面的“;”是一条空语句,作为循环体出现。 在使用在使用“;”时的小技巧:时的小技巧: 表达式是由运算及运算对象所组成的、具有特定含义的式子,例如“y+z” 。C 语言是一种 表达式语言,表达式后面加上分号“;”就构成了表达语句,例如“y+z” 。C 语言中的表达式与表 达式语句的区别就是前者没有分号“;” ,而后者有“;” 。 在 while 或 for 构成的循环语句后面加一个分号,构成一个不执行其他操作的空循环体。例 如: While(1); 上面语句循环条件永远为真,是无限循环;循环体为空,什么也不做。程序设计时,通常把该 语句作为停机语句使用。2复合语句复合语句 把多个语句用大括号括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合 而成的语句称为复合语句。在程序中应把复合语句看在是单条语句,而不是多条语句。 复合语句在程序运行时,中的各行单语句是依次顺序执行的。在 C 语言的函数中,函数体是 一个复合语句,例如程序 LED.c 的主函数中包含两个复合语句:#*void main( ) TRISB=0X00;/定义端口 B 为输出模式 while(1)/while 循环语句 PORTB= PORTB|0XFE;/1111 1110 for(a=1000;a>0;a-);/for 循环语句 PORTB= PORTB|0XFD;/1111 1101 PORTB= PORTB|0X7F;/0111 1111 for(a=1000;a>0;a-);/for 循环语句 在上面的这段程序中,组成函数体的复合语句内还嵌套了组成 while()循环体的复合语句。复合 语句允许嵌套,也就是在中的也是复合语句。 复合语句内的各条语句都必须以分号“;”结尾,复合语句之间有分隔,在括号“”外, 不能家分号。 复合语句不仅可由可执行语句组成,还可由变量定义语句组成。在复合语句中所定义的变量, 称为局部变量,它的有效范围只在复合语句中。函数体是复合语句,所以函数体内定义的变量, , 其有效范围也只在函数内部。前面的 main()函数体内定义的位变量 left 和 right 的有效使用范围局限 在 main()函数内部,与其他函数无关。3选择语句选择语句 跑马灯的 C 程序可以用以下程序代码来实现,即跑马灯先从上到下循环进行。 #include “pic.h“ unsigned char temp=0x01; /* *function: main() *功能描述:主函数 */ void main( ) INTCON=0X00;/设置 INTCON 的 bit7bit0 为零:关总中断 TRISB=0X00;/设置端口 B 为输出方式 PORTB=0Xff;/使端口 B 输出低电平 while(1) PORTB=temp;/按位取反 for(a=1000;a>0;a-);/for 循环语句,起延时作用 if(temp=0x00)/判断变量 temp 是否等 0x00 temp=0x01;/if 语句成立,给变量 temp 赋 0x01 else/if 语句不成立 temp=temp0;a-); /for 循环语句,起延时作用 else if(RD0=0) /如果 RD0 为低电平状态 RB0=0; /则点亮左转灯 for(a=5000;a>0;a-); /for 循环语句,起延时作用 else if(RD1=0) /如果 RD1 为低电平状态 RB1=0; /则点亮右转灯 for(a=5000;a>0;a-); /for 循环语句,起延时作用 else ; /空语句 RB0=1; /熄灭左转灯 RB1=1; /熄灭右转灯 for(a=5000;a>0;a-); /for 循环语句,起延时作用 #*表达式 1表达式 2表达式表达式 n语句组 1语句组 2语句组语句组 n语句组 n+1NYYY YNNN图 1-2-8 if-else-if 语句执行流程选择【程序】【Proteus 7 Professional】【ISIS 7 Professional】命令,启动 PROTEUS 仿真软件,在 ISIS 7 professional 图形编辑窗口,绘制汽车转向灯仿真电路。并选择【程序】【Microchip】【MPLAB IDE v8.00】【MPLAB IDE】命令,启动 MPLAB IDE 集成开发环境;新 建 car_turn.mcw 工程。选择菜单栏中的【Project】【Build All】命令或直接点击工具栏中的 “”图标,对程序进行编译、修改,直到“Out put”窗口没有错误为止。再把 car_turn.hex 文件添加到 Proteus 中,会出现如图 1-2-9 所示的汽车转向灯仿真效果。#*图 1-2-9 汽车转向灯仿真效果if 语句使用过程中的注意事项语句使用过程中的注意事项 else 语句是 if 语句的子句,它是 if 语句的一部分,不能单独使用。 else 语句总是与在它上面跟它最近的 if 语句相配对。 表达式“RD0=0 unsigned char contr_led;/定义转向灯控制变量 /*#*mian() */main( ) TRISB=0X00;/设置端口 B 为输出方式 PORTB=0XFF;/设置端口 B 为高电平输出 TRISD=0XFF;/设置端口 D 为输入方式 while(1)/while 循环 contr_led=PORTD;/读 PORTD 的状态送到 contr_led 变量 contr_led= contr_led/与操作,屏蔽掉高 6 位无关位,取出 RD0 /和 RD1 状态switch(contr_led) case 0: RB0=0; RB1=0;break;/如果 RD0 与 RD1 都为 0,则点亮左、右灯 case 1: RB1=0; break;/如果 RD1 为低电平状态,则点亮右转灯 case 2: RB0=0; break;/如果 RD0 为低电平状态,则点亮左转灯 default: ;/空语句,什么都不做 for(a=5000;a>0;a-); /for 循环语句,起延时作用 RB0=1; /熄灭左转灯 RB1=1; /熄灭右转灯 for(a=5000;a>0;a-); /for 循环语句,起延时作用 在上述程序中,定义了一个无符号字符变量 contr_led,长度为 1 个字节,其最低两位用来表示 RD0 和 RD1 引脚对左、右转向灯的控制状态。 语句“contr_led=PORTD;”将 PORTD 口的 8 个引脚状态保存到变量 contr_led 中,再执行“与” 操作语句“contr_led= contr_led” ,把无关位清零,一般称之屏蔽。然后,采用 switch(contr_led)语句来判断变量 contr_led 的值与哪个 case 语句中的常量表达式的值相同,点亮相 应的转向灯;如果都不相等,则执行 default 后的语句。case 语句使用过程中的注意事项语句使用过程中的注意事项 在 case 后的各常量表达式的值不能相同,否则会出现同一个条件有多种执行方案的矛盾。 在 case 语句后,允许有多个语句,可以不用括起来。例如: case 0: RB0=0; RB1=0;break; case 和 default 语句的先后顺序可以改变,不会影响程序的执行结果。 “case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行, 但在执行完该标号的语句后,不会自动跳出整个 switch 语句,加 break 语句,使得执行完该 case 语 句后可以跳出整个 switch 语句的执行。 default 语句是在不满足 case 语句情况下的一个默认执行语句。如 default 语句后面是空 语句,表示不做任何处理,可以省略。4循环语句循环语句在结构化程序设计中,循环程序结构是一种很重要的程序结构,几乎所有的应用程序都包含循 环结构。循环程序的作用是:对给定的条件进行判断,当给定的条件成立时,重复执行给定的程序 段,直到条件不成立时为止。给定的条件称为循环条件,需要重复执行的程序段称为循环体。#*Y表达式语句组N Y前面介绍的函数中使用了 for 循环,其循环体为空语句,用来消耗 CPU 时间来产生延时效果, 这种延时方法称为软件延时。软件延时的缺点是占用 CPU 时间,使得 CPU 在延时过程中不能做其 他事情。解决的方法是使用单片机中的硬件定时器实现延时功能。 在 C 语言中,可以用下面三个语句来实现循环程序结构:while 语句、do-while 语句和 for 语句, 下面分别对它们加以介绍。(1)while 语句语句while 语句用来实现“当型”循环结构,即当条件为“真”时, 就执行循环体。while 语句的一般形式为: while(表达式) 语句组;/循环体 其中, “表达式”通常是逻辑表达式或关系表达式,为循环条 件, “语句组”是循环体,即被重复执行的程序段。该语句的执行 过程是:首先计算机“表达式”的值勤,当值为“真” (即非 0) 时,执行循环体“语句组” ,流程图如 1-2-10 所示。 图 1-2-10 while 语句 流程 在循环程序设计中,要特别注意循环的边界问题,即循环的初值和终值要非常明确。例如:下 面的程序段是求整数 1100 的累加和,变是 i 的取值范围为 1100,所以,初值没有为 1,while 语 句的条件为“i100) break; sum=sum+i; 如果省略第三个表达式“修改循环变量” ,可及循环体语句组中加入修改循环控制变量的语句, 保证程序能够正常结束。例如:int i,sum=0; for( i=1;i10) break;/判断条件是满足,如果满足则退出循环

    注意事项

    本文(PI-C单片机C语言学习入门实例.doc)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开