2025年C语言语句用法

C语言语句用法1 do while 语句 程序功能 该函数通过 do while 语句控制蜂鸣器鸣响次数和发光 led 闪烁次数来说明 do while 语句的功能

大家好,我是讯享网,很高兴认识大家。

1.do...while语句

* 程序功能: 该函数通过do...while语句控制蜂鸣器鸣响次数和发光led闪烁次数来说明do...while语句的功能。 / #include <reg52.h> sbit beep=P2^3; sbit led=P1^0; void delay(unsigned int i) //一个延时程序。 { unsigned int j; char k; for(j=i;j>0;j--) for(k=200;k>0;k--); } void main() { char cishu; do //当程序执行到此处,先无条件执行循环体一次。 { beep=~beep; //每循环一次,beep与led所代表的管脚电平都会取反。 led=~led; //由于次数最大值为9,初值为0,故共取了十次反,故蜂鸣器会响五下,led会闪五次 cishu++; delay(5000); } while(cishu<10);//执行循环体的条件是cishu<10,若变量不满足该表达式,则跳过。 //注意while括弧后面有一分号。 while(1); }

讯享网

2. for语句

讯享网* 程序功能: 该函数通过for语句控制蜂鸣器的鸣响次数来说明for语句的功能。 / #include <reg52.h> sbit beep=P2^3; sbit led=P1^0; void delay(unsigned int i) //一个延时程序。 { unsigned int j; char k; for(j=i;j>0;j--) for(k=200;k>0;k--); } void main() { char cishu; for(cishu=0;cishu<10;cishu++)//第一个表达式为给变量赋初值,第二个为判断标准 //若为真,则执行下面的指令,否则将跳过大括弧中的指令 //第三句为更改变量值的指令。 { beep=~beep; //每执行一次,beep与led所代表的管脚电平都会取反。 led=~led; //由于共取了十次反,故蜂鸣器会响五下,led会闪五次 delay(5000); } while(1); }

3. if…else…语句

* 程序功能: 通过实例,让同学们了解if…else…语句的作用。 当if后面括弧里面的条件表达式为真,则执行if后面大括弧里的指令 否则将执行else语句后面大括弧里的指令 / #include <reg52.h> sbit s2=P3^4; //本程序中,P3^4用作输入。 P1口用作输出 void main() { while(1) //永远无条件的执行这个循环。 { if(s2==0) //当s2键被按下时,P3^4管脚为低电平。也即,若s2为0,即代表s2按键被按下 P1=0x55; //此时,P1口电平分布为0 else //否则,s2未被按下 P1=0xaa; //此时,P1口电平分布为 } }

4.switch-case-break语句

讯享网* 程序功能: 通过实例说明switch语句的功能。特别注意switch语句的格式,在此很容易犯错。 / #include <reg51.h> sbit s2=P3^4; sbit s3=P3^5; sbit s4=P3^6; sbit s5=P3^7; void main() { char anjian; while(1) //无条件永远执行大循环 { if(!s2) //这些按键按下,就会使anjian变量赋以相应的值。 anjian=1; if(!s3) anjian=2; if(!s4) anjian=3; if(!s5) anjian=4; switch(anjian) //当按键的值为几,程序就跳转到case几执行指令,让然后跳出 {//这个大括弧一定不可少 case 1: P1=0X0F; break;//这个break也不可少 case 2: P1=0Xf0; break; case 3: P1=0X55; break; case 4: P1=0Xaa; break; default:P1=0X00; break;//这个为当anjian取值为其他值时的结果(注意关键字为default)。 } //又由于在刚定义变量anjian时,变量的值为初始值0,而0不属于上面的数值, //故此时default项即被选中,故刚开机时,为8个LED均亮。 } } 

5.while与do...while区别

* 程序功能: 通过程序说明while与do...while间区别: 前者是先比较判断后执行,后者是先执行再比较判断。 故后者的循环体至少会执行一次,而前者有可能一次也不执行。 / #include <reg52.h> sbit s2=P3^4; void main() { char m=3; P1=0xff; while(1) { if(s2) //s2未被按下时,将执行下面大括弧中的程序,但是,由于在刚开始进行的是判别 //操作,而3>4肯定为假,故不会执行P1=0xaa;操作。 //所以,此时,P1口相连的led不亮,P1各管脚的值还是刚开始赋的0xff。 { while(m>4) P1=0xaa; } else //当s2被按下后,执行该段程序,此时,虽然3>4仍然是假的,但是do...while //是先执行一次,然后再判断,故在比较判断之前,已经执行了P1=0xaa;故此时 //P1口各led会被交替点亮。 { do { P1=0x55; } while(m>4); } } }

