仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
if仿真電路.jpg (285.94 KB, 下載次數: 49)
下載附件
if仿真電路
2022-4-30 18:15 上傳
C語言if語句和switch語句學習和注釋。
if語句.jpg (117.82 KB, 下載次數: 53)
下載附件
if語句
2022-4-30 18:10 上傳
單片機C語言源程序如下:
- /*****************************************************************
- C語言運算
- 運算符 范例 說明
- + a+b a變量值和b變量值相加
- - a-b a變量值和b變量值相減
- * a*b a變量值乘以b變量值
- / a/b a變量值除以b變量值
- % a%b 取a變量值除以b變量值的余數
- = a=6 將6設定給a變量,即a變量值等于6
- += a+=b 等同于a=a+b,將a和b相加的結果又存回a
- -= a-=b 等同于a=a-b,將a和b相減的結果又存回a
- *= a*=b 等同于a=a*b,將a和b相乘的結果又存回a
- /= a/=b 等同于a=a/=b,將a和b相除的結果又存回a
- %= a%=b 等同于a=a%b,a變量值除以b變量的余數又存回a
- ++ a++ a的值加1,即a=a=1
- -- a-- a的值減1,即a=a-1
- > a>b 測試a是否大于b
- < a<b 測試a是否小于b
- == a==b 測試a是否等于b
- >= a>=b 測試a是否大于或等于b
- <= a<=b 測試a是否小于或等于b
- != a!=b 測試a是否不等于b
- && a&&b a和b作邏輯AND,兩個變量是都是"真" ,結果才為"真" 否則結果為"0"
- || a||b a和b作邏輯OR,只要有任何一個變量為“真”,結果就為“真”
- ! !a 將a變量的值取反,即原來為“真”則變“假”則變為“真”
- >> a>>b 將a按位右移b個位
- << a<<b 將a按位左移b個位,右側補"0"
- | a|b a和b的按位做OR運算
- & a&b a和b的按位做AND運算
- ^ a^b a和b的按位做XOR運算
- ~ ~a 將a的每一位取反
- & a=&b 將b變量的地址存入a寄存器
- * *a 用來取寄存器所指地址內的值
- 注意:在邏輯運算中,凡是結果為非“0”的數值即為真,等于“0”為假。
- 范例:1
- a=1;
- b=++a;
- 其運算過程是a值加1變為2,然后再將2賦值給b,所以b=2,a=2.
- 范例:2
- a=1;
- b=a++;
- 其運算過程是a原先的值1,先賦值給b,然后a再加1變為2,所以b=1,a=2.
- *****************************************************************/
- #include <REGX52.H> // 實例4
- sbit K1=P3^4; //定義按鍵的輸入端K1鍵 在左下角第一個開關
- sbit K2=P3^5; //定義按鍵的輸入端K2鍵 在左下角第二個開關
- sbit K3=P3^6; //定義按鍵的輸入端K3鍵 在左下角第三個開關
- sbit LED1=P1^0; //定義LED1到LED4
- sbit LED2=P1^1;
- sbit LED3=P1^2;
- sbit LED4=P1^3;
- sbit LED5=P1^4;
- void delay10ms(void) //延時程序
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- void LEDzx(void) // 3燈不亮
- {
- LED1=0;
- LED2=1;
- LED3=1;
- LED4=1;
- }
- void LEDzx2(void) //2燈不亮
- {
- LED1=0;
- LED2=0;
- LED3=1;
- LED4=1;
- }
- void LEDzx3(void) //1燈不亮
- {
- LED1=0;
- LED2=0;
- LED3=0;
- LED4=1;
- }
- void LEDzx4(void) //全燈亮
- {
- LED1=0;
- LED2=0;
- LED3=0;
- LED4=0;
- }
- void key() //按鍵判斷程序
- {
- if(K1==0) //K1鍵
- {
- delay10ms();
- LEDzx(); //動作A:是條件表達式1、成立時立即執行。
- }
- else if(K2==0) //K2鍵
- LEDzx2(); //動作B:是條件表達式1不成立,但條件表達式2成立時才會執行。
- else if(K3==0) //K3鍵
- LEDzx3(); // 動作C:是條件表達式1 、2不成立,條件表達式3成立時才會執行。
- else
- LEDzx4(); // 動作D:是條件表達式1、2、3都不成立時才會執行。
- }
- main() //主函數
- {
- while(1) //永遠循環,掃描判斷按鍵是否按下
- {
- key(); //調用按鍵識別函數
- }
- }
- /************************************************************************
- [1] C語句:以“ ;”作分隔符,編繹后產生機器指令。
- [2] C語句分類 【表達式語句:表達式加分號構成。】
-
- 分支 if()~else~
- switch(表達式)case
- 循環 for()~
- while()~
- do~while()
- 輔助控制 continue
- break
- goto
- return
- 【一】選擇結構語句(格式:if語句和詮釋)
- 1,if語句是用來判定所給定的條件是否滿足,根據判定的
- 結果(1為真或0為假)來選擇所給出的兩種操作之一進行執行。
- 2,具體if語句有如下四種形式:
- ① if(條件表達式) {動作}
- //如果條件表達式的值為真(非零的數),則執行{}內的動
- 作,如果條件表達式為假,則略過該動作而繼續往下執行。
- ② if (條件表達式){動作1} else {動作2}
- //如果條件表達式為真,則執行動作1,略過else的動作2,
- 然后再往下執行。
- ③ if (條件表達式1)
- if(條件表達式2)
- if(條件表達式3)
- {動作A}
- else
- {動作B }
- else
- {動作C }
- else
- {動作D }
- // 動作A:是條件表達式1、2、3都成立時才會執行。
- 動作B:是條件表達式1、2、成立,但條件表達式3不成立時才會執行。
- 動作C:是條件表達式1 成立,條件表達式2不成立時才會執行。
- 動作D:是條件表達式1不成立時才會執行。
- ④ if (條件表達式1)
- {動作A}
- else if(條件表達式2)
- {動作B}
- else if(條件表達式3)
- {動作C}
- else
- {動作D}
- // 動作A:是條件表達式1、成立時立即執行。
- 動作B:是條件表達式1不成立,但條件表達式2成立時才會執行。
- 動作C:是條件表達式1 、2不成立,條件表達式3成立時才會執行。
- 動作D:是條件表達式1、2、3都不成立時才會執行。
- 二、四種形式的實例:
- (1)實例1:if(條件表達式) {動作}
- #include <REGX52.H>
- sbit Pt=P1^3; //接發光二極管
- unsigned short a; //變量a為:無符號短整型
- unsigned char i,j; //變量i,j為:無符號字符型
- void main(void) //主函數
- {
- if(a<10) //如果(a是否小于10)運行for語句
- {
- while(1) //大循環【正式語句】
- {
- Pt=0; //點亮發光二極管 【正式語句】
- for(i=6;i>0;i--) //延時 【延時語句】 6*6000=36000
- for(j=6000;j>0;j--);
- Pt=1; //關閉發光二極管 【正式語句】
- for(i=2;i>0;i--) //延時 【延時語句】 2*126=252
- for(j=126;j>0;j--);
- }
- }
- }
- (2)實例2 if (條件表達式){動作1} else {動作2}
- #include <REGX52.H>
- sbit Pt=P1^1;
- sbit Ps=P1^3;
- unsigned char i,j; //變量i,j為:無符號字符型
-
- void ledOn(void) // ledOn函數
- {
- Ps=0; // 點亮發光二極管(P1.7口)
- }
- void le(void) // le函數
- {
- while(1) //大循環
- {
- Pt=0; //點亮發光二極管 (P1.6口)
- for(i=6;i>0;i--) //延時 【延時語句】 6*6000=36000
- for(j=6000;j>0;j--);
- Pt=1; //關閉發光二極管
- for(i=2;i>0;i--) //延時 【延時語句】 2*126=252
- for(j=126;j>0;j--);
- }
- }
- void ifde2(void) // ifde2函數【正式if語句實例2】
- {
- if(a<1) //如果(a是否小于1)運行le();語句 (如果條件表達式為真,則執行le();,略過else的ledOn(); )
- le(); //調用 le函數
- else
- ledOn(); //調用 ledOn函數
-
- }
-
- void main(void) //主函數
- {
- ifde2(); //調用 ifde2函數
- }
- (3)實例3
- #include <REGX52.H> // 實例3
- sbit K1=P3^4; //定義按鍵的輸入端K1鍵 在左下角第一個開關
- sbit K2=P3^5; //定義按鍵的輸入端K2鍵 在左下角第二個開關
- sbit K3=P3^6; //定義按鍵的輸入端K3鍵 在左下角第三個開關
- sbit LED1=P1^0; //定義LED1到LED4
- sbit LED2=P1^1;
- sbit LED3=P1^2;
- sbit LED4=P1^3;
- sbit LED5=P1^4;
- void delay10ms(void) //延時程序
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- void key() //按鍵判斷程序
- {
- if(K1==0) //判斷K1是否按下鍵盤
- {
- delay10ms();
- if(K2==0) //判斷K2是否按下鍵盤
- {
- delay10ms();
- if(K3==0) //判斷K3是否按下鍵盤
- {
- LED1=0; //動作A:是條件表達式1、2、3都成立時才會執行。
- LED2=0;
- LED3=0;
- LED4=0;
- }
- else
- {
- LED1=1; //動作B:是條件表達式1、2、成立,但條件表達式3不成立時才會執行。
- LED2=0;
- LED3=0;
- LED4=0;
- }
- }
- else
- {
-
- LED1=1;
- LED2=1; //動作C:是條件表達式1 成立,條件表達式2不成立時才會執行。
- LED3=0;
- LED4=0;
- }
- }
- else
- {
- LED1=1;
- LED2=1;
- LED3=1; //動作D:是條件表達式1不成立時才會執行。
- LED4=0;
- }
- }
- main() //主函數
- {
-
- while(1) //永遠循環,掃描判斷按鍵是否按下
- {
- key(); //調用按鍵識別函數
- }
- }
-
- (4)實例4 在上面的執行代碼
- 二、一般形式:
- ************************************
- if(表達式1) *
- if(表達式2) //內嵌if *
- 語句1; //內嵌if *
- else //內嵌if *
- 語句2; //內嵌if *
- ************************************
- if(表達式1) //內嵌if *
- if(表達式2) //內嵌if *
- 語句1; *
- else *
- 語句3; *
- ************************************
- if(表達式1) *
- 語句1; *
- else *
- if(表達式3) //內嵌if *
- 語句3; //內嵌if *
- else //內嵌if *
- 語句4; //內嵌if *
- ************************************
- if(表達式1) *
- if(表達式2) 語句1; //內嵌if *
- else 語句2; //內嵌if *
- else *
- if(表達式3) 語句3; //內嵌if *
- else 語句4; //內嵌if *
- *
- ***********************************/
- /***********************************************************************
- 【二】Switch-case選擇語句
- Switch-case選擇語句的一般形式如下:
- Switch(表達式)
- case 常量表達式1:語句1,[break;] // break;是跳出語句
- case 常量表達式2:語句2,[break;]
- ···
- case 常量表達式n:語句n,[break;]
- default:語句n=1;
-
- 當switch表達式中的值與某一個case后面的常量表達式的值相等時,就
- 執行此case后面的語句:若與所有的case后面的常量表達式都不匹配時,
- 就執行default后面的語句。執行完一個case后面的語句后,控制流程轉
- 移到下一個case后面的語句的執行,可以在case分支的語句后面加break
- 語句來達到此目的。
- switch case語句更適合跳轉分支較多的情況。它將直接跳轉到滿足條件的分支。分支越多,效率越高。
- #include <reg51.h>
- void main()
- {
- while(1)
- {
- switch(P0)
- {
- case 0x80:P1=0x80; break; //檢測上邊按下,控制D1亮。
- case 0x40:P1=0x40; break; //檢測下邊按下,控制D2亮。
- default:P1=0xff; //全關
- }
- }
- }
- *******************************************************************************/
復制代碼
Keil代碼與Proteus仿真下載:
if語句入門3.7z
(54.24 KB, 下載次數: 28)
2022-4-30 21:46 上傳
點擊文件名下載附件
if語句 下載積分: 黑幣 -5
|