单片机C语言C51的语句

发布者:zeta16最新更新时间:2021-07-08 来源: eefocus关键字:单片机  C语言  C51  函数 手机看文章 扫描二维码
随时随地手机看文章

1.  if语句


if语句是C51中的一个基本条件选择语句,它通常有三种格式:


(1)if (表达式) {语句;}


(2)if (表达式) {语句1;}  else  {语句2;}


(3)if (表达式1) {语句1;}


else  if (表达式2) (语句2;)


else  if (表达式3) (语句3;)


……


else  if (表达式n-1) (语句n-1;)


else  {语句n}


【例】  if语句的用法。


(1)if  (x!=y)  printf(“x=%d,y=%dn”,x,y);


执行上面语句时,如果x不等于y,则输出x的值和y的值。


(2)if  (x>y)  max=x;


else  max=y;


     执行上面语句时,如x大于y成立,则把x送给最大值变量max,如x大于y不成立,则把y送给最大值变量max。使max变量得到x、y中的大数。


(3)if  (score>=90)  printf(“Your result is an An”);


else  if  (score>=80)  printf(“Your result is an Bn”);


else  if  (score>=70)  printf(“Your result is an Cn”);


else  if  (score>=60)  printf(“Your result is an Dn”);


else  printf(“Your result is an En”);


执行上面语句后,能够根据分数score分别打出A、B、C、D、E五个等级。


2.   switch/case语句


if语句通过嵌套可以实现多分支结构,但结构复杂。switch是C51中提供的专门处理多分支结构的多分支选择语句。它的格式如下:


switch (表达式)


{case  常量表达式1:{语句1;}break;


case  常量表达式2:{语句2;}break;


……


case  常量表达式n:{语句n;}break;


default:{语句n+1;}


说明如下:


(1)switch后面括号内的表达式,可以是整型或字符型表达式。


(2)当该表达式的值与某一“case”后面的常量表达式的值相等时,就执行该“case”后面的语句,然后遇到break语句退出switch语句。若表达式的值与所有case后的常量表达式的值都不相同,则执行default后面的语句,然后退出switch结构。


(3)每一个case常量表达式的值必须不同否则会出现自相矛盾的现象。


(4)case语句和default语句的出现次序对执行过程没有影响。


(5)每个case语句后面可以有“break”,也可以没有。有break语句,执行到break则退出switch结构,若没有,则会顺次执行后面的语句,直到遇到break或结束。


(6)每一个case语句后面可以带一个语句,也可以带多个语句,还可以不带。语句可以用花括号括起,也可以不括。


(7)多个case可以共用一组执行语句。


【例】 switch/case语句的用法。


对学生成绩划分为A~D,对应不同的百分制分数,要求根据不同的等级打印出它的对应百分数。可以通过下面的switch/case语句实现。


……


switch(grade)


{

case  ‘A’;printf(”90~100n”);break;


case  ‘B’;printf(”80~90n”);break;


case  ‘C’;printf(”70~80n”);break;


case  ‘D’;printf(”60~70n”);break;


case  ‘E’;printf(”<60n”);break;


default;printf(”error”n)


}


3.  while语句


while语句在C51中用于实现当型循环结构,它的格式如下:


       while(表达式)


           {语句;}  /*循环体*/


       while语句后面的表达式是能否循环的条件,后面的语句是循环体。当表达式为非0(真)时,就重复执行循环体内的语句;当表达式为0(假),则中止while循环,程序将执行循环结构之外的下一条语句。它的特点是:先判断条件,后执行循环体。在循环体中对条件进行改变,然后再判断条件,如条件成立,则再执行循环体,如条件不成立,则退出循环。如条件第一次就不成立,则循环体一次也不执行。


【例】  下面程序是通过while语句实现计算并输出1~100的累加和。


#include     //包含特殊功能寄存器


#include     //包含I/O函数库


void main(void)     //主函数


{

int  i,s=0;       //定义整型变量x和y


i=1;


SCON=0x52;       //串口初始化


TMOD=0x20;


TH1=0XF3;


TR1=1;


while  (i<=100)     //累加1~100之和在s中


{

s=s+i;


i++;


}


printf(“1+2+3……+100=%dn”,s);


while(1);


}


程序执行的结果:


1+2+3……+100=5050


4.  do  while语句


do  while语句在C51中用于实现直到型循环结构,它的格式如下:


           do


                 {语句;}           /*循环体*/


           while(表达式);


它的特点是:先执行循环体中的语句,后判断表达式。如表达式成立(真),则再执行循环体,然后又判断,直到有表达式不成立(假)时,退出循环,执行do  while结构的下一条语句。do  while语句在执行时,循环体内的语句至少会被执行一次。


【例】 通过do  while语句实现计算并输出1~100的累加和。


#include    //包含特殊功能寄存器


#include     //包含I/O函数库


void main(void)       //主函数


{

int  i,s=0;           //定义整型变量x和y


i=1;


SCON=0x52;       //串口初始化


TMOD=0x20;


TH1=0XF3;


TR1=1;


do                  //累加1~100之和在s中


{

s=s+i;


i++;


}


while  (i<=100);


printf(“1+2+3……+100=%dn”,s);


while(1);


}


5.  for语句


for(表达式1;表达式2;表达式3)


{语句;}  /*循环体*/


for语句后面带三个表达式,它的执行过程如下:


(1)先求解表达式1的值。


(2)求解表达式2的值,如表达式2的值为真,则执行循环休中的语句,然后执行下一步(3)的操作,如表达式2的值为假,则结束for循环,转到最后一步。


(3)若表达式2的值为真,则执行完循环体中的语句后,求解表达式3,然后转到第四步。


(4)转到(2)继续执行。


(5)退出for循环,执行下面的一条语句。


    在for循环中,一般表达式1为初值表达式,用于给循环变量赋初值;表达式2为条件表达式,对循环变量进行判断;表达式3为循环变量更新表达式,用于对循环变量的值进行更新,使循环变量能不满足条件而退出循环。


【例】 用for语句实现计算并输出1~100的累加和。


#include      //包含特殊功能寄存器库


#include       //包含I/O函数库


void main(void)           //主函数


{

int  i,s=0;                      //定义整型变量x和y


SCON=0x52;                //串口初始化


TMOD=0x20;


TH1=0XF3;


TR1=1;


for (i=1;i<=100;i++)  s=s+i;     //累加1~100之和在s中


printf(“1+2+3……+100=%dn”,s);


while(1);


}


6.  循环的嵌套


在一个循环的循环体中允许又包含一个完整的循环结构,这种结构称为循环的嵌套。外面的循环称为外循环,里面的循环称为内循环,如果在内循环的循环体内又包含循环结构,就构成了多重循环。在C51中,允许三种循环结构相互嵌套。


【例】用嵌套结构构造一个延时程序。


void  delay(unsigned  int  x)


{

unsigned  char j;


while(x--)


{for (j=0;j<125;j++);}


}


这里,用内循环构造一个基准的延时,调用时通过参数设置外循环的次数,这样就可以形成各种延时关系。


7.  break和continue语句


break和continue语句通常用于循环结构中,用来跳出循环结构。但是二者又有所不同,下面分别介绍。


1).break语句