6.while语句

讯享网* 程序功能: 该函数通过while语句控制蜂鸣器鸣响次数和发光led闪烁次数来说明while语句的功能。 / #include <reg52.h> sbit beep=P2^3; sbit led=P1^0; void delay(unsigned int i) //一个延时程序。 { unsigned int j; char k; for(j=i;j>0;j--) for(k=200;k>0;k--); } void main() { char cishu; while(cishu<10) //执行循环体的条件是cishu<10,若变量不满足该表达式,则跳过。 { beep=~beep; //每循环一次,beep与led所代表的管脚电平都会取反。 led=~led; //由于次数最大值为9,初值为0,故共取了十次反,故蜂鸣器会响五下,led会闪五次 cishu++; delay(5000); } while(1); }

7.不同类型数据的差异

* 程序功能: 该程序通过两个延时函数的不同效果,给同学们关于不同函数类型 的数据间差异提供一感性认识。 下载程序后,会发现八位发光二极管被点亮的时间很短,而熄灭的 时间很长。 / #include<reg52.h> void delaychar() { unsigned char m,n; for(m=255;m>0;m--) //unsigned char型的变量,最大值可以取到255 for(n=10;n>0;n--); //故这种变量延时不会太长 } void delayint() { unsigned char n; unsigned int m; for(m=65535;m>0;m--) //unsigned int型的变量,最大值可以取到65535 for(n=10;n>0;n--);//故这种变量,延时的长度会比前者大。 } void main() { while(1) { P1=0X00; //当函数运行到此处时,八个二极管被点亮。 delaychar(); //这是点亮持续的时间。 P1=0xff; //当函数运行到此处时,八个二极管被熄灭。 delayint(); //这是熄灭的持续时间。 } } //编程时,关于某变量数值类型的选择,一边参照它可能取得的最大数值。 //能定义为char型的变量,就不要定义成int型,因为当定义为int型时, //程序就会在单片机的存储区中腾出两个字节的位置来存储此变量,而单片机的 //存储空间毕竟是比较有限的。故一般不要随便浪费空间。

8.产生随机数rand()

讯享网* 程序功能: 介绍一种产生随机数的方法,通过调用stdlib.h头文件,运用函数rand()。 本例子为产生1到10之间的随机数,并将其送往P1口,通过led亮灭表示的二进制码来验证。 / #include <reg52.h> #include <stdlib.h> //包含产生随机数用到的rand()函数。 delay() { unsigned char m,n; for(m=250;m>0;m--) for(n=250;n>0;n--); } main() { unsigned long RAND_MAX=32767; while(1) { P1=1+(unsigned char)(10.0*rand()/(RAND_MAX)+1.0); // rand()返回一个0到32767之间的伪随机数。此语句将其 //产生的伪随机数缩至1到10之间的范围内。 delay(); } }

9.单片机各引脚间状态传递

* 程序功能: 将P2口的状态传递给P1口,给同学对管脚间状态传递 提供一直感性的认识。 下载程序后,八个发光二极管会间隔着被点亮。 / #include<reg52.h> void main() { P2=0Xaa; //给P2管脚赋值,0xaa即二进制的1010 1010。 P1=P2; //将P2口状态传给P1,可以发现P1口的灯间隔着被点亮。 while(1); } //P1,P2表面为管脚,但实质上对应的是单片机内部的寄存器。

10.宏定义

讯享网/ “天祥电子” 倾情奉献 www.txmcu.cn www.txmcu.com * 程序功能: 介绍宏定义的方式与用法。 / #include <reg52.h> #define uchar unsigned char //定义uchar 即unsigned char #define add(a,b) a+b //带参数的宏定义 void main() { uchar he; //相当与unsigned char he; he=add(1,2); //相当于he=1+2 P1=he; while(1); }

11.逻辑与或非和按位与或非区别

