1、,培训内容,第一部分:C语言基础 1、C51特点 2、C51开发环境安装与简介 3、C语言基本语法 4、编程风格 第二部分:常用接口模块编程 1、键盘接口 2、数码管显示 3、温度传感器18B20使用 4、LCD1602使用 5、时钟芯片1302使用与编程,C51知识,C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。目前,使用C语言进行程序设计已经成为软件开发的一个主流。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。,C语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都用C语言编程,如:各种单片机、DSP、ARM等. C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。 C提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。,C-51的特点,C-51与ASM-51相比,有如下优点: 1. 对单片机的指令系统不要求了解,仅要求对8051 的存贮器结构有初步了解; 2. 寄存器分配、
2、不同存贮器的寻址及数据类型等细节可由编译器管理; 3. 程序有规范的结构,可分成不同的函数,这种方式可使程序结构化; 4. 提供的库包含许多标准子程序,具有较强的数据处理能力; 5. 由于具有方便的模块化编程技术,使已编好程序可容易地移植;,汇编语言与C语言对比举例 (1),1、在一个C语序中必须有一个void main()函数,此函数是整个程序的入口,函数体由括起。 2、C语言中的大小写是敏感的。 3、C程序是由语句构成,一个语句必须由“;”号结束。 4、#include命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。:系统路径查找 “”:源文件路径查找 通常有:reg51.h reg52.h math.h stdio.h 常用有:reg51.h reg52.h(定义特殊功能寄存器和位寄存器),基本C程序结构,C语言基础知识,下面我们开始学习C语言基本知识,一、常量 常量是在程序运行过程中不能改变值的量 常量表示: 1 整型常量十进制表示如123,0,89等。十六进制表示则以0x开头如0x34,-0x3B等。 2 浮点型常量。十
3、进制由数字和小数点组成,如0.888,3345.345,0.0等, 3 字符型常量是单引号内的字符,如a,d等, 4 字符串型常量由双引号内的字符组成,如“test“,“OK“等。,二、变量 程序执行过程中其值能不断变化的量,放在RAM中。 例如你要对P1.1口输入的脉冲进行计数,就需要一个地方存这个数。 1、定义一个普通变量的格式如下: 数据类型 变量名表 例如:unsigned int a,b,c; 变量名,只能以字母或下划线开头,由字符组成,不能与关键字重名。 常见的数据类型:,C语言基础知识,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(signed) int,16,-3276832767,(signed) short,16,-3276832767,(signed) long,32,-21474836482147483647,16,unsigned int,065535,32,04294967295,unsigned long int,unsigned short int,16,065535,有,float,32,3.4e-383.4e38,有,do
4、uble,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,举例说明 2,C关键字(保留),2、定义一个特殊功能寄存器变量的格式如下: sfr 特殊功能寄存器名= 特殊功能寄存器地址常数; 例如:sfr P0 = 0x80; 3、定义一个可位寻址对象变量的格式如下: sbit 位变量名位地址 例如:sbit P0.0 = 0x80; sbit P0.0 = P00; 举例说明作用 4、位变量定义 bit 位变量名,三、运算符 1、赋值运算符 赋值运算符就是赋值符号“=” 2、算术运算符 加法运算符 减法运算符 乘法运算符 除法运算符 模运算或取余运算符 为自增运算符 为自减运算符。,3、复合赋值运算符 , , 例如: a+=b 等价于a=(a+b) x*=a+b 等价于x=(x*(a+b) 4、位运算符 & 按位与 相当于ANL指令 | 按位或 相当于ORL指令 按位异或 相当于XRL指令 按位取反 相当于CPL指令 右移 相当于RR指令,按位与 (&),运算规则 0 用途 按位清零 保留某些指定位,按位与举例,运算举
5、例 1010,1101 (0xAD) & 0110,1001 (0x69) 0010,1001 (0x29) 按位清零、其他位不变 xxxx,xxxx_ & 0110,0010 (0x62) 0xx0,00x0_,按位或 (|),运算规则 0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1; 用法 按位置一,按位或举例,运算举例 1010,1101 (0xAD) | 0110,1001 (0x69) 1110,1101 (0xED) 按位置一 xxxx,xxxx_ | 0110,0010 (0x62) x11x,xx1x_,按位异或 (),运算规则 0 0 = 0; 0 1 = 1; 1 0 = 1; 1 1 = 0; 说明 相“异”则为1,相“同”则为0 相当于按位且无进位的加法,按位异或用法举例,特定位翻转 1010,1101 (0xAD) 0110,1001 (0x69) 1100,0100 (0xC4) 与0相异或,保持原值不变。 与1相异或,翻转其值。(翻转特定位) 与自身相异或,则全部位清零 交换两个整数值 a=ab; b=ba; a=ab
6、;,按位取反 (),运算规则 0 = 1; 1 = 0; 用法 所有位翻转,按位取反举例,运算举例 1010,1101 (0xAD) 0101,0010 (0x52) 所有位翻转,左移 (),运算规则 i n 把i各位全部向左移动n位 最左端的n位被移出丢弃 最右端的n位用0补齐 用法 若没有溢出,则左移n位相当于乘上2n 运算速度比真正的乘法和幂运算快得多,左移举例,运算举例 1010,1101 3 (101)0110,1000_ 溢出举例 若左移后的数据超出表示范围,则发生溢出 int i, j; i = 0x2431; j = i2; /* j=-0x6F3C, 溢出 */ j = i3; /* j= 0x2188, 溢出 */,右移 (),运算规则 i n 把i各位全部向右移动n位 最右端的n位被移出丢弃 最左端的n位用0补齐(逻辑右移) 或最左端的n位用符号位补齐(算术右移) 用法 右移n位相当于除以2n,并舍去小数部分 运算速度比真正的除法和幂运算快得多,右移举例,运算举例 0101,1101 3 0000,1011(101),5、关系运算符 小于 小于等于 大于 大于等于
7、 等于 ! 不等于,实例分析,6、逻辑运算符 & 逻辑与 | 逻辑或 ! 逻辑非,实例分析,四、程序流程控制 1、顺序结构 依次执行的语句。 2、选择语句 (1)、if语句 以下三种形式: if(表达式)语句; if(表达式)语句1; else 语句2;,嵌套使用: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句 n;,三种形式的简明示意图,例1: if (p1!=0) c=20; 例2: if (p1!=0) c=20; else c=0; 例3: if (a=1) c=10; else if (a=2) c=20; else if (a=3) c=30; else if (a=4) c=40; else c=0;,if语句中注意的问题,if关键字之后的表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至可以是一个变量。 例如:if(a=5);if(b)语句;都是允许的。只要表达式的值为非0,即为“真”,那么其后的语句就要执行。在if语句中,条件判断
8、表达式必须用括号括起来,在语句之后必须加分号。 在if语句的3种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在“”之后不能再加分号。,上机练习: 根据按键亮灯,当按下一个铵键后,灯亮,松开后,灯灭。,(2)、switch/case语句 switch/case语句的一般形式如下: switch(表达式) case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; case 常量表达式n:语句n; break; default :语句n+1; break语句又称间断语句,它的功能是终止当前语句的执行,使程序跳出switch语句。,switch语句说明,(1)switch括号后面的表达式,允许为任何类型。 (2)当“表达式”的值与某个case后面的常量表达式的值相等时,就执行此case后面的语句。如果表达式的值与所有常量表达式都不匹配,就执行default后面的语句(如果没有default就执行跳出switch,执行switch语句后面的语句)。 (3)各个常量表达式的值
9、必须互不相同,否则出现矛盾。 (4)各个case,default出现的顺序不影响执行结果。,(5)执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。此时,“case 常量表达式”只是起到语句标号的作用,并不在此处进行条件判断。在执行一个分支后,可以使用break语句使流程跳出switch结构,即终止switch语句的执行(最后一个分支可以不用break语句)。 (6)case后面如果有多条语句,不必用括起来。 (7)多个case可以共用一组执行语句。(注意break使用的位置),switch语句说明,switch 语句应用举例,#include #include extern serial_initial( ); void main( ) int a,b; serial_initial( ); printf(“please input b=”); scanf(“%d”, ,3、循环语句 许多问题的求解归结为重复执行的操作,比如数值计算中的方程迭代求根,非数值计算中的对象遍历。重复执行就是循环。重复工作是计算机特别擅长工作之一。 重复的动作是受控制的,比如满足一定条件继续做,一直做直到某个条件满足,做多少次结束。也就是说重复工作需要进行控制-循环控制。,(一) while语句(当型循环),注意事项,(1)while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。因此,如果表达式的值一开始就为“假”,那么循环体一次也不执行。 (2)当循环体为多个语句组成,必须用括起来,形成复合语句。 (3)在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。,while语句应用举例,例:利用while语句,编写程序计算1+2+3+100。 流
《单片机素材课件》由会员F****n分享,可在线阅读,更多相关《单片机素材课件》请在金锄头文库上搜索。