51 单片机 跑马灯2

/*-----------------------------------------------
  名称:流水灯
  日期:2016.7.28
  修改:无
  内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*------------------------------------------------
                    延时子程序
------------------------------------------------*/
void delay(unsigned int cnt) 
{
    while(--cnt);
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/

main()
{
    char flag = 0;                  //设置一个位变量

    P1=0x7f;                       //给初始化值 换算成二进制是0111 1111
    while(1)                     //当为1时  则无限循环   当为0时  则一次都不执行
    {  
        if (flag == 0)           //判断是否为0
        {
            delay(30000);        //延时程序
            P1 = P1 >> 1;          //右移一位 该语句等效于 P1=P1>>1
            P1 |= 0x80;            // 1000 0000
    
            if(P1==0xfe)         //检测是否移到最左端?"=="表示检测符号2端的值是否相等
            { 
                flag = 1;       
            }
        
        }
        else if (flag == 1)
        {
            delay(30000);        //延时程序
            P1 = P1 << 2;          //左移两位 该语句等效于 P1=P1<<2
            P1 |= 0x03;            // 0000 0011
    
            if(P1==0xbf)         //检测是否移到最左端?"=="表示检测符号2端的值是否相等
            { 
                flag = 2;
            }
        }
        else
        {
            P1 = 0x00;            // 灯将会全亮
            delay(30000);        //延时程序
    
            P1 = 0x7f;            // 0111 1111
            flag = 0;
        }
    }
}

 

posted on 2016-07-28 10:24  zengsf  阅读(284)  评论(0编辑  收藏  举报

导航