* 程序功能: 通过P1口的展示,对比说明逻辑与或非和按位与或非之间的差别。 当TX-1C学习板上的s2被按下时,执行的为按位与; 当TX-1C学习板上的s3被按下时,执行的为逻辑与; 当TX-1C学习板上的s4被按下时,执行的为按位或; 当TX-1C学习板上的s5被按下时,执行的为逻辑或。 / #include <reg51.h> sbit s2=P3^4; sbit s3=P3^5; sbit s4=P3^6; sbit s5=P3^7; void main() { char i=1,j=2; while(1) { if(s2==0) P1=i&j; //按位与,程序会将1与2均转换为二进制,对于每个位进行与运算,如果结果不为0,则为True //故此时,即为0000 0001&0000 0010=0000 0000,结果为0,TX-1C学习板第一个led会亮 else P1=0xff; if(s3==0) P1=i&&j; //逻辑与,只要i和j均不为0,则结果为真(1),第一个led会灭。 else P1=0xff; if(s4==0) P1=i|j; //按位或与逻辑或的差别与上面类似。 else P1=0xff; if(s5==0) P1=i||j; else P1=0xff; } }

12.数字各位与小数的拆分

讯享网* 程序功能: 该函数是一个功能性小函数,告诉大家对整数各位 进行拆分的一种方法(函数中以一个四位数为例),还有对小数进行提取的方法。 / #include <reg51.h> #include <math.h> void main() { unsigned int zhengshu=1234; unsigned char ge,shi,bai,qian; float xiaoshu=5.67; unsigned int xiaoshu1,xiaoshu2; ge=zhengshu%10; //%即为取余数运算符,如8%5=3 shi=(zhengshu%100)/10; //单斜线/为取整运算符,如8、5=1 bai=(zhengshu%1000)/100; qian=zhengshu/1000; xiaoshu2=(unsigned int)(xiaoshu*100)%10; //注意(unsigned int)(xiaoshu*100)该部分,它的含义为对(xiaoshu*100)进行强制 //类型转换,因为虽然(xiaoshu*100)的运算结果表面上得到的是567,但实质上它在程序 //中的表现形式是567.0,即仍为float型数据,此时如果无类型转换,进行%取余运算时会 //导致错误出现。(unsigned int)(xiaoshu*100)即将float型强制转换为unsigned int型数据。 xiaoshu1=(unsigned int)(xiaoshu*100)%100/10; P1=xiaoshu2;//xiaoshu2结果为7;二进制为00000111 ,故低三位会不亮,其余全亮 //同学们可以用此方法,更改一下“P1=”后的变量,通过led的亮灭观察下每个变量的值是否正确。 while(1);//死循环,程序会停止于此处,防止“跑飞” }

13.数组

* 程序功能: 演示数组的使用方法,使其完成led接连闪烁的效果。 利用数组将某变量可能取的值组织起来,方便使用。 / #include <reg52.h> unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别使某一位LED点亮的P1口电平分布数组。 void delay() { unsigned int p,q; for(p=100;p>0;p--) for(q=100;q>0;q--); } void main() { char m; //每个变量在使用前,必须要加以声明。 while(1) //下面的代码无限循环,效果便是led一遍遍的闪烁。 { P1=table[m];//这就是数组的调用方法,m值为几,即调用数组第几个值(数组中数值的编号从0开始) m++;//改变此m值,便可调用到数组中不同的值。开始时m=0,调用到值0xfe。从而点亮第一个数码管。(TX-1C上,为低电平点亮LED,高电平熄灭LED) if(m==7)//由于led只有八位,而m是从0开始取值的,故当m=7时,应将其归零。 m=0; delay(); } }

14.条件运算符

讯享网* 程序功能: 介绍条件运算符的用法,类似于if()...else语句。 / #include <reg52.h> void main() { unsigned char a=1,b=2,max; max=(a>b)?a:b;//条件运算符?:,若括弧中的a>b为真,则max结果为a,否则为b P1=max; while(1); }

15.循环移位与非循环移位比较

