微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 几种流水灯控制程序

几种流水灯控制程序

时间:10-02 整理:3721RD 点击:
几种流水灯控制程序:For循环方式

#include <reg52.h>

unsigned int a;

unsigned char i;

void main()

{

while(1)

         {

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

                  {

                  P1= P1 << 1;  //移位点亮

                  a= 65535;

                  while(a--);        //软件延时

                  }

P1 = 0xff;

                  a= 65535;

                  while(a--);

}

}

If方式

#include <reg52.h>

unsigned int a;

void main()

{

while(1){

P1 = P1 <<1;//移位点亮

a = 65535;

while(a--);        //软件延时

if(P1 == 0)         

                  {

                          P1= 0xff;

                          a= 65535;

                    while(a--);        //软件延时

                  }

         }

}

For加循环移位

#include <reg52.h>

#include <intrins.h>

unsigned int a;

unsigned char i;

unsigned temp;

void main()

{

         temp= 0xfe;

         P1= temp;

   while(1)

         {

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

                  {

                          temp= _crol_(temp,1);

                          P1= temp;

                          a= 65535;

                          while(a--);

                  }

         }

}



添加几个相关的习题代码,并有一个疑惑(见下红色部分),望解答特定延时为1s

#include <reg52.h>

#include <intrins.h>

unsigned int a;

unsigned char i;

unsigned temp;

void delay(unsigned int z);

void main()

{

         temp= 0xfe;

         P1= temp;

   while(1)

         {

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

                  {

                          temp= _crol_(temp,1);

                          P1= temp;

                          delay(1000);

                  }

         }

}

void delay(unsigned int z)

{

         unsignedint x,y;

         for(x= z;x > 0;x--)

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

}

这里有一点疑问:晶振的频率是11.0592MHz,为什么把Y值设定为120刚好是1ms呢?我是看视频学习的,讲解人只是用debug测试了一下,确实大致等于1ms,但是我没算懂~有知道的小伙伴可以回复一下解答我的疑惑。


使发光二极管2-4-6-8闪烁 间隔1000毫秒

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uint a;

uchar i;

unsigned temp;

void delay(uint z)

{

         uintx,y;

         for(x= z;x > 0;x--)

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

}

void main()

{

         temp= 0xfd;

         P1= temp;

   while(1)

         {

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

                  {

                          temp= _crol_(temp,2);

                          P1= temp;

                          delay(250);

                  }

         }

}      

使发光二极管从右往左循环点亮间隔500毫秒,然后熄灭

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uint a;

uchar i;

unsigned temp;

void delay(uint z)

{

         uintx,y;

         for(x= z;x > 0;x--)

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

}

void main()

{

         temp= 0xfe;

         P1= temp;

         delay(500);

   while(1)

         {

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

                  {

                          temp= _crol_(temp,1);

                          P1= temp;

                          delay(500);

                  }

                  if(i== 7)

                  temp= 0xff;

         }

}

依次点亮LED1到LED8发光二极管间隔500毫秒

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uint a;

uchar i;

unsigned temp;

void delay(uint z)

{

         uintx,y;

         for(x= z;x > 0;x--)

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

}

void main()

{

         temp= 0xfe;

         P1= temp;

         delay(500);

   while(1)

         {

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

                  {

                          temp= temp << 1;

                          P1= temp;

                          delay(500);

                  }

         }

}


首先不说代码质量,编码风格就很规范。再接再厉,大牛也是从菜鸟开始的。

谢谢你啊。我接触过蛮多语言,代码书写规范很重要,不然就没有什么可读性了。

前面2-4-6-8闪烁的含义我理解错了,在这里进行修正

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

void delay(uint z)

{

         uintx,y;

         for(x= z;x > 0;x--)

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

}

void main()

{

         while(1)

         {

                 P1= 0x55;

                  delay(1000);

                  P1= 0xff;

                  delay(1000);

         }

}

然后,循环点亮led1到8也可以进行修改,更简洁

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar i;

void delay(uint z)

{

         uintx,y;

         for(x= z;x > 0;x--)

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

}

void main()

{

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

         {

                  P1= P1 <<1;

                  delay(500);

         }

}


非常好的资料 小编最好打包分享一下

谢谢提醒,现在处于学习阶段, 以后会整理分享。现在是边学边分享,也正好可以跟论友们交流。

好的 小编加油 期待中

小编的学习精神可嘉,帮顶让更多的爱好者能过看到~~~~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top