找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1430|回复: 0
打印 上一主题 下一主题
收起左侧

C语言if选择结构语句[if语句学习]单片机程序有详细注释仿真

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


C语言if语句和switch语句学习和注释。

单片机C语言源程序如下:
  1. /*****************************************************************
  2.                     C语言运算
  3. 运算符  范例   说明
  4.   +     a+b           a变量值和b变量值相加
  5.   -     a-b    a变量值和b变量值相减
  6.   *     a*b    a变量值乘以b变量值
  7.   /     a/b    a变量值除以b变量值
  8.   %     a%b    取a变量值除以b变量值的余数
  9.   =     a=6    将6设定给a变量,即a变量值等于6
  10.   +=    a+=b   等同于a=a+b,将a和b相加的结果又存回a
  11.   -=    a-=b   等同于a=a-b,将a和b相减的结果又存回a
  12.   *=    a*=b   等同于a=a*b,将a和b相乘的结果又存回a
  13.   /=    a/=b   等同于a=a/=b,将a和b相除的结果又存回a
  14.   %=    a%=b   等同于a=a%b,a变量值除以b变量的余数又存回a
  15.   ++    a++    a的值加1,即a=a=1
  16.   --    a--    a的值减1,即a=a-1
  17.   >     a>b    测试a是否大于b
  18.   <     a<b    测试a是否小于b
  19.   ==    a==b   测试a是否等于b
  20.   >=    a>=b   测试a是否大于或等于b
  21.   <=    a<=b   测试a是否小于或等于b
  22.   !=    a!=b   测试a是否不等于b
  23.   &&    a&&b   a和b作逻辑AND,两个变量是都是"真"        ,结果才为"真" 否则结果为"0"
  24.   ||    a||b   a和b作逻辑OR,只要有任何一个变量为“真”,结果就为“真”
  25.   !     !a     将a变量的值取反,即原来为“真”则变“假”则变为“真”
  26.   >>    a>>b   将a按位右移b个位
  27.   <<    a<<b   将a按位左移b个位,右侧补"0"
  28.   |     a|b    a和b的按位做OR运算
  29.   &     a&b    a和b的按位做AND运算
  30.   ^     a^b    a和b的按位做XOR运算
  31.   ~     ~a     将a的每一位取反
  32.   &     a=&b   将b变量的地址存入a寄存器
  33.   *      *a    用来取寄存器所指地址内的值
  34. 注意:在逻辑运算中,凡是结果为非“0”的数值即为真,等于“0”为假。
  35. 范例:1
  36.     a=1;
  37.     b=++a;
  38. 其运算过程是a值加1变为2,然后再将2赋值给b,所以b=2,a=2.
  39. 范例:2
  40.      a=1;
  41.          b=a++;
  42.   其运算过程是a原先的值1,先赋值给b,然后a再加1变为2,所以b=1,a=2.
  43. *****************************************************************/
  44. #include <REGX52.H>                                         //        实例4
  45. sbit K1=P3^4;       //定义按键的输入端K1键 在左下角第一个开关
  46. sbit K2=P3^5;                 //定义按键的输入端K2键 在左下角第二个开关
  47. sbit K3=P3^6;                 //定义按键的输入端K3键 在左下角第三个开关

  48. sbit LED1=P1^0;                  //定义LED1到LED4
  49. sbit LED2=P1^1;
  50. sbit LED3=P1^2;
  51. sbit LED4=P1^3;
  52. sbit LED5=P1^4;

  53. void delay10ms(void) //延时程序
  54. {
  55.         unsigned char i,j;
  56.         for(i=20;i>0;i--)
  57.         for(j=248;j>0;j--);
  58. }
  59. void LEDzx(void) //        3灯不亮
  60. {
  61. LED1=0;        
  62. LED2=1;
  63. LED3=1;
  64. LED4=1;
  65. }
  66. void LEDzx2(void) //2灯不亮
  67. {
  68. LED1=0;        
  69. LED2=0;
  70. LED3=1;
  71. LED4=1;
  72. }
  73. void LEDzx3(void) //1灯不亮
  74. {
  75. LED1=0;        
  76. LED2=0;
  77. LED3=0;
  78. LED4=1;
  79. }
  80. void LEDzx4(void) //全灯亮
  81. {
  82. LED1=0;        
  83. LED2=0;
  84. LED3=0;
  85. LED4=0;
  86. }

  87. void key()           //按键判断程序
  88. {
  89.         if(K1==0)  //K1键
  90.         {
  91.         delay10ms();
  92.         LEDzx();                   //动作A:是条件表达式1、成立时立即执行。
  93.         }                  
  94.    else if(K2==0)                //K2键
  95.    LEDzx2();                   //动作B:是条件表达式1不成立,但条件表达式2成立时才会执行。
  96.    else if(K3==0)           //K3键
  97.    LEDzx3();                //        动作C:是条件表达式1 、2不成立,条件表达式3成立时才会执行。
  98.    else
  99.   LEDzx4();                // 动作D:是条件表达式1、2、3都不成立时才会执行。
  100. }


  101. main()                //主函数
  102. {
  103. while(1)  //永远循环,扫描判断按键是否按下
  104. {
  105.    key();    //调用按键识别函数
  106. }
  107. }

  108. /************************************************************************
  109. [1] C语句:以“ ;”作分隔符,编绎后产生机器指令。
  110. [2] C语句分类    【表达式语句:表达式加分号构成。】
  111.   
  112. 分支  if()~else~
  113.         switch(表达式)case

  114. 循环   for()~
  115.          while()~
  116.          do~while()

  117. 辅助控制  continue
  118.           break
  119.           goto
  120.           return

  121. 【一】选择结构语句(格式:if语句和诠释)
  122. 1,if语句是用来判定所给定的条件是否滿足,根据判定的
  123. 结果(1为真或0为假)来选择所给出的两种操作之一进行执行。

  124. 2,具体if语句有如下四种形式:

  125. ① if(条件表达式) {动作}         
  126. //如果条件表达式的值为真(非零的数),则执行{}内的动
  127. 作,如果条件表达式为假,则略过该动作而继续往下执行。

  128. ② if (条件表达式){动作1}  else  {动作2}
  129. //如果条件表达式为真,则执行动作1,略过else的动作2,
  130. 然后再往下执行。

  131. ③ if (条件表达式1)
  132.      if(条件表达式2)
  133.         if(条件表达式3)
  134.             {动作A}           
  135.          else
  136.             {动作B }
  137.           else
  138.             {动作C }
  139.             else
  140.             {动作D }                                                                    
  141. // 动作A:是条件表达式1、2、3都成立时才会执行。
  142.    动作B:是条件表达式1、2、成立,但条件表达式3不成立时才会执行。
  143.    动作C:是条件表达式1 成立,条件表达式2不成立时才会执行。
  144.    动作D:是条件表达式1不成立时才会执行。
  145. ④ if (条件表达式1)
  146.         {动作A}
  147.    else if(条件表达式2)
  148.         {动作B}
  149.         else if(条件表达式3)
  150.         {动作C}
  151.          else
  152.             {动作D}
  153. // 动作A:是条件表达式1、成立时立即执行。
  154.    动作B:是条件表达式1不成立,但条件表达式2成立时才会执行。
  155.    动作C:是条件表达式1 、2不成立,条件表达式3成立时才会执行。
  156.    动作D:是条件表达式1、2、3都不成立时才会执行。

  157. 二、四种形式的实例:
  158. (1)实例1:if(条件表达式) {动作}
  159. #include <REGX52.H>
  160. sbit Pt=P1^3;                           //接发光二极管
  161. unsigned short a;                  //变量a为:无符号短整型
  162. unsigned char i,j;                  //变量i,j为:无符号字符型
  163. void main(void)                         //主函数
  164. {
  165. if(a<10)                                 //如果(a是否小于10)运行for语句
  166. {
  167. while(1)           //大循环【正式语句】
  168.   {
  169.    Pt=0;                  //点亮发光二极管   【正式语句】
  170.     for(i=6;i>0;i--)                 //延时                【延时语句】  6*6000=36000
  171.       for(j=6000;j>0;j--);
  172.    Pt=1;                                    //关闭发光二极管   【正式语句】
  173.    for(i=2;i>0;i--)                 //延时                【延时语句】        2*126=252
  174.       for(j=126;j>0;j--);         
  175.    }
  176.   }
  177. }

  178. (2)实例2   if (条件表达式){动作1}  else  {动作2}
  179. #include <REGX52.H>
  180. sbit Pt=P1^1;
  181. sbit Ps=P1^3;
  182. unsigned char i,j;                  //变量i,j为:无符号字符型

  183. void ledOn(void)                 //        ledOn函数
  184. {
  185. Ps=0;                                   // 点亮发光二极管(P1.7口)
  186. }                           

  187. void le(void)                         //        le函数
  188. {
  189. while(1)           //大循环
  190.   {
  191.    Pt=0;                  //点亮发光二极管 (P1.6口)  
  192.     for(i=6;i>0;i--)                 //延时                【延时语句】  6*6000=36000
  193.       for(j=6000;j>0;j--);
  194.    Pt=1;                                    //关闭发光二极管   
  195.    for(i=2;i>0;i--)                 //延时                【延时语句】        2*126=252
  196.       for(j=126;j>0;j--);           
  197.   }
  198. }                           
  199. void ifde2(void)         //        ifde2函数【正式if语句实例2】
  200. {
  201. if(a<1)                                 //如果(a是否小于1)运行le();语句 (如果条件表达式为真,则执行le();,略过else的ledOn(); )
  202.   le();                                   //调用 le函数
  203. else
  204.   ledOn();                          //调用 ledOn函数
  205.   
  206. }
  207.      
  208. void main(void)           //主函数
  209. {
  210. ifde2();                  //调用 ifde2函数
  211. }

  212. (3)实例3   
  213. #include <REGX52.H>                                         //        实例3
  214. sbit K1=P3^4;       //定义按键的输入端K1键 在左下角第一个开关
  215. sbit K2=P3^5;                 //定义按键的输入端K2键 在左下角第二个开关
  216. sbit K3=P3^6;                 //定义按键的输入端K3键 在左下角第三个开关

  217. sbit LED1=P1^0;                  //定义LED1到LED4
  218. sbit LED2=P1^1;
  219. sbit LED3=P1^2;
  220. sbit LED4=P1^3;
  221. sbit LED5=P1^4;

  222. void delay10ms(void) //延时程序
  223. {
  224.         unsigned char i,j;
  225.         for(i=20;i>0;i--)
  226.         for(j=248;j>0;j--);
  227. }

  228. void key()           //按键判断程序
  229. {
  230.         if(K1==0)  //判断K1是否按下键盘
  231.         {
  232.         delay10ms();
  233.           if(K2==0)          //判断K2是否按下键盘
  234.           {
  235.                 delay10ms();   
  236.             if(K3==0)         //判断K3是否按下键盘
  237.                 {
  238.                 LED1=0;         //动作A:是条件表达式1、2、3都成立时才会执行。
  239.                 LED2=0;
  240.                 LED3=0;
  241.                 LED4=0;
  242.             }
  243.     else
  244.                 {
  245.                 LED1=1;                   //动作B:是条件表达式1、2、成立,但条件表达式3不成立时才会执行。
  246.                 LED2=0;
  247.                 LED3=0;
  248.                 LED4=0;
  249.                 }
  250.         }
  251.         else
  252.                 {
  253.                
  254.                 LED1=1;
  255.                 LED2=1;                          //动作C:是条件表达式1 成立,条件表达式2不成立时才会执行。
  256.                 LED3=0;
  257.                 LED4=0;
  258.                 }
  259.         }
  260.          else
  261.                 {
  262.                 LED1=1;
  263.                 LED2=1;
  264.                 LED3=1;                        //动作D:是条件表达式1不成立时才会执行。
  265.                 LED4=0;        
  266.                 }
  267. }

  268. main()                //主函数
  269. {

  270. while(1)  //永远循环,扫描判断按键是否按下
  271. {
  272.    key();    //调用按键识别函数
  273. }
  274. }
  275.          
  276. (4)实例4  在上面的执行代码

  277. 二、一般形式:
  278. ************************************
  279. if(表达式1)                        *
  280.    if(表达式2)    //内嵌if         *
  281.         语句1;    //内嵌if         *
  282.    else           //内嵌if         *
  283.          语句2;   //内嵌if         *
  284. ************************************
  285.   if(表达式1)      //内嵌if        *
  286.       if(表达式2)  //内嵌if        *
  287.                  语句1;            *
  288.   else                             *
  289.       语句3;                       *
  290. ************************************
  291. if(表达式1)                        *         
  292.       语句1;                       *  
  293.   else                             *   
  294.       if(表达式3)  //内嵌if        *  
  295.             语句3; //内嵌if        *  
  296.       else         //内嵌if        *  
  297.           语句4;   //内嵌if            *
  298. ************************************
  299. if(表达式1)                       *      
  300.      if(表达式2) 语句1;  //内嵌if  *
  301.           else   语句2;  //内嵌if  *
  302.   else                             *
  303.     if(表达式3)  语句3;  //内嵌if  *
  304.      else        语句4;  //内嵌if  *
  305.                                    *         
  306. ***********************************/

  307. /***********************************************************************
  308. 【二】Switch-case选择语句
  309.     Switch-case选择语句的一般形式如下:
  310.         Switch(表达式)
  311.         case  常量表达式1:语句1,[break;]     // break;是跳出语句
  312.         case  常量表达式2:语句2,[break;]   
  313.              ···
  314.          case  常量表达式n:语句n,[break;]
  315.          default:语句n=1;

  316.   当switch表达式中的值与某一个case后面的常量表达式的值相等时,就
  317. 执行此case后面的语句:若与所有的case后面的常量表达式都不匹配时,
  318. 就执行default后面的语句。执行完一个case后面的语句后,控制流程转
  319. 移到下一个case后面的语句的执行,可以在case分支的语句后面加break
  320. 语句来达到此目的。

  321. switch case语句更适合跳转分支较多的情况。它将直接跳转到满足条件的分支。分支越多,效率越高。


  322. #include <reg51.h>
  323. void main()
  324. {
  325.    while(1)
  326.     {
  327.        switch(P0)
  328.           {
  329.             case 0x80:P1=0x80; break; //检测上边按下,控制D1亮。
  330.             case 0x40:P1=0x40; break; //检测下边按下,控制D2亮。
  331.             default:P1=0xff;             //全关
  332.            }
  333.       }


  334. *******************************************************************************/
复制代码

Keil代码与Proteus仿真下载:
if语句入门3.7z (54.24 KB, 下载次数: 27)

评分

参与人数 1黑币 +70 收起 理由
admin + 70 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表