51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环

51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环,第1张

51单片机C语言实现循环8个流水灯左移三次,后右移三次。

例程:

#include<reg51h>  //51单片机头文件

#include <intrinsh> //包含有左右循环移位子函数的库

#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;x>0;x--)

        for(y=110;y>0;y--);    

}

void main()            //主函数

{

    uchar a,i,j;

    while(1)        //大循环

    {

        a=0xfe;     //赋初值

        for(j=0;j<3;j++) for(i=0;i<8;i++)   //左移三次

        {

            P1=a;       //点亮小灯

            beep=0;     //开启蜂鸣器

            delay(50); //延时50毫秒

            beep=1;     //关闭蜂鸣器

            delay(50);  //再延时50毫秒

            a=_crol_(a,1); //将a变量循环左移一位

        }

        a=0x7f;

       for(j=0;j<3;j++) for(i=0;i<8;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单片机是基础入门的一个单片机,还是应用最广泛的一种。

#include<reg52h>

#include<intrinsh>

typedef unsigned int u16;

typedef unsigned char u8;

sbit led=P2;//这里填你LED连接的端口(引脚),不一定是P2,也有可能是P3、P0

void delay(u16 i)

{

while(i--);

}

void shan1()

{

u8 i;

led=0x01;//我默认led输入高电平1是亮,具体按照你实际情况,低电平亮就0xfe;

for(i=0;i<7;i++)//已经点亮一个了,所以剩7个。

{

led=_crol_(led,1);//左移1位

}

led=0x00;

}

void shan2()

{

u8 i;

led=0xc0;//我默认led输入高电平1是亮,具体按照你实际情况

for(i=0;i<6;i++)已经点亮两个个了,所以剩6个。

{

led=_cror_(led,1);//右移一位

delay(1000);

}

led=0x00;

}

void shan2()

{

u8 i;

led=0xc0;//我默认led输入高电平1是亮,具体按照你实际情况

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

{

led=_cror_(led,1);

delay(1000);

}

led=0x00;

}

void main()

{

while(1)

{

shan1();

delay(1000);

shan2();

}

}

main(){unsignedcharled[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedchara=0;while(1){for(a=0;a<8;a++){Pn(灯的IO)=led[a];}for(a=7;a<=0;a--){Pn(灯的IO)=led[a];}}}

这只是灯亮的初始状态不一样,如果temp=0x01为第一位先亮(先亮指初始状态,因为不知道你的是低电平还是高电平驱动),那么temp=0x7F就是第八位先亮,而且两个循环放方向不一样!一个向左,一个向右,说白了就是两段程序形成的状态是互补的形式。

#include<reg52h>

#include<intrinsh>

#define uchar unsigned char

#define uint unsigned int

/

名称 : Delay()

功能 : 延时,延时时间为 10ms del

输入 : del

输出 : 无

/

void Delay(uint del)

{

uint i,j;

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

for(j=0; j<1827; j++)

;

}

/

名称 : Main()

功能 : 实现灯的闪烁

输入 : 无

输出 : 无

说明 :也可以使用例1的的方法来关闭数码管

/

void Main(void)

{

uchar i;

while(1)

{

P1 = 0xfe;

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

{

P1 = _crol_(P0, 1); //用于循环左移

Delay(15);

}

}

}

这是一个51单片机的P1口小灯循环左移的例子,不懂的问我。应该能用

哥,您看看您的程序,if(P0 == 0x7f)满足也就是说左移循环完成了之后,你就让它右移一位,接下来,延时函数过后戒指break跳出了while循环,而且这个流水灯来回循环也不是这样写的,就算你不用break跳出,等下一次while循环来的时候又是先左移一位,然后又满足if判断,又右移,然后就这么一直左移,,右移

以上就是关于51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环全部的内容,包括:51单片机C语言如何实现8个流水灯左移三次,后右移三次;如此循环、求你89C52单片机流水灯移动的程序 第一次一个LED左移8次,第二次二个LED、设计一个左移到头接着右移,右移到头再左移的花样流水灯程序,C语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9491099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存