久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1993|回復: 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, 下載次數: 28)

評分

參與人數 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区三区久久久 | 日韩欧美在线视频一区 | 一区二区av | 亚洲一区免费视频 | 亚洲精品久久嫩草网站秘色 | 一级国产精品一级国产精品片 | 久久亚洲春色中文字幕久久久 | 久久久久国产 | 99久久免费精品国产男女高不卡 | 日本成年免费网站 | 91色在线| 一二三四在线视频观看社区 | 成人在线免费看 | 午夜视频在线免费观看 | 精品91| 日韩欧美专区 | 91在线区| 久草在线影 | 国产视频一区二区 | 日日天天 | 亚洲成人高清 | 午夜久久久久 | 欧美精品一区二区三区视频 | 91热在线 | 日韩一区二区三区视频在线播放 | 久久99精品国产 | www.com久久久 | 四季久久免费一区二区三区四区 | 精品一区二区免费视频 | 国产成人高清 | 日韩欧美在线不卡 | 国产精品呻吟久久av凹凸 | 久久久精品 | a级片在线| 久久久国产亚洲精品 | 中文字幕韩在线第一页 | 美女久久久久久久久 | 草久久免费视频 | 韩国久久| 天天综合网天天综合 | 国产在线精品一区二区 |