![《单片机应用技术》课件项目二 流水灯系统设计_第1页](http://file4.renrendoc.com/view12/M00/05/17/wKhkGWZQio-AFstxAABKgg7RpjY436.jpg)
![《单片机应用技术》课件项目二 流水灯系统设计_第2页](http://file4.renrendoc.com/view12/M00/05/17/wKhkGWZQio-AFstxAABKgg7RpjY4362.jpg)
![《单片机应用技术》课件项目二 流水灯系统设计_第3页](http://file4.renrendoc.com/view12/M00/05/17/wKhkGWZQio-AFstxAABKgg7RpjY4363.jpg)
![《单片机应用技术》课件项目二 流水灯系统设计_第4页](http://file4.renrendoc.com/view12/M00/05/17/wKhkGWZQio-AFstxAABKgg7RpjY4364.jpg)
![《单片机应用技术》课件项目二 流水灯系统设计_第5页](http://file4.renrendoc.com/view12/M00/05/17/wKhkGWZQio-AFstxAABKgg7RpjY4365.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机应用技术
项目二流水灯系统设计2.1单片机的C语言2.2C51的数据与运算2.3C51流程控制语句2.4C语言的函数2.5数组的概念2.1单片机的C语言1.C语言的特点结构化语言丰富的数据类型便于维护管理与汇编语言相比,C语言的优点如下:不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构;寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;结构清晰,程序可读性强;编译器提供了很多标准库函数,具有较强的数据处理能力。2.C语言的结构
C语言程序以函数形式组织程序结构,C程序中的函数与其他语言中所描述的“子程序”或“过程”的概念是一样的。C程序基本结构2.1单片机的C语言一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也可以一行书写多条语句。2.1单片机的C语言分隔符为分号2.2C语言数据与运算1.C51的数据与数据类型2.常量与变量3.C51的数据存储类型与8051存储器结构4.8051特殊功能寄存器(SFR)及其C51定义5.位变量(BIT)及其C51定义6.C51运算符表达式及其规则一.数据与数据类型数据——具有一定格式的数字或数值叫做数据数据类型——数据的不同格式叫做数据类型
单片机编程中所使用的是C51语言,与ANSIC基本相同,只是在某些方面进行了扩展。简单的说,C51语言是在ANSIC标准的基础上扩展了数据类型和关键字。C51编译器中int和short相同,float和double相同。
在ANSIC标准C语言中基本的数据类型为char、int、short、long、float和double,2.2C语言数据与运算KEILuVision2C51编译器所支持的数据类型数据类型长
度值
域unsigned
char单字节0~255signed
char单字节-128~+127unsigned
int双字节0~65535signed
int双字节-32768~+32767unsigned
long四字节0~4294967295signed
long四字节-2147483648~+2147483647float四字节±1.175494E-38~±3.402823E+38*1~3字节对象的地址bit位0或1sfr单字节0~255sfr16双字节0~65535sbit位0或1。默认值为signed类型2.2C语言数据与运算C-51的数据类型扩充定义sfr:特殊功能寄存器声明sfr16:sfr的16位数据声明sbit:特殊功能位声明bit:位变量声明2.2C语言数据与运算1.sfr特殊功能寄存器sfr是一种扩充数据类型,占用一个内存单元(1个字节),值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。sfr特殊功能寄存器名=特殊功能寄存器地址常数;sfrP0=0x80;sfrIE=0xA8H;#include<AT89X51.h>2.2C语言数据与运算2.sfr1616位特殊功能寄存器sfr16占用两个内存单元,值域为0~65535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器。sfr16特殊功能寄存器名=特殊功能寄存器地址常数;
用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。sfr16T2=0xCC;2.2C语言数据与运算sbit也是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。3.sbit可寻址位(1)sbit位变量名=位地址
sbitP1_1=0x91;
这样是把位的绝对地址赋给位变量。同sfr一样sbit的位地址必须位于80H-FFH之间。
(2)sbit位变量名=特殊功能寄存器名^位位置
sfrP1=0x90;
sbitP1_1=P1^1;//先定义一个特殊功能寄存器名再指定位变量名所在的位置。当可寻址位位于特殊功能寄存器中时可采用这种方法,例如sbitOV=PSW^2;
(3)sbit位变量名=字节地址^位位置
sbitP1_1=0x90^1;2.2C语言数据与运算二.常量与变量常量是在程序运行过程中不能改变值的量,如固定的数据表,字库等。1.常量(1)整型常量可以表示为十进制如123,0,-89等。十六进制则以0x开头如0x34,-0x3B等。(2)浮点型常量可分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,3345.345,0.0等。(3)字符型常量是单引号内的字符,如‘A',‘B'等(4)字符串型常量由双引号内的字符组成,如“TEST","OK"等。(5)位标量,它的值是一个二进制。常量的数据类型只有整型、浮点型、字符型、字符串型和位型。2.2C语言数据与运算常量定义的几种方式#defineFalse0x0
#defineTrue0x1//这里定义False为0,True为1
在程序中用到False编译时自动用0替换,同理True替换为1(1)用预定义语句可以定义常量unsigned
int
code
a=100;
//这一句用code把a定义在程序存储器中并赋值(2)用code定义2.2C语言数据与运算const
unsigned
int
c=100;
//用const定义c为无符号int常量并赋值。(3)用const定义
以上2,3两句它们的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的。2.2C语言数据与运算2.变量
变量就是一种在程序执行过程中其值能不断变化的量。变量的定义能使用所有c51编译器支持的数据类型。定义一个变量的格式
[存储种类]
数据类型
[存储器类型]
变量名表
data
unsignedchar
small
a;2.2C语言数据与运算存储器类型说明Data(00H-7FH)直接访问内部数据存储器(128字节),访问速度最快Bdata(20H-2FH)可位寻址内部数据存储器(16字节),允许位与字节混合访问xdata外部数据存储器(64KB),用MOVX@DPTR指令访问code程序存储器(64KB),用MOVC@A+DPTR指令访问
数据类型和变量名表是必要的,其它都是可选项。
unsignedchar
a;2.2C语言数据与运算三.C51的数据存储类型与8051存储器结构1.C51的数据存储类型类型关键字长度/bit说明data8直接访问内部数据存储器(128字节),访问速度最快bdata1可位寻址内部数据存储器(16字节),允许位与字节混合访问idata8间接寻址片内数据存储器,可访问片内全部RAM地址空间(256字节)pdata8分页寻址片外数据存储区(256字节),由MOVX@R0访问xdata16外部数据存储器(64KB),用MOVX@DPTR指令访问code16程序存储器(64KB),用MOVC@A+DPTR指令访问单片机存储类型及与8051存储空间的对应关系2.2C语言数据与运算变量的存储类型定义举例:chardatapulse;//data存储类型,该变量被定位在8051片内数据存储区
中(地址:00H~07H)。bitbdataflag;//bdata存储类型,该变量被定位在8051片内数据存储
区中的可位寻址区(地址:20H~2FH)。floatidatax,y,z;//idata存储类型,该变量被定位在8051片内数据存
储区,并只能用间接寻址的方法进行访问。unsignedintpdatalength;//pdata存储类型,该变量被定位在片外数据存储区,并用操作码MOVX@Ri访问。unsignedcharxdataparameter[8][3][5];//xdata存储类型,该变量被定位在片外数据存储区,并占据8×3×5=120字节存储空间。2.2C语言数据与运算存储模式说明SMALL该模式与采用data存储类型方式相同,参数及局部变量放入可直接寻址的片内存储器(最大128字节),访问速度快、效率高。所有对象包括堆栈,都必须嵌入片内RAM。栈长很关键,因为实际栈长依赖于不同函数的嵌套层数。COMPACT该模式默认的存储类型是PDATA,参数及局部变量放入分页片外存储区(最大256字节),通过寄存器R0和R1(@R0,@R1)间接寻址,栈空间位于8051系统内部数据存储区中。LARGE该模式默认的存储类型是XDATA,参数及局部变量直接放入片外数据存储区(最大64KB),使用数据指针DPTR来进行寻址。用此数据指针进行访问效率较低,尤其是对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度。另一不方便之处在于这种数据指针不能对称操作。存储模式及说明2.2C语言数据与运算
运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为:单目运算符,双目运算符和三目运算符。
表达式则是由运算及运算对象所组成的具有特定含义的式子。
C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。
四.C51运算符表达式及其规则2.2C语言数据与运算
其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符。+加或取正值运算符
-减或取负值运算符
*乘运算符
/除运算符
%取余运算符表达式1算术运算符表达式21.算术运算符及其表达式(1)算术运算符(2)算术表达式2.2C语言数据与运算(3)优先级和结合性:
算术运算符的优先级:先乘除模,后加减,括号最优先算术运算符的结合性:自左至右方向2.赋值运算符变量
=
表达式;
a
=
0xFF;
//将常数十六进制数FF赋于变量ab
=
c
=
33;
//同时赋值给变量b,cd
=
e;
//将变量e的值赋于变量df
=
a+b;
//将变量a+b的值赋于变量f2.2C语言数据与运算3.增减量运算符++
增量运算符--
减量运算符作用就是对运算对象作加1和减1运算。注意:运算对象在符号前或后,其含义都是不一样的,虽然同是加1或减1。如:I++,++I,I--,--I。I++(或I--)
是先使用I的值,再执行I+1(或I-1)++I(或--I)
是先执行I+1(或I-1),再使用I的值。增减量运算符只允许用于变量的运算中,不能用于常数或表达式。2.2C语言数据与运算4.关系运算符及其表达式
>
大于<
小于>=
大于等于<=
小于等于==
等于!=
等于
前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后2个的。(1)关系运算符2.2C语言数据与运算表达式1
关系运算符
表达式2(2)关系表达式
用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式。关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。
例如:
(1)关系表达式“8==4”的值为
,表达式的值为
。
(2)关系表达式“5>0”的值为
,表达式的值为
。
2.2C语言数据与运算5.逻辑运算符及其表达式逻辑与&&
:条件式1
&&
条件式2逻辑或
||
:条件式1
||
条件式2逻辑非
!:
!
条件式2逻辑与:当条件式1“与”条件式2都为真时结果为真(非0值),不然为假(0值)。逻辑或:是指只要二个运算条件中有一个为真时,运算结果就为真,只有当条件式都不为真时,逻辑运算结果才为假逻辑非则是把逻辑运算结果值取反优先级:!(逻辑非)→&&(逻辑与)→||(逻辑或),逻辑非的优先值最高。运算结果只有0和1。2.2C语言数据与运算6.位操作及其表达式变量1
位运算符
变量2优先级从高到低依次是:“~”(按位取反)→“<<”(左移)
→“>>”(右移)
→“&”(按位与)→“^”(按位异或)→“|”(按位或)&按位与|按位或^按位异或
~按位取反<<左移>>右移2.2C语言数据与运算例:若a=1100,0011B=0xc3,将a的值右循环两位main(){ unsignedchara=0xc3,b,c; intn=2; b=a<<(8-n) c=a>>n; a=c|b;}2.2C语言数据与运算7.复合赋值运算符复合赋值运算符就是在赋值运算符“=”的前面加上其他运算符。+=加法赋值>>=右移位赋值-=减法赋值&=逻辑与赋值*=乘法赋值|=逻辑或赋值/=除法赋值^=逻辑异或赋值%=
取模赋值
-=
逻辑非赋值<<=
左移位赋值变量
复合赋值运算符
表达式含义就是变量与表达式先进行运算符所要求的运算,再把运算结果赋值给参与运算的变量。i+=2等价于i=i+2a*=b+5等价于a=a*(b+5)x%=3等价于x=x%32.2C语言数据与运算1)变量赋值时发生的隐式转换,“=”号右边的表达式的数据类型转换成左边变量的数据类型。8.强制类型转换运算符voidmain(void){ unsignedchara; unsignedintb; while(1) { b=100*4; a=b; }}把INT赋值给CHAR字符型变量,得到的CHAR将会是INT的低8位。如把浮点数赋值给整型变量,小数部分将丢失。2.2C语言数据与运算2)所有char型的操作数转换成int型。3)两个具有不一样数据类型的操作数用运算符连接时,隐式转换会按以下次序进行:如有一操作数是float类型,则另一个操作数也会转换成float类型;如果一个操作数为long类型,另一个也转换成long;如果一个操作数是unsigned类型,则另一个操作会被转换成unsigned类型。单片机c语言中只有char,int,long及float这几种基本的数据类型能被隐式转换。而其它的数据类型就只能用到显示转换。强制转换运算符应遵循以下的表达形式:(类型)
表达式2.2C语言数据与运算编程1:点亮P1.0处的小灯LED。思考:点亮P1口的8盏小灯2.2C语言数据与运算编程2:使P1.0处的小灯LED以周期是2S的时间闪烁。2.2C语言数据与运算编程3:8盏小灯L1~L8依次接在P1口的8个引脚上,开始时L1→L2→L3→L4→┅→L8→L1→┅→L8亮,重复循环。2.2C语言数据与运算编程4:8盏小灯L1~L8依次接在P1口的8个引脚上,开始时L1→L2→L3→L4→┅→L8→L7→L6┅→L1→L2→┅亮,重复循环。2.3C语言的基本语句C语言程序的执行部分由语句组成。C语言提供了丰富的程序控制语句,按照结构化程序设计的基本结构:顺序结构、选择结构和循环结构,组成各种复杂程序。这些语句主要包括表达式语句、复合语句、选择语句和循环语句等。1.表达式语句和复合语句表达式语句是最基本的C语言语句。表达式语句由表达式加上分号“;”组成,其一般形式如下:
表达式;执行表达式语句就是计算表达式的值。在C语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生的场合。2.3C语言的基本语句把多个语句用大括号{}括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。复合语句在程序运行时,{}中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。2.3C语言的基本语句2.选择语句基本if语句的格式如下:if(表达式){
语句组;
}if语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组”,否则跳过该语句组,继续执行下面的语句。
2.3C语言的基本语句if语句中的“表达式”通常为逻辑表达式或关系表达式,也可以是任何其他的表达式或类型数据,只要表达式的值非0即为“真”。以下语句都是合法的:
if(3){……}if(x=8){……}if(P3_0){……}在if语句中,“表达式”必须用括号括起来。在if语句中,花括号“{}”里面的语句组如果只有一条语句,可以省略花括号。如“if(P3_0==0)P1_0=0;”语句,但是为了提高程序的可读性和防止程序书写错误,建议读者在任何情况下,都加上花括号。2.3C语言的基本语句if-else语句的一般格式如下:if(表达式) {
语句组1;
} else{
语句组2;
}if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组1”,否则执行“语句组2”2.3C语言的基本语句if-else-if语句是由ifelse语句组成的嵌套,用来实现多个条件分支的选择,其一般格式如下:if(表达式1) {
语句组1;
} elseif(表达式2){
语句组2;
} …elseif(表达式n){
语句组n;
}else{
语句组n+1;
}2.3C语言的基本语句2.3C语言的基本语句多分支选择的switch语句,其一般形式如下:
switch(表达式){ case常量表达式1:语句组1;break; case常量表达式2:语句组2;break; …… case常量表达式n:语句组n;break; default:语句组n+1;}该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同,则执行default后的语句组。2.3C语言的基本语句while语句用来实现“当型”循环,执行过程:首先判断表达式,当表达式的值为真(非0)时,反复执行循环体。为假(0)时执行循环体外面的语句。循环体循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组while执行过程格式:while(循环继续的条件表达式)
{语句组;}花括号不能丢掉!请问:下述程序实现了什么功能?main(){inti,sum=0;while(i<=10){sum=sum+i;i++;}}3.循环语句2.3C语言的基本语句do-while语句用来实现“直到型”循环执行过程:先无条件执行一次循环体,然后判断条件表达式,当表达式的值为真(非0)时,返回执行循环体直到条件表达式为假(0)为止。绝对不能少分号!循环体格式:do{
循环体语句组;
}while(循环继续条件);花括号不能丢掉!循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组请问:下述程序实现了什么功能?main(){inti,sum=0;do{sum=sum+i;i++;}while(i<=100);}2.3C语言的基本语句总循环次数已确定的情况下,可采用for语句形式为:for语句的一般形式:
for(循环变量赋初值;循环继续条件;循环变量增值)
{
循环体语句组;
} 分隔符为分号请问:下述程序实现了什么功能?main(){inti,y=0;for(i=1;i<=10;i++){y=y+i;}}2.3C语言的基本语句循环继续条件for的下一条语句非0(真)0(假)循环体语句组循环变量赋初值循环变量增值for语句循环执行过程只求解一次要执行若干次,具体次数由“循环继续条件”决定for(循环变量赋初值;循环继续条件;循环变量增值)
{循环体语句组;} for语句不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定,但给出了循环继续条件的情况,它完全可以代替while语句和do-while语句。2.3C语言的基本语句2.4C语言的函数1.函数分类标准库函数用户自定义函数
while语句实现While(表达式)
{语句(内部可为空)}
特点:先判断表达式,后执行语句。
原则:若表达式非0,即为真,那么执行语句。否则跳出while语句。2.4C语言的函数2.延时函数的编写#include<reg51.h>Sbitp10=P1^0;Main(){unsignedinta;a=50000;p10=0;while(a--);a=50000;p10=1;while(a--);}1.软件仿真看延时时间2.更改a的值超过值域范围看看a的值2.4C语言的函数for语句实现For(表达式1;表达式2;表达式3)
{语句(内部可为空)}
执行过程:
1.求解一次表达式1.
2.求解表达式2,若其值为真(非0即为真),则执行for中语句。然后执行第3步。否则结束for语句,直接跳出,不再执行第3步。
3.求解表达式3.
4.跳到第2步重复执行。2.4C语言的函数delay函数Voiddelay(){for(b=500;b>0;b--){for(c=200;c>0;c--);}}1.软件仿真看时间2.子程序的位置main前main后(声明)3.充分利用stepstepover看程序运行情况看变量带参的delay子函数Voiddelay(unsignedcharx){for(b=500;b>0;b--){for(c=200;c>0;c--);}}1.子函数声明2.带参的好处看实参到形参传递2.4C语言的函数蜂鸣器响2.4C语言的函数3.简单程序的编写Sbitbeep=P2^1;Beep=0;如图所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。例1模拟开关灯2.4C语言的函数如图所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。例题2多路开关状态指示2.4C语言的函数做单一灯的左移右移,硬件电路如图所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。例题3:广告灯的左移右移2.4C语言的函数1.第一盏灯亮第一二亮到全亮2.移位子程序编写(P75)temp=0xfe;P1=temp;delay();for(i=1;i<8;i++){a=temp<<i;b=temp>>(8-i);P1=a|b;delay();}P1=0XFE;P1=P1<<1|0X01;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024秋七年级英语上册 Unit 4 Food and Restaurants Lesson 23 The Corner Store说课稿 (新版)冀教版
- 《6的乘法口诀》(说课稿)-2024-2025学年二年级上册数学青岛版
- 2023三年级英语下册 Unit 2 I'm in Class One Grade Three Lesson 7说课稿 人教精通版(三起)
- 《2 我们的课余生活》(说课稿)-2023-2024学年四年级上册综合实践活动吉美版001
- Unit 2 Different Families 第1课时(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 60米短跑 说课稿-2023-2024学年高三上学期体育与健康人教版必修第一册
- 2025关于质押反担保合同
- Unit 2 Healthy Lifestyle Using language Listening and Speaking 说课稿-2023-2024学年高中英语人教版(2019)选择性必修第三册
- 长沙打包箱房施工方案
- 2024-2025学年高中历史 第五单元 无产阶级革命家 第2课 无产阶级革命导师恩格斯教学说课稿 新人教版选修4
- 心电监护考核标准
- 特种行业许可证申请表
- 古典芭蕾:基本技巧和术语
- 有限空间作业审批表
- 内地居民前往香港或者澳门定居申请表
- DB43-T 2612-2023林下竹荪栽培技术规程
- 三下《动物的一生》教材解读
- 神木市孙家岔镇神能乾安煤矿矿山地质环境保护与土地复垦方案
- 非煤矿山安全应急预案
- 浙江省公安民警心理测验考试题目
- 一图看懂《诊所备案管理暂行办法》学习解读课件
评论
0/150
提交评论