您的位置:首页 > 产品设计 > UI/UE

break、continue和return的用法(附:2IO口控制4按键程序)

2012-12-16 17:04 435 查看
break语句:(循环或switch)

break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句(注意:多层循环只向外跳一层)。由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才是合法的。

注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。

比如:

unsigned char i, j=50;

for(i=0;i<100;i++)

{

if(i>j) break;

}

j=i;

当程序循环到i=51时,执行break语句,跳出for循环,开始执行j=i这条语句。

continue语句:(循环)

continue语句和break语句相似。所不同的是,它不是退出一个循环,而是开始循环的一次新迭代。

注意:continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内,在其它地方使用都会引起错误!

比如:

unsigned char i, j=50;

for(i=0;i<100;i++)

{

if(i>j) continue;

j=i;

}

当程序循环到i=51时,执行continue语句,结束本次循环,即不执行下面的j=i语句,而是执行i++,即i=52,故i<100,循环的条件成立,循环继续执行,知道i<100的条件不成立,for循环才终止。

return语句:
return表示从被调函数返回到主函数继续执行,返回时可以附带一个返回值,返回值可以是一个常量,变量,或是表达式。

在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行。

返回值表示执行的顺利与否(-1、0),返回值可以是各种数据类型,如:int、float、double、char、a【】,*a,结构或类。


在写下面的程序时犯过两个错误:

1、把return写错了位置,导致按键扫描到了return就退出返回了主函数,按键扫描不完整。

2:、!=的优先级大于&,这点没注意。

刚发现以下程序依然是错误的,改正后再更新吧...

#include <REG51.H>

#define uint   unsigned int
#define uchar  unsigned char

sbit LED=P1^0;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_7=P3^7;

uint keyval;

//----------------------延时子函数------------------------
void Delay_ms(uint a)	           //延时a毫秒,需要输入变量值0~65535
{
uint i;
while(--a!= 0)
{
for(i = 0; i <600; i++);  //i 从0加到600,CPU大概就耗时1毫秒
}
}
//-----------------------按键扫描子函数-------------------------------
uchar keyscan()
{	uchar key;
uchar keyscan=0x90;	//准备读取P3^4、P3^7的值,检测s1和s4
P3|=keyscan;
if((P3&keyscan)!=keyscan)  //!!!注意:!=的优先级大于&,必须加括号
{
Delay_ms(10);
if((P3&keyscan)!=keyscan)
{
key=(P3&keyscan);
if(key==0x10)
{
keyval=4;
return keyval;
}
else if(key==0x80)
{
keyval=1;
return keyval;
}
while((P3&keyscan)!=keyscan);
}
}

P3_4=0;		 //P3^4、P3^7分别赋值0、1 ,检测键3
P3_7=1;
if((P3&keyscan)!=0x80)
{
Delay_ms(10);
if((P3&keyscan)!=0x80)
{
keyval=3;
while((P3&keyscan)!=0x80);
return keyval;
}
}

P3_4=1;		 //P3^4、P3^7分别赋值1、0 ,检测键2
P3_7=0;
if((P3&keyscan)!=0x10)
{
Delay_ms(10);
if((P3&keyscan)!=0x10)
{
keyval=2;
while((P3&keyscan)!=0x10);
return keyval;
}
}
}
void main()
{
while(1)
{
keyscan();
if(keyval==2)
{
P3_0=~P3_0;		//取LED相反状态
Delay_ms(250);
keyval=0;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: