版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章C51编程设计及应用实例3.1C51程序设计基础3.2软件延时3.3流水灯程序主要内容:本章教学计划:
理论+实践教学12学时本章教学重点:掌握C51程序设计基础掌握软件延时方法掌握流水灯控制程序3.1.1进制转换
二进制、十进制和十六进制十进制 二进制 十六进制0 0b0000 0x01 0b0001 0x12 0b0010 0x23 0b0011 0x34 0b0100 0x4…… …… ……9 0b1001 0x910
0b1010 0xA11 0b1011 0xB12 0b1100 0xC13 0b1101 0xD14 0b1110 0xE15 0b1111 0xF16 0b00010000 0x1017
0b00010001 0x11…… …… ……3.1C51程序设计基础1)C语言的数据类型及范围(P25)3.1.2数据与运算符数据2)C51语言的数据类型及范围(P25)3)常量常量分为有不同的类型:0、1、-5称为整型常量;3.14159、-12.34称为实型常量;‘a’、‘A’称为字符型常量常量的定义形式为#define常量名常量例如:#definePI3.14159定义:程序运行过程中,不能改变的量。常量名一般用大写3.1.2数据与运算符4)变量
位变量:bitb1,b2,b3;整型变量;inta,b;浮点型变量;floatx,y;字符型变量:charch1,ch2;定义:程序运行过程中,可以改变的量。变量分为有不同的类型,定义形式如下:缩写变量的数据类型#defineucharunsignedchar#defineuintunsignedint1)C51的优先级及结合方向优先级:当运算对象两侧都有运算符时,执行运算的先后次序。按运算符的高低来执行。例:先乘除、后加减。结合方向:一个运算对象两侧的运算符的优先级相同时的运算顺序。分左右结合两种。例:a+b+c-d左结合-(-(-5))右结合C语言基本运算符(P34)2)C51算术运算符及表达式C51的算术运算符有5种:+-*/%加法运算符或正值符号减法运算符或负值符号乘法运算符除法运算符求余运算符除法有两种:整除:两个运算对象为整数时;普通除法:两个运算对象中有一个为实数时。优先级:先乘除求余、后加减(小括号的优先级最高)结合方向:除正负号外,其它都是左结合算术表达式:由算术运算符连接起来的式子3)C51关系运算符及表达式C51的关系运算符有6种:<><=>===!=小于大于小于等于大于等于等于注意:等于和赋值不要混淆。关系运算符的结果是0或1优先级:<,>,<=,>=同优先级,==,!=同优先级,但前者高于后者结合方向:全部左结合不等于例如:若a=5,b=3,c=1则a>bb+c<ad=a>bf=a>b>c关系表达式:由关系运算符连接起来的式子4)C51逻辑运算符及表达式C51有三种逻辑运算符:!&&||逻辑非逻辑与逻辑或“!”是单目运算符,&&和||是双目运算符。逻辑表达式:用逻辑运算符连接起来的式子。优先级:!最高,&&次之,||最低。结合方向:!是右结合,&&和||是左结合。逻辑表达式的结果是“0”或“1”。Note:逻辑运算中,所有非0值都当作逻辑值“1”。例如:若a=4,b=5!aa||ba&&b!a&&b逻辑表达式的计算顺序当由多个逻辑运算符构成的逻辑表达式中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑表达式的值时,才执行该运算符。对逻辑与&&,只有当左边的表达式的不为0时,才继续往后运算,直到有一个为0为止或计算完毕为止。例:若a=1,b=2,c=3,d=4,m=1,n=1
表达式:(m=a>b)&&(n=c<d)
表达式:(m=a>b)||(n=c<d)对逻辑或||,只有当左边的表达式的不为1时,才继续往后运算,直到有一个为1为止或计算完毕为止。5)C51位操作及表达式C51提供了如下位操作运算符:
&按位与;|按位或;优先级高于逻辑运算符^按位异或;~接位取反:优先级次于!<<位左移;>>位右移;除了按位取反运算符~以外,以上位操作运算符都是两目运算符,即要求运算符两侧各有一个运算对象。注意:位运算符只能是整型或字符型数。不能为实型数据。优先级低于算术运算符5.1)按位反运算符~~是一个单目运算符,用来对一个二进制数按位进行取反,即0变1,1变0。例若a=F0H=11110000B则表达式:a=~a值为0F
即a:11110000
~00001111(0FH)~运算符的优先级比别的算术运算符、关系运算符和其它运算符都高。
例如~a&b的运算顺序为先作~a再作&运算。优先级次于!。5.2)按位与运算符&
运算规则:参加运算的两个运算对象,若两者相应的位都为1,则该位结果值为1,否则为0。即0&0=00&1=01&0=01&1=1例若a=54H=01010100Bb=3BH=00111011B则表达式:c=a&b的值为10H即a:01010100
b:&00111011c:=00010000(10H)5.2)按位与运算符&按位与&的作用:用作指定位的清零用法:指定位用0,其他位用1,该数与目标数进行按位与的运算(0的位置对应清零位置)例子:P1=P1&0xof的作用?P1=P1&0xof,即P1=(P1&00001111),结果是高四位清零原因:任意数和0进行&运算后为0,任意数和1进行&运算后该数不变5.2)按位与运算符&练习把端口P2的低四位置0把端口P3的前两位置0把端口P0的后两位置0把端口P0的各位间隔置05.3)按位或运算符|
运算规则:参加运算的两个运算对象,若两者相应的位中,只要有一个为1,则该侠结果为1。即0|0=00|1=11|0=11|1=1例若a=30H=00110000Bb=0FH=00001111B则表达式:c=a|b的值为3FH
即a:00110000
b:|0000111100111111(3FH)5.3)按位或运算符|按位或|的作用:用作指定位进行置1用法:指定位用1,其他位用0,该数与目标数进行按位或的运算(1的位置对应置1的位置)例子:P1=P1|0xof的作用?P1=P1|0xof,即P1=(P1|00001111),结果是低四位置1原因:任意数和1进行或运算后为1,任意数和0进行或运算后该数不变练习把端口P2的低四位置1把端口P3的前两位置1把端口P0的后两位置1把端口P0的各位间隔置15.4)异或运算符^运算规则:参加运算的两个运算对象,若两者相应的位值相同,则结果为0;若两者相应的位相异,则结果为1。即0^0=0
0^1=11^0=1
1^1=0例a=A5H=10100101b=37H=00110111则表达式:c=a^b的值为92H
即a:10100101
^b:0011011110010010(92H)特点:按位异或可以将指定位取反。5.4)异或运算符^按位异或^的作用:用作指定位进行取反用法:指定位用1,其他位用0,该数与目标数进行按位异或的运算(1的位置对应取反的位置)例子:P1=P1^0xof的作用?P1=P1^0xof,即P1=(P1^00001111),结果是低四位取反原因:任意数和1进行异或运算后结果取反,任意数和0进行异或运算后该数不变5.4)异或运算符^练习把端口P2的低四位取反把端口P3的前两位取反把端口P0的后两位取反把端口P0的各位间隔取反5.5)位左移和位右移运算符(<<,>>)
(优先级次于算术运算符)位左移、位右移运算符<<、>>,用来将一个数的各二进制位的全部左移或右移若干位,移位后,空白位补0,而溢出的位舍弃。例若a=EAH=11101010B则表达式:a=a<<2,将a值左移两位,其结果为A8H。(左边位舍弃,右边位补零)
表达式:a=a>>2,将a值右移两位,其结果为3AH。(右边位舍弃,左边位补零)循环左移和循环右移注意(P46)单片机中经常会用到循环左移和循环右移,只能用函数实现(使用时,程序中必须包含#include<intrins.h>一行)_crol_,_cror_;将char型变量循环左移、右移指定位数后返回_irol_,_iror_;将int型变量循环左移、右移指定位数后返回eg:LedTemp=_crol_(LedTemp,1);//循环左移eg:位移运算符的例子main(){unsignedchara=0xc3,b,c;intn=2;b=a<<(8-n);c=a>>n;a=c|b;}答案:b=0b11000000c=0b00110000a=0b11110000=0xF06)自增、自减运算符(++,--)
(优先级高于算术运算符)
作用是使变量的值增1或减1,如:++i,--i(在使用i之前,先使i的值加(减)1)如果i的原值为3a)j=++i;(i的值先变成4,再赋给j,j的值为4)
i++,i--(在使用i之后,使i的值加(减)1)b)j=i++;
(先将i的值3赋给j,j的值为3,然后i变为4)例2.1.2:写出程序运行的结果。
#include<stdio.h>voidmain(){
int
i,j,m,n;
i=8;j=10;
m=++i;n=j++;’
printf(“%d,%d,%d,%d\n”,i,j,m,n);}7)复合运算符凡是二目运算符都可以与赋值运算符“=”组合在一起,称为复合运算符。C51提供有10种符合赋值运算符:+=、-=、*=、/=、%=、&=、|=、^=、>>=、<<=例如:a=a+b可写为a+=ba=a<<3可写为a<<=3for语句
for(表达式1;表达式2;表达式3)
{语句1;语句2;
……
语句n;}
语句格式:循环体表达式1—
循环初始表达式,用于进入循环体前为循环变量赋初值由算术、赋值、逻辑和逗号表达式构成。表达式2
—
循环控制表达式,用于控制循环体语句的执行次数由关系表达式或逻辑表达式构成。表达式3
—
修改循环变量表达式,即每循环一次使得表达式1的值就要变化一次。由算术、赋值、逻辑或逗号表达式构成
语句功能:
当表达式2
的值为真时执行循环体中各语句。3.1.3for与while循环语句它的执行过程如下:
(1)
先求解表达式1。
(2)
求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。
(3)
求解表达式3。
(4)
转回上面第(2)步骤继续执行。
(5)
循环结束,执行for语句下面的一个语句。for语句的用法for语句的一般形式(用法1)for(表达式1;表达式2;表达式3){ (需要执行的语句);}例如:for(i=0;i<2;i++){j++}for语句的用法用法2:for(i=0;i<30000;i++);(延时)用法3:for(;;)(即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。死循环)while语句
先计算表达式的值并判断,若表达式值为“真”(即非零值),则执行循环体中的语句;然后再计算再判断,如此重复,直到表达式值为“假”(即0值)时,则跳出循环语句格式:
while(条件表达式){语句1;语句2;
……语句n;}
循环体语句功能:当条件表达式的值为真时重复执行循环体中各语句。
语句说明:条件表达式是关系表达式,逻辑表达式,赋值表达式
while语句的用法
(如果没有花括号的话,则while循环语句的范围只是到while后面的第一个分号处)函数的简单介绍函数定义的一般形式:函数值类型函数名(形式参数列表){函数体}1、函数值类型2、函数名3、形式参数列表4、函数体5、main函数(必须有且唯一)6、语句注释//3.1.4函数(P42)3.1.4函数(P42)函数的声明形式对应数学里的函数:自变量->参数因变量->返回值调用原则:函数可相互调用(main函数除外),但不能嵌套定义函数的执行顺序:从main函数进入,调用其他函数后,在main函数结束3.1.4函数(P42)函数的声明形式参数:形参:函数定义时的参数实参:使用时的参数返回值:默认为整型无返回值可加void3.1.4函数(P42)函数的声明形式函数调用:种类:本身的库函数以及自定义的函数被调用的函数放在前面(或在主函数前先定义,P42-43)变量作用域:全局变量:作用在程序文件里局部变量:作用在函数里3.1.4函数(P43)函数的声明形式变量生存期:全局变量:直到程序的退出局部变量:直到函数的退出3.1.5特殊功能寄存器的关键字sfr(P29)P25表2-3:对比C语言里的数据类型单片机特有的类型:bit,sbit,sfr,sfr163.1.5特殊功能寄存器的关键字sfr(P29)数据存储器存储结构的分析:(P23图2-8(b))0000-FFFFH为片外存储片外数据存储器利用P2,P0口作为地址总线(共16根)(AT89C51)片内数据存储:00H-7FH,80-FFH区间用于特殊功能寄存器SFR3.1.5特殊功能寄存器的关键字sfr(P29)00-7FH的片内数据存储器划分为3个区:00-1FH:通用寄存器区20-2FH:可位寻址区30-7FH:用户RAM区P24图2-9存储器区域的对应分析3.1.5特殊功能寄存器的关键字sfr(P29)SFR:用以控制定时器、计数器、串口、I/O口及其它部件。
特殊功能寄存器的名字,在C51程序中,全部大写。SFR的地址为80-FFH,容量为:15*16+15-8*16+1=128字节寻址方式:位寻址部分字节寻址字寻址AT89C51单片机的所有特殊功能寄存器及初值(见P30表2-7)例如:P0-P3的地址分别为80H,90H,A0H,B0H3.1.5特殊功能寄存器的关键字sfr(P31)操作和赋值方式:对寄存器地址对应的端口进行操作例子:把90H位置设置为FFH,参照表2-7,90H对应P1端口,即:让P1的8个端口全置1推广:1.将A0H置00H?2.将80H置aaH?3.将B0H置10H?3.1.5特殊功能寄存器的关键字sfr(P31)SFR的定义方式(P31)(三个关键字:sfr,sfr16和sbit)与P1的赋值语句不同:P1=0x90;:赋值sfrP1=0x90;:P1端口寄存器地址为90HSFR定义的为数值,‘=’后不能有计算表达式头文件(提供了特殊功能寄存器的定义)51单片机:#include<reg51.h>52单片机:#include<reg52.h>3.1.5特殊功能寄存器的关键字sfrSFR的定义方式(P31)sfr与sfr16的区别:sfr:8位数据访问sfr16:16位数据访问(字寻址)sfr16直接定义低8位地址,高8位续低8位地址例子:sfr16T2=0xcc表示(AT89C52中的定时器2)T2低8位地址:oxcc;T2高8位地址:oxcd;3.1.5特殊功能寄存器的关键字sfrSFR的定义方式(P31)具有位运算功能的SFR用‘sbit’定义定义方式:(比较P31-P32的三种定义方式)1.先基地址再子地址的方式:P31(1)2.直接基地址上的子地址:P32(2)3.地址直接赋值P32(3)实例:P32第一种方法:
sfrP1=0x80;sbitred=P1^0;sbityellow=P1^1;sbitgreen=P1^2;第二种方法:
sbitred=0x80^0;sbityellow=0x80^1;sbitgreen=0x80^2;第三种方法:
sbitred=0x80;sbityellow=0x81;sbitgreen=0x82;1、sbit的定义形式:3.1.5特殊功能寄存器的关键字sfr3.1.5特殊功能寄存器的关键字sfr定义位变量的bit和sbit的区别(1)bit不指定地址的话地址随机(片内RAM中位寻址区)sbit一般用于确定的地址,一般有基地址和‘^’的衍生位(P32的几个实例)(2)bit一般用于判断的标志位(类似bool类型)sbit一般用于SFR中可位寻址端口,否则要求变量存储器类型为‘bdata’(20H~2FH:可位寻址内部RAM区)3.1.5特殊功能寄存器的关键字sfr定义位变量的bit和sbit的区别bit类型(位变量)bit定义位变量,值为0或1作用(类似布尔变量)1.条件是/否的判断(如循环,分支语句)2.灯亮/暗,高/低电平灯实际量的表示3.1.5特殊功能寄存器的关键字sfr‘^’操作符的位位置的最大值char/uchar:8位,位位置的最大值:0-7int/uint/short/ushort:16位,位位置的最大值:0-15long/ulong:32位,位位置的最大值:0-31位位置的最大值的范围与取值范围的含义不同char位位置的最大值:0-7…….51单片机延时常用办法3.2软件延时for语句循环一次消耗8个机器周期的时间51单片机延时常用办法3.2软件延时几个常用概念:振荡周期:振荡源周期,由晶体本身决定;时钟周期:包含2个振荡周期,分别为:节拍P1:完成算术逻辑操作;节拍P2:完成寄存器之间的数据传输;机器周期:包含6个时钟周期包含的时钟周期:S1,S2,S3,S4,S5,S6包含的节拍(振荡周期):12个:S1P1,S1P2,…….,S6P1,S6P251单片机延时常用办法3.2软件延时机器周期:完成一条指令的时间,时间不确定,MCS-51单片机为1-4个机器周期(P17);相互关系:1机器周期=6时钟周期=12振荡周期;计算:当晶体频率为12MHz时,对应的振荡周期,时钟周期,机器周期分别是多少?(P17)/***************************************************/#include<reg52.h>//包含特殊功能寄存器定义的头文件#defineucharunsignedchar//预定义voiddelay(uchar);//函数声明sbitLED=P1^0;//位地址声明,定义P1.0为LED/***************************************************/voidmain(void)//主函数,任何一个C程序有且仅有一个主函数{
//{}是成对出现的,这里表示函数的起始与结束
while(1)//死循环,(程序空间可容纳代码量),让程序停//留在所希望的状态下,不要乱运行{LED=!LED;//取反后送到LED端口;分号表示一条语句结束
delay(255);delay(255);//调用延时函数,延时510ms}}/****************************************************/voiddelay(ucharx)//延时函数{uchark;while(x--)for(k=0;k<125;k++);}/*****************************************************/回顾:流水灯实验8个LED发光二极管,分别对应单片机IO口的P1.0到P1.7口,8个单片机IO口组成一个字节,在程序编写过程中,可以直接用P1来进行操作。C语言的8位二进制数代表了8个IO口例如:P1=0xfe;0b11111110
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F.P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.01111111
02.3流水灯程序流水灯控制图2-11中的单片机可以是AT89C51系列的单片机,也可以是任意的51内核的单片机,其中8个LED采用共阳极的连接方法,即8个LED的公共端是接在正电源上的,此时当单片机的P1各端口如果是输出低电平时,LED亮,当各端口输出高电平时,LED灭。下面的程序给出了8个LED灯循环显示,即LED灯按照顺序一个一个点亮的程序。/*****************************************************/#include<reg52.h>//定义特殊功能寄存器库#include<intrins.h>//定义循环左移、右移等函数库#defineucharunsignedchar//预定义#defineuintunsignedintvoiddelay(uchar);//函数声明/*****************************************************/voidmain(void){ucharLedTemp;LedTemp=0xfe;//初始值while(1){P0=LedTemp;//送值到端口LedTemp=_crol_(LedTemp,1);//循环左移delay(255);delay(255);delay(255);delay(255);//延时}}/**************************************************/voiddelay(ucharx)//延时函数{uchark;while(x--)for(k=0;k<125;k++);}/**************************************************/本程序的功能是将8个LED循环点亮,中间延时大约1秒(假设晶体振荡器的频率是11.0592MHz)。送给P1端口的变量LedTemp的初始值为0xfe,写成二进制为11111110,因为是低电平LED点亮,所以只有一个LED灯被点亮,送完第一次的值后,LedTemp循环左移,循环后的二进制代码是11111101,延时大约1秒后,将新的LedTemp的值送P1端口,LedTemp再循环左移后二进制代码为11111011,这样不断的运行,8各LED灯就循环向左显示,LED灯就循环的跑起来了。作业1、将流水灯左移理解透彻后,独立完成流水灯右移操作。2、修改程序并实现:依次1和5灯亮,然后2和6灯亮,然后3和7灯亮,然后4和8灯亮,之后循环3、独立完成一个左移到头接着右移,右移到头接着左移的花样流水灯程序。注意是:P0口#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharuchar
i,LEDtemp;voiddelay(ucharx);voidmain(){
LEDtemp=0xfe;while(1){//向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年护理安全隐患自查自纠整改
- 中国农业大学《新制度经济学》2026-2027学年第一学期期末试卷含解析
- 某化工企业环保管控准则
- 2026年:一起学习静脉治疗护理技术操作标准
- 某纸浆厂蒸煮管理制度
- 某塑料厂环保检测办法
- 文工团艺术岗位就业分析
- 健康宣教图设计指南
- 放手而不放任:河北省新高一家长必读的亲子沟通与角色转变手册
- 消防安全带厂家批发
- 交警素质课件
- GB/T 18276-2017汽车动力性台架试验方法和评价指标
- GB/T 14187-2008包装容器纸桶
- GB/T 1404.2-2008塑料粉状酚醛模塑料第2部分:试样制备和性能测定
- GA/T 1162-2014法医生物检材的提取、保存、送检规范
- 政府OA办公自动化系统
- 机械排痰仪课件
- 浙江省温州市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 广东省汕尾市各县区乡镇行政村村庄村名明细
- DBJ46-057-2020 海南省建筑钢结构防腐技术标准
- AS9100D体系标准中文版
评论
0/150
提交评论