原创 51学习之流水灯

2011-2-26 19:07 1333 10 10 分类: MCU/ 嵌入式

小弟写这些是为了让初学者更好更快的入门,分享我的学习经历和积累的经验,与大家共同学习进步,希望大家也努力分享自己的知识,因为知识是人类进步的财富,希望大家最终能把自己学到的知识更好地转化为自己的学习经验!达到学以致用的目的!

首先谈谈数码管的点亮:数码管的点亮可以说是最基础的控制入门,一是可以让大家了解单片机可以做什么,二是可以激发自己的学习兴趣!

/*
8个发光管间隔200ms依次循环点亮,反过来重复一次,
然后全部熄灭,间隔300MS全部闪烁5次。
间隔300ms先奇数亮再偶数亮,循环3次;
两个从两边往中间流动3次,再从中间往两边流动3次;
全部闪烁5次;
*/
#include"reg51.h"
#include"intrins.h"  //包含有左右循环位移的函数库

#define uchar unsigned char
#define uint unsigned int

void delay(uint z) //延时函数delay(100)大约100MS
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

void main()
{
 uchar a,i,j;
 while(1)
 {
  for(j=0;j<2;j++)  //左右循环2次
  {
   a=0xfe;
   for(i=0;i<8;i++)  //循环点亮
   {
    P0=a;
    delay(200);
    a=_crol_(a,1);
   }
   a=0x7f;
   for(i=0;i<8;i++)
   {
    P0=a;
    delay(200);
    a=_crol_(a,1);
   }
  }
  P0=0xff;   //全部关掉
  for(j=0;j<10;j++)
  {
   delay(300);
   P0=~P0;    //全部闪烁5次
  }

  for(j=0;j<2;j++)  //左右循环2次
  {
   a=0xfe;
   for(i=0;i<3;i++)  //循环点亮
   {
    P0=a;
    delay(200);
    a=_crol_(a,2);
   }
   a=0x7f;
   for(i=0;i<3;i++)
   {
    P0=a;
    delay(200);
    a=_crol_(a,2);
   }
  }
  P0=0xff;
  for(j=0;j<3;j++)  //从两边往中间流动
  {
   P0=0x7e;
   delay(300);
   P0=0xbd;
   delay(300);
   P0=0xdb;
   delay(300);
   P0=0xe7;
   delay(300);
  }
  P0=0xff;
  for(j=0;j<3;j++)  //从两边往中间流动
  {
   P0=0xe7;
   delay(300);
   P0=0xdb;
   delay(300);
   P0=0xbd;
   delay(300);
   P0=0x7e;
   delay(300); 
  }
  P0=0xff;
  for(i=0;i<10;i++) //间隔300MS闪烁5次
  {
   P0=~P0;
   delay(300);
  }
  P0=0xff;
 }
}


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条