上机五C51单片机一维数组和二维数组的应用循环结构练习.docx

上传人:b****7 文档编号:8786504 上传时间:2023-02-01 格式:DOCX 页数:11 大小:396.86KB
下载 相关 举报
上机五C51单片机一维数组和二维数组的应用循环结构练习.docx_第1页
第1页 / 共11页
上机五C51单片机一维数组和二维数组的应用循环结构练习.docx_第2页
第2页 / 共11页
上机五C51单片机一维数组和二维数组的应用循环结构练习.docx_第3页
第3页 / 共11页
上机五C51单片机一维数组和二维数组的应用循环结构练习.docx_第4页
第4页 / 共11页
上机五C51单片机一维数组和二维数组的应用循环结构练习.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

上机五C51单片机一维数组和二维数组的应用循环结构练习.docx

《上机五C51单片机一维数组和二维数组的应用循环结构练习.docx》由会员分享,可在线阅读,更多相关《上机五C51单片机一维数组和二维数组的应用循环结构练习.docx(11页珍藏版)》请在冰豆网上搜索。

上机五C51单片机一维数组和二维数组的应用循环结构练习.docx

上机五C51单片机一维数组和二维数组的应用循环结构练习

任务1:

控制LED小灯亮灭

1.流程图如下:

2.程序如下:

#include

#defineuintunsignedint

#defineucharunsignedchar

voidmain()//主函数

{

while

(1)//while死循环

{

if((P3&0x10)==0)//判断P3口上的八位与00010000相与后是否等于0,若是,则P3.4口为低电平,也就是接在P3.4口上的开关按上了。

P1=0xfe;//当P3.4口上的开关按上了,那么就由用户使接在P1.0口上的灯亮。

elseif((P3&0x20)==0)//和上面的一样,判断P3.5口上的开关是否按上了。

P1=0Xfd;//当P3.5口上的开关按上了,点亮接在P1.1口上的灯。

elseif((P3&0x40)==0)//判断P3.6口的开关是否按上了。

P1=0xfb;//当P3.6口上的开关按上了,点亮接在P1.2口上的灯。

elseif((P3&0x80)==0)//判断P3.7口的开关是否按上了。

P1=0xf7;//当P3.7口上的开关按上了,点亮接在P1.3口上的灯。

elseP1=0xff;//当没有按键按下时,P1口上的全部灯都不亮。

}

}

3.仿真结果如下:

4.仿真结果分析:

从仿真图以及程序可以看出,当P3.4口上的开关按下时,不管其它三个开关有没有按下,只有受P3.4口开关控制的那个灯(p1.0口上的灯)才亮,以此类推,当只有P3.7口上的开关按下时,P1.3口上的灯才亮,而其它灯不亮,因为控制其它灯的按键没有按下,接在其它灯的IO口处于高电平状态。

 

任务二:

循环点亮led小灯

1.流程图如下:

2.程序如下:

#include

#defineuintunsignedint

#defineucharunsignedchar

voidDelayMs(uinti)//延时子程序

{

uintj;

for(;i!

=0;i--)

{

for(j=100;j!

=0;j--);

}

}

voidLedlight(uchari)

{

switch(i)

{

case1:

P1=0xfe;break;//当i的值为1时,点亮P1.0口上的灯

case2:

P1=0xfd;break;//当i的值为2时,点亮P1.1口上的灯

case3:

P1=0xfb;break;//当i的值为3时,点亮P1.2口上的灯

case4:

P1=0xf7;break;//当i的值为4时,点亮P1.3口上的灯

case5:

P1=0xef;break;//当i的值为5时,点亮P1.4口上的灯

case6:

P1=0xdf;break;//当i的值为6时,点亮P1.5口上的灯

case7:

P1=0xbf;break;//当i的值为7时,点亮P1.6口上的灯

case8:

P1=0x7f;break;//当i的值为8时,点亮P1.7口上的灯

default:

break;

}

}

voidmain()

{

uchari;

while

(1)

{

for(i=8;i>0;i--)

{

Ledlight(i);

DelayMs(100);

}

}

}

3.仿真结果如下:

4.仿真结果分析:

由程序可知,利用开关分支语句实现小灯循环点亮,P1口一共接8个灯所以设置8个分支,当参数i=8时,选择第八个分支“case8”即点亮P1.7口上的灯,然后判断i是否仍然大于0,是的话i自减1,再选择相应的分支点亮相对应的小灯实现循环点亮。

 

任务三:

用3种循环实现输出1~10的平方

第一种(for循环):

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

voidserial_init(void);

voidmain()

{

uinti,c;

serial_init();

while

(1)

{

for(i=1;i<11;i++)

{

c=i*i;

printf("%d\n",c);

}

}

}

voidserial_init(void)//串口初始化函数

{

TMOD=0x20;//T1工作方式1,用于设定波特率

TH1=0xF3;//波特率4800Bps,12MHz晶振

TL1=0xF3;

PCON|=0x80;//SMOD=1,波特率加倍

SCON=0x50;//允许发送接收

ES=0;//禁止串口中断

TI=1;

TR1=1;

}

 

分析:

先给i赋值1,把i*i的值赋给c,再printf("%d\n",c)输出1的平方,然后判断i是否大于11,不是的话i自加1,变成2,再把c=2*2,输出2的平方“4”,以此类推······

第二种(while循环):

#include

#include

#defineuintunsignedint

voidserial_init(void)//串口初始化函数

{

TMOD=0x20;//T1工作方式1,用于设定波特率

TH1=0xF3;//波特率4800Bps,12MHz晶振

TL1=0xF3;

PCON|=0x80;//SMOD=1,波特率加倍

SCON=0x50;//允许发送接收

ES=0;//禁止串口中断

TI=1;

TR1=1;

}

voidmain()

{

uinti,c;

i=0;

serial_init();

while(i++<10)

{

c=i*i;

printf("%d\n",c);

}

}

分析:

while循环结构的最大特点在于,其循环条件测试处于循环体的开头,即while(i++<10),先判断循环条件i自加1后是否小于10,当小于10,则为真,执行循环体,为假则退出循环体。

 

第三种(dowhile循环):

#include

#include

#defineuintunsignedint

voidserial_init(void)//串口初始化函数

{

TMOD=0x20;//T1工作方式1,用于设定波特率

TH1=0xF3;//波特率4800Bps,12MHz晶振

TL1=0xF3;

PCON|=0x80;//SMOD=1,波特率加倍

SCON=0x50;//允许发送接收

ES=0;//禁止串口中断

TI=1;

TR1=1;

}

voidmain()

{

uinti,c;

i=1;

serial_init();

do

{

c=i*i;

printf("%d\n",c);

}

while(i++<10);

}

分析:

dowhile循环语句的执行过程是先执行循环体语句“do{循环语句}”,然后执行后面“while()”圆括号中的表达式,如果表达式的结果为真,则循环继续,并再一次执行循环语句。

只有当表达式为假(0)时,循环才会终止。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1