原创 单片机基础教程(1)--流水灯

2008-11-22 08:26 6471 7 7 分类: MCU/ 嵌入式

      好了,单片机的实验板终于做好了,现在我们开始我们的试验教程吧.如果你觉得这款20元的实验板不错,你可以到这里购买:


http://store.taobao.com/shop/view_shop.htm?asker=wangwang&shop_nick=king_of_wind


点击看大图


       下面我们来开始基础教程,你使用别的实验板或是仿真软件都一样.


所谓的流水灯,就是控制数码管按照一定的顺序流动就是了.比如,你先让第一个亮,一段时间后让第二个亮,再过一段时间让第三个亮.就这样连续起来,我们就会发现灯的亮暗就像流水一样,来来去去.


        下面我们就开始程序吧:


#include <reg51.h>


sbit  S1=0xA4;


void delay()
{
    int i;
    for(i=0;i<10000;i++) ;
}


void main()
{
  char Mode[]={


0x7F,    //第一个灯亮.低电平有效.=0b0111 1111;


0XBF,   //0b1011 1111


 0xDF,   //0b1101 1111


 0xEF,   //0b1110 1111


 0xF7,   //0b1111 0111


 0xFB,  //0b1111 1011 


0xFD,   //0b1111 1101 


0xFE    //0b1111 1110


};
  char Count="0"; 


  for(;;)
  {
      if(S1==0)
     {
          P0=Mode[Count++];
          if(Count>7)
                Count="0";
          delay();
     }
   }
 }


     注意:上面代码里面的两行Count="0";的零上面没有引号,是因为网站的问题,所以自动在零上面加了引号.请大家注意.



        好了,就这么简单的一个程序,我们下载到实验板上面看看结果吧,视频结果你们可以看这里:


http://player.youku.com/player.php/sid/XNTQ3NTk1NDA=/v.swf


      看来很成功嘛,我们那就再来一个复杂一点的,不是有四个按键嘛,我们就来个四个模式,不同的流水:


#include <reg51.h>


sbit  S1=0xA4;


sbit  S2=0xA5;
sbit  S3=0xA6;
sbit  S4=0xA7;


void delay()
{
    int i;
    for(i=0;i<10000;i++) ;
}


void main()
{
  char Mode1[]={0x7F,  0XBF,    0xDF,      0xEF,      0xF7,    0xFB,    0xFD,     0xFE};
  char Mode2[]={ 0x77,   0xBB,    0xDD,     0xEE};
  char Mode3[]={ 0x7E,  0xBD,   0xDB,    0xE7};
  char Mode4[]={0xE7,   0xDB,   0xBD,    0x7E};
  char Count="0";


  for(;;)
  {
      if(S1==0)
   {
         P0=Mode1[Count++];
         if(Count>7)
             Count="0";
         delay();
   }
   if(S2==0)
   {
         P0=Mode2[Count++];
         if(Count>3)
              Count=0;
        delay();
       delay();
       delay();
       delay();
   }
   if(S3==0)
   {
         P0=Mode3[Count++];
         if(Count>3)
               Count=0;
         delay();
         delay();
        delay();
        delay();
   }
   if(S4==0)
   {
        P0=Mode4[Count++];
        if(Count>3)
            Count=0;
        delay();
        delay();
        delay();
        delay();
   }
   if(S1==1&&S2==1&&S3==1&&S4==1)
        P0=0xFF;
  }
}


好了,没有什么新玩意,就是刚才的程序换了的就是每个灯的开通顺序,我们来看看效果吧:


http://player.youku.com/player.php/sid/13691556/v.swf

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条