标题: 51单片机 led流水灯 多种方式实现 [打印本页]

作者: beidaihe    时间: 2016-4-23 23:10
标题: 51单片机 led流水灯 多种方式实现
/********************************
---------------------------------
实验名称:流水灯实验
实验内容:
1.运用芯片74hc595控制
2.延时函数
3.定时器扫描使用
4.定时器中断使用
5.花式流水灯
---------------------------------
********************************/

#include<reg51.h>
#include <intrins.h>

#define  NOP() _nop_()
#define uchar unsigned char


//运用芯片74hc595//
/*
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;

void HC595SendData(uchar BT0);
void delay1s(void);

void main()
{
   unsigned char LED;
   unsigned char i;

   LED=0x01;
   while(1)
   {
      HC595SendData(LED);
      LED=LED<<1;
      i++;
      if(i>7)
      {
         i=0;
         LED=0x01;
      }
      delay1s();
    }   
}

void HC595SendData(uchar BT0)
{  
    uchar i;
   
    for(i=0;i<8;i++)
    {
        MOSIO = BT0 >> 7;   
        BT0 <<= 1;
        S_CLK = 0;
        S_CLK = 1;
    }
   

    R_CLK = 0; //set dataline low
    R_CLK = 1;
    R_CLK = 0; //set dataline low
}

void delay1s(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();
}
*/

//延时函数控制间隔//
/*
void delay1s(void);//声明延时1秒函数

void main()
{
    unsigned char LED1;

    LED1 = 0x01;      //0xfe = 1111 1110  二极管共阴极

     while (1)
    {
         P0 = LED1;
         delay1s();
         LED1 = LED1 << 1;//高电平左移一位
          if (P0 == 0x00)
         {
             LED1 = 0x01;
         }                     
    }     

}
void delay1s(void)   
{
    unsigned char a,b,c;
    for(c=13;c>0;c--)
        for(b=247;b>0;b--)
            for(a=142;a>0;a--);
    _nop_();
}
*/


//定时器扫描使用//
/*
void main()
{
    unsigned char cnt = 0;
    unsigned char LED2;
    LED2 = 0x01;
    P0 =  LED2 ;
     
    TMOD = 0x01;
    TH0  = 0xB8;  
    TL0  = 0x00;
    TR0  = 1;          //初始化定时器
   
    while (1)
    {
        P0 =  LED2 ;
        if (TF0 == 1)        
        {
            TF0 = 0;         
            TH0 = 0xB8;     
            TL0 = 0x00;
            cnt++;           
            if (cnt >= 50)   
            {
                cnt = 0;   
                LED2 = LED2 << 1;
                 if (P0 == 0x00)
                {
                     LED2 = 0x01;
                }  
            }
        }
    }
}
*/

//定时器中断//
unsigned char cnt ;
unsigned char LED3;

void InitTimer0(void);//声明中断初始化函数

void main(void)
{
    InitTimer0();
    LED3=0x01;

    while(1)
    {
        P0 =  LED3 ;         
        if (cnt >= 50)   
        {
            cnt = 0;   
            LED3 = LED3 << 1;
            if (P0 == 0x00)
            {
                 LED3 = 0x01;
            }  
        }
    }
}

void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x0B8;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void Timer0Interrupt(void) interrupt 1 //定时器中断函数
{
    TH0 = 0xB8;
    TL0 = 0x00;

    cnt++;
}

//花式流水灯//
   








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1