前面已介绍过用break语句可以跳出switch结构,使程序继续执行switch结构后面的一个语句。使用break语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构下面的语句。它不能用在除了循环语句和switch语句之外的任何其它语句中。


【例19】下面一段程序用于计算圆的面积,当计算到面积大于100时,由break语句跳出循环。


for (r=1;r<=10;r++)


{

area=pi*r*r;


if (area>100) break;


printf(“%fn”,area);


}


2).continue语句


continue语句用在循环结构中,用于结束本次循环,跳过循环体中continue下面尚未执行的语句,直接进行下一次是否执行循环的判定。


continue语句和break语句的区别在于:continue语句只是结束本次循环而不是终止整个循环;break语句则是结束循环,不再进行条件判断。


【例20】  输出100~200间不能被3整除的数。


for (i=100;i<=200;i++)


{

if  (i%3= =0)  continue;


printf(“%d  ”;i);


}


在程序中,当i能被3整除时,执行continue语句,结束本次循环,跳过printf()函数,只有能被3整除时才执行printf()函数。


8.  return语句


return语句一般放在函数的最后位置,用于终止函数的执行,并控制程序返回调用该函数时所处的位置。返回时还可以通过return语句带回返回值。return语句格式有两种:


(1)return;


(2)return (表达式);


如果return语句后面带有表达式,则要计算表达式的值,并将表达式的值作为函数的返回值。若不带表达式,则函数返回时将返回一个不确定的值。通常我们用return语句把调用函数取得的值返回给主调用函数。


关键字:单片机  C语言  C51  函数 引用地址:单片机C语言C51的语句

上一篇:单片机C语言C51的函数
下一篇:单片机C语言C51程序中的基本结构

推荐阅读最新更新时间:2024-11-11 23:41

