仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
C语言if语句和switch语句学习和注释。
单片机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)
|