专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机控制8个led灯闪烁+左移+右移程序

作者:小李   来源:本站原创   点击数:  更新时间:2010年09月07日   【字体:

我这次单片机考试的最后一个题目:

                (1) 开关没有闭合时,8个LED灯以0.5秒同时闪烁。

                (2) 开关K1闭合时,D1,D2。。。D8以1秒的速度实现左移,右移。

                (3) 开关K2闭合时,先D8,D6,D4,D2 点亮,D7,D5,D3,D1 点亮,重复上述过程5次。

答:程序如下

            #include"reg51.h"
             #define uchar unsigned  char
                unsigned char temp;
                unsigned char a,b;
                unsigned char i;

                sbit K1=P1^0;
                sbit K2=P1^1;

              void delay10ms( )
                {
                 unsigned char i,j,k;
                 for(i=1;i>0;i--)
                 for(j=200;j>0;j--)
                 for(k=248;k>0;k--);
                 }

             void delay05s( )
                {
                unsigned char i,j,k;
                for(i=5;i>0;i--)
                for(j=200;j>0;j--)
                for(k=248;k>0;k--);
                 }

                void delay1s( )
                {
                unsigned char i,j,k;
                for(i=10;i>0;i--)
                for(j=200;j>0;j--)
                for(k=248;k>0;k--);
                 }

                void calcShanShuo( )                    //8个LED  0.5秒同时闪烁
                 {
                 P2=0x00;delay05s( );
                 P2=0xff;delay05s( );
                    }

               void calcZuoYiYouYi( )               //延迟1秒左移右移
                 {
                   temp=0xfe;
                   P2=temp;
                  delay1s( );
                  for(i=1;i<8;i++)
                 {
                  a=temp<<i;
                  b=temp>>(8-i);
                  P2=a|b;
                 delay1s( );
                    }
                 for(i=2;i<9;i++)
                 {
                  a=temp>>i;
                  b=temp<<(8-i);
                  P2=a|b;
                  delay1s( );
                    }
                   }

                 void calc3( )                  //LED 2468~1357  0.5秒闪烁5次
                   {
                   unsigned char i;
                   for(i=0;i<5;i++)
                     {
                      P2=0xaa;
                      delay05s( );  
                      P2=0x55;
                      delay05s( );
                       }
                       }


                     void main(void)
                     {
                       while(1)
                       {
                       if(K1==0)
                        {
                         delay10ms( );
                         while(K1==0);
                         delay10ms( );
                         calcZuoYiYouYi( );
                            }

                            if(K2==0)
                             {
                            delay10ms( );
                            while(K2==0);
                            delay10ms( );
                           calc3();
                             }

                             calcShanShuo( );
                              }
                              }
关闭窗口

相关文章