* 程序功能: 比较循环移位与非循环移位。程序中,P1=m<<2;为非循环移位。 P1=_crol_(m,2);为循环移位。注意观察P1口相连的各发光led的亮灭变化, 进而比较两者间的差异。 当按键S2没有被按下时,执行的为循环移位;当按下时,执行非循环移位。 / #include <reg52.h> #include <intrins.h> sbit s2=P3^4; void main() { unsigned char m=0xf3; while(1) { if(s2==0) P1=m<<2;//将左移运算结果送P1口,此运算符为不循环移动,即移出的数据将丢失,而后面的将补零 else P1=_crol_(m,2);//这个为循环移位,即移出的那些位将被送入到低位。 //但是注意,调用这个_crol_(,)之前,要在头文件中包含intrins.h。 } } /*另外,>>为非循环右移运算符。而_cror_(,)为循环右移函数。 其包含于intrins.h头文件中,该文件还包含有其他移位函数, 有兴趣的同学可以查阅相关资料。*/

16.用发光二极管表达数字二进制结果

讯享网* 程序功能: 将运算结果的十进制数送给单片机P1口,观察现象。 / #include <reg51.h> void main() { unsigned char p=10,q=100,plus; plus=p+q; P1=plus;//将运算结果110赋给P1寄存器,那么在P1各个管脚上,就会 //以二进制的形式显示十进制数110,即0110 1110 //也即第一、第四和第八个LED被点亮(由电路图可知,低电平会使led点亮)。 }

17. 有返回值函数

* 程序功能: 演示有返回值函数的使用方法。 / #include <reg52.h> //该函数为带有两个参数m,n且带有返回值的求和函数,返回值的类型为unsigned char unsigned char jia(unsigned char m,unsigned char n) { unsigned char he; he=m+n; return he; //此即为返回的数据,执行此函数后,便会把此值返回给调用该子函数的位置处。 } void main() { unsigned i; i=jia(2,3);//此处调用的求和子函数,其中定义了参数值分别为2和3, //调用完求和函数后,i的值即为返回来的5。 P1=i; //将5送给P1口,二进制码为00000101,通过led亮灭显示出来 while(1); } 

18.指针

讯享网* 程序功能:本程序用来演示指针的用法。 / #include <reg52.h> void main() { unsigned char m,n; //定义无符号字符型数据 unsigned char *j,*k;//定义无符号字符型指针变量 m=2; n=3; j=&m; //使指针变量指向m,对指针j初始化,&为对某个变量取地址的运算符。 k=&n; //使指针变量指向n,对指针k初始化 P1=*j+*k; //这样,对指针的操作其实就是对指针所指向对象的操作。 //*j+*k即相当与m+n,结果为5,然后送给P1口二进制值00000101 while(1); }

19.指针数组

* 程序功能: 演示指针数组的应用方法。 / #include <reg52.h> void delay(void) //一段小延时 { unsigned char m,n; for(m=0;m<200;m++) for(n=0;n<200;n++); } void main(void) { unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char *p[ ]={&table[0],&table[1],&table[2],&table[3],&table[4], &table[5],&table[6],&table[7]}; //使指针数组中的每一个变量均指向数组table[]中的相应地址。 //指针变量存放的是地址。 unsigned char i; while(1) { for(i=0;i<8;i++) { P1=*p[i]; //i的变化,导致指针内容的变化,然后导致向P1传送的数值的变化。 delay(); } } }

20.指针作为函数参数

讯享网* 程序功能: 演示指针作为函数的参数。 / #include <reg52.h> void delay(void) //此延时函数无参数,无返回值。在其后面作了一个有参数的延时函数作为对比 { unsigned char m,n; for(m=0;m<200;m++) for(n=0;n<200;n++); } /* //带参数的延时函数 void delay(unsigned int m) { unsigned int n; unsigned char p; for(n=m;n>0;n--) for(p=0;p<200;p++); } //调用时,可这样调用:delay(200);括弧中的值可自设,但不可大于 //定义时所定的unsigned int的范围。 */ void led(unsigned char *p) //形参为无符号字符型指针 { unsigned char i; while(1) { i=0; //将i置为0,指向数组第一个元素 while(i!=16) { P1=*(p+i);// 取的指针所指变量(数组元素)的值,送P1口 delay(); //调用延时函数 i++; //指向下一个数组元素 } } } void main(void) { unsigned char code table[16]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; //流水灯控制码 unsigned char *p; p=table; led(p); }


讯享网

小讯
上一篇 2025-03-27 16:04
下一篇 2025-03-18 21:59

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/118541.html