找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2441|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机 led流水灯 多种方式实现

[复制链接]
跳转到指定楼层
楼主
ID:116244 发表于 2016-4-23 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************
---------------------------------
实验名称:流水灯实验
实验内容:
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++;
}

//花式流水灯//
   



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表