单片机外围电路设计攻略(2)
单片机外围电路设计之二:电容 电容,作为电子电路的又一基本元器件,大家也是熟悉不过的了。下面我们谈谈电容的一些基本应用及注意事项。但是,由于电容的应用非常广泛,未必能面面俱到,如果有网友觉得没有谈到的地方,希望公共完善。 1概念 电容(Capacitance)亦称作“电容量”,是指在给定电位差下的电荷储藏量,记为C,国际单位是法拉(F)。一般来说,电荷在电场中会受力而移动,当导体之间有了介质,则阻碍了电荷移动而使得电荷累积在导体上,造成电荷的累积储存,储存的电荷量则称为电容。电容是电子设备中大量使用的电子元件之一,广泛应用于隔直、耦合、旁路、滤波、调谐回路、能量转换、控制电路等方面。 电容(或称电容量)是表现电容器容纳
[单片机]
<font color='red'>单片机</font>外围电路设计攻略(2)
基于STC12C5A60S2单片机的点阵屏完工
通过几天的工作点阵屏终于完工,不过因为缺少元件只能算完成了一半。。。。。。 不想多说直接上C51程序代码 //行扫1#74hc154芯片对应数据输入口:P0^0- P0^3数据输入控制口:P0^4低电平有效;行扫输出为互斥低电平输出; //列扫1#74hc595芯片对应数据输入口:P0^5移位寄存器时钟信号;P0^6存储寄存器数据更新时钟;P0^7数据输出使能,低电平时输出有效; //P2^0串行数据输入 #include reg52.h //包函头文件 #include intrins.h //包函_nop_延时函数的头文件 #define uchar unsigned char//宏定义 #de
[单片机]
基于STC12C5A60S2<font color='red'>单片机</font>的点阵屏完工
单片机中晶振的工作原理是什么
什么是晶振 晶振一般指晶体振荡器,晶体振荡器是指从一块石英晶体上按一定方位角切下的薄片,简称为晶片。 石英晶体谐振器,简称为石英晶振(Crystal oscillator),如下图椭圆物体。 而在封装内部添加IC组成振荡电路的晶体元件称为晶体振荡器。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。 晶振工作原理 石英晶体振荡器是利用石英晶体的压电效应制成的一种谐振器件,它的基本构成大致是:从一块石英晶体上按一定方位角切下薄片,在它的两个对应面上涂敷银层作为电极,在每个电极上各焊一根引线接到管脚上,再加上封装外壳就构成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷
[单片机]
ATmega88 MCU控制寄存器SMCR
MCU 控制寄存器包含了电源管理的控制位。 · Bits 7..4 Res 保留位: ATmega88中的这些位都没有使用到,读返回值始终是 0”。 · Bits 3、2、1-SM2..0 : 休眠模式选择位 2、 1 和 0 。如 Table18 所示,这些位用于选择具体的休眠模式。 · Bit 0 – SE: 休眠使能 为了使MCU 在执行SLEEP 指令后进入休眠模式, SE 必须置位。为了确保进入休眠模式是程序员的有意行为,建议仅在SLEEP 指令的前一条指令置位SE。MCU 一旦唤醒立即清除SE。
[单片机]
ATmega88 <font color='red'>MCU</font>控制寄存器SMCR
单片机应用分类
  单片机作为计算机发展的一个重要分支领域,根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。 通用型/专用型   这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。 总线型/非总线型   这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不
[单片机]
如何使用Keil3开发51单片机程序
1.双击图标打开Keil软件 2.单击菜单栏 - 3.将新工程保存到一个文件夹 4.选择一款 CPU 芯片,这里STC89C52RC对应着Philips的P89V51RD2 5.提示是否复制8051的启动代码到文件夹,这里选择“否” 6.完成后,在Project Workspace中可以看到Source Group1 7.新建一个代码文件 8.以“*.c”作为后缀名保存 9.将刚刚保存的文件 led .c添加到工程中来 10.选中源代码文件,添加 11.可以看到led.c已经在Source Group1中 12.添加代码如下 13.单击 工具 栏上的“Op
[单片机]
如何使用Keil3开发51<font color='red'>单片机</font>程序
基于PIC单片机及图像处理技术设计的智能台球机器人
设计摘要 台球源于英国,它是一项在国际上广泛流行的高雅室内体育运动。随着各种运动的兴起发展,台球以其内涵高雅、放松身心的特点越来越受大家欢迎。依靠单片机技术的日益成熟,基于单片机的小型化高精度控制过程的广泛应用,色度学、先进光电成像技术、计算机技术和图像处理技术的飞速发展和电机驱动技术、传感器技术以及控制技术的不断发展,我们计划设计可以与人对打的台球智能机器人,使人们可以在即使一个人的情况之下也可以享受台球带来的娱乐、休闲。 我们这次设计的智能台球机器是以PIC单片机为核心的控制系统,结合了图像处理技术,PIC单片机控制电机系统,以及机械机构设计技术等方面的知识,利用了各种芯片来实现对台球系统的图像采集处理技术,同时,使用各种
[单片机]
基于PIC<font color='red'>单片机</font>及图像处理技术设计的智能台球机器人
MCS-51单片机引脚功能介绍
40只引脚双列直插封装(DIP)。40只引脚按功能分为3类: (1)电源及时钟引脚: Vcc、Vss;XTAL1、XTAL2。 (2)控制引脚: PSEN*、EA* 、ALE、RESET (即RST)。 (3)I/O口引脚:P0、P1、P2、P3,为4个8位I/O口的外部引脚。 2.2.1 电源及时钟引脚 1.电源引脚 (1)Vcc(40脚):+5V电源; (2)Vss(20脚):接地。 2.时钟引脚 (1)XTAL1(19脚):如果采用外接晶体振荡器时,此引脚应接地。 (2)XTAL2(18脚):接外部晶体的另一端。 2.2.2 控制引脚 提供控制信号,有的引脚还具有复用功能。 (1) RST/
[单片机]
MCS-51<font color='red'>单片机</font>引脚功能介绍
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved