资源描述
单片机C语言基础C-51C-51与与ASM-51ASM-51相比,有如下优点:相比,有如下优点:1.1.对单片机的指令系统不要求了解,仅对单片机的指令系统不要求了解,仅要求对要求对8051 8051 的存贮器结构有初步了解;的存贮器结构有初步了解;2.2.寄存器分配、不同存贮器的寻址及数寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;据类型等细节可由编译器管理;3.3.程序有规范的结构,可分成不同的函程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;数,这种方式可使程序结构化;4.4.提供的库包含许多标准子程序,具有提供的库包含许多标准子程序,具有较强的数据处理能力;较强的数据处理能力;5.5.由于具有方便的模块化编程技术,使由于具有方便的模块化编程技术,使已编好程序可容易地移植;已编好程序可容易地移植;例子认识例子认识C程序程序#include sbit A5=P10 x04;int main(void)/用户代码 void delay_1s();return 0;void delay_1s()void delay_1s()/代码代码代码代码 一、主程序(程序入口)int main(void)/用户代码 return 0;注:1、C程序模块都是以“”开头“”结尾,程序为函数主函数、子函数 2、每一行必须有结束号“;”3、养成注释程序的习惯 “/”注释该行 “/*-段落-*/”注解一段二、头文件(编程预处理)#include 注:定义一些通用引脚及函数注:定义一些通用引脚及函数 三、自定义函数(子函数)常用、重复引用的功能集成可用任何文本编辑软件编写,最后保存扩展名为.C的程序源文件其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量应该先定义后使用。要区分变量名和变量值是两个不同的概念。a=3 变量3存储值存储单元地址a注:变量名a代表地址,编译系统自动分配,用户不可见0 x40一、一、C C5151的变量类型的变量类型1 1、基本数据类型、基本数据类型类型类型符号符号关键字关键字数的表示范围数的表示范围所占位数所占位数整整型型字字符符型型实实型型有有无无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned long intunsigned short int16065535有有float323.4e-383.4e38有有double641.7e-3081.7e308有有char8-128127无无unsigned char802552、变量类型的定义、变量类型的定义格式格式:变量类型变量类型 +变量名变量名例如:int a,b;/定义a,b为整型变更 long sheng1,sheng2;/长整型 Float c,d;/浮点(有小数)Double e,f;/双精度 char a ;/有符号字符型 Unsigned char b;无符号字符型 注:变量类型为规定的类型;变量的名称自由起,但通常要通俗,并要遵守如下规则c语言变量命名:数字、字母、下划线,都可以为变量命名。做为变量名的开头不能为数字,如 3a_是错的,而a_3或_a3是正确变量名不能为关键字,像ifelseprintf 等等都不能 标准C表1标准C表2C51扩展3 3、C C5151的数据类型扩充定义的数据类型扩充定义sfr:sfr:特殊功能寄存器声明特殊功能寄存器声明sfr16:sfrsfr16:sfr的的1616位数据声明位数据声明sbit:sbit:特殊功能位声明特殊功能位声明bitbit:位变量声明位变量声明1sfr 特殊功能寄存器。这也是C 51编译器的一种扩充数据类型,利用它可以访问8051单片机的所有内部特殊功能寄存器。sfr型数据占用一个内存单元,其取值范围0255。2sfr16 16位特殊功能寄存器。它占用两个内存单元,取值范围是065535。3sbit 可寻址位。这也是C51编译器的一种扩充数据类型,利用它可以访8051单片机内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。4.bit位标量。这是位标量。这是C51编译器的一种扩充数据类型,利用它可定义编译器的一种扩充数据类型,利用它可定义一个位标量,但一个位标量,但不能定义位指针,也不能定义位数组不能定义位指针,也不能定义位数组。例:例:sfr SCON=0X98;sfr SCON=0X98;sfr16 T2=0 xCC;sfr16 T2=0 xCC;sbit OV=PSW2 sbit OV=PSW24 4、数据类型修饰词、数据类型修饰词1)、data:固定指前面0 x00-0 x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小2)、code定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,对应的还有data是存入RAM的意思。例如:例如:例如:例如:char data char data a a;/a;/a变量存在上述变量存在上述变量存在上述变量存在上述RAMRAM中中中中 int data int data dispdisp;/disp;/disp变量存在上述变量存在上述变量存在上述变量存在上述RAMRAM中中中中例如:例如:例如:例如:uchar code yima=uchar code yima=/把数码管位数据(因为不变)写入把数码管位数据(因为不变)写入把数码管位数据(因为不变)写入把数码管位数据(因为不变)写入ROMROM0 xeb,0 x88,0 xb3,0 xba,0 xd8,0 x7a,0 x7b,0 xa8,0 xfb,0 xfa;0 xeb,0 x88,0 xb3,0 xba,0 xd8,0 x7a,0 x7b,0 xa8,0 xfb,0 xfa;4 4、数据类型修饰词、数据类型修饰词3)、4 4、数据类型修饰词、数据类型修饰词4)、5、变量的赋值 int a,b;/定义a,b为整型变量 long sheng1,sheng2;/长整型 float c,d;/浮点(有小数)double e,f;/双精度 char g ;/有符号字符型 Unsigned char h;无符号字符型定义赋值a12;a=0 xff;a=0 x00;b=0;b=08;b=03;C=0.214;c=-0.36 ;d=12e3;e=12e-12;g=10;G=A;h=200;注:A为字符常量,为该字符的ASCII代码附C-51C-51的包含的头文件的包含的头文件通常有通常有:reg51.h reg52.h math.h ctype.h reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.hstdio.h stdlib.h absacc.h常用有常用有:reg51.h reg52.hreg51.h reg52.h (定义特殊功能寄存器和位寄存器);(定义特殊功能寄存器和位寄存器);math.h math.h (定义常用数学运算);(定义常用数学运算);二、二、C-51C-51的运算符的运算符1 1、算术运算符、算术运算符+-*/+-*/%(加(加 减减 乘乘 除除 求余求余 )说明:说明:+:自加运算符:自加运算符 自减运算符自减运算符2.2.逻辑运算逻辑运算将将两个布尔两个布尔两个布尔两个布尔量量量量进行运算,进行运算,结果为只有结果为只有0 0或或或或1 1的布尔量的布尔量的布尔量的布尔量3.3.关系运算关系运算运算结果运算结果只有只有0 0或或或或1 1的布尔量的布尔量的布尔量的布尔量4.4.位运算位运算位操作,结果还结果还结果还结果还是一个数是一个数是一个数是一个数,注意与逻辑运算的区别1)2).3).4)、5)、二、二、C-51C-51流程控制流程控制 与标准与标准C C语言基本相同:语言基本相同:if if 选择语言选择语言 switch/case switch/case 多分支选择语言多分支选择语言 while while 循环语言循环语言 for for 循环语言循环语言 do-while do-while 循环语言循环语言 1 1、if if 条件选择语句条件选择语句1)、单分支语句 int a,b,max;max=a;if(maxb)max=a;else max=b;3)、多分支语句依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n+1。然后继续执行后续程序。int a=10;If(a0&a=2&a-5&a=8&a0)delay1s();P0=P0;i-;main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);4、for语句语句格式格式for(表达式1;表达式2;表达式3)语句作用:作用:循环循环执行一段代码执行一段代码它的执行过程如下:1)先求解表达式1。2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。3)求解表达式3。4)转回上面第2)步继续执行。5)循环结束,执行for语句下面的一个语句Sum=0;for(i=1;i0;i-)/空语句,想想这段代码有什么用空语句,想想这段代码有什么用 附:for循环的嵌套main()int i,j,k;for(i=0;i2;i+)for(j=0;j2;j+)for(k=0;k2;k+)printf(“%d%d%dn,i,j,k);、do-while语句语句形式为形式为:do 语句 while(表达式)作用:作用:循环循环执行一段代码执行一段代码这个循环与这个循环与while循环的不同在于循环的不同在于:它先执行循环中它先执行循环中的语句的语句,然后再判断表达式是否为真然后再判断表达式是否为真,如果为真则继如果为真则继续循环;如果为假续循环;如果为假,则终止循环。因此则终止循环。因此,do-while循循环至少要执行一次循环语句环至少要执行一次循环语句main()int i,sum=0;i=1;do sum=sum+i;i+;while(i5?1:0;Y输出什么值?7、循环体的退出、循环体的退出(一)、(一)、break语句语句、当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句、当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。(二)、(二)、continue语句语句continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环此课件下载可自行编辑修改,仅供参考!此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢感谢您的支持,我们努力做得更好!谢谢
展开阅读全文