十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
关键语句在于两个for中的“a=_crol_(a,1);”和“a=_cror_(a,1);”,可以发现用的是两个不同的函数_crol_()和_cror_(),一个左移,一个右移
创新互联专业为企业提供桑日网站建设、桑日做网站、桑日网站设计、桑日网站制作等企业网站建设、网页设计与制作、桑日企业网站模板建站服务,十余年桑日做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#includereg51.h //51单片机头文件
#include intrins.h //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j3;j++) for(i=0;i8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j3;j++) for(i=0;i8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。
1灭)。编译器keil
C代码如下:
#include
#include
//包含循环左移函数
_cro_l头文件
unsigned
char
tmp;
//中间变量
//////////////////////////////////////////////////////////////////////////////////////////////////
//
延时子程序
////////////////////////////////////////////////////////////////////////////////////////////////
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//
主函数
////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
while(1)
//外层循环
{
tmp
=
0xfe;
P1
=
tmp;
while(1)
//内层循环,执行1、3、5、7亮灯循环
{
delay(30000);
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2);
P1
=
tmp;
if(tmp
==
0xbf)
//判断是否已经点亮到第7灯。是,则退出进入2、4、6、8循环
{
break;
}
}
tmp
=
0xfd;
P1
=
tmp;
while(1)
//内层循环,执行2、4、6、8亮灯循环
{
delay(30000);
//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定
tmp
=
_crol_(tmp,2);
P1
=
tmp;
if(tmp
==
0x7f)
//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环
{
break;
}
}
}
}
用 1111 1111B 表示八盏灯,1表示灭,0表示亮,左移第一次是 1111 1110B, 左移第二次是1111 1100B, 左移第三次是 1111 1000B, ... 左称第八次是 0000 0000B, 然后再赋成 1111 1111B,重新开始左移。