找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用C51单片机怎么做流水灯

  [复制链接]
跳转到指定楼层
楼主
ID:237658 发表于 2017-10-7 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用C51单片机怎么做流水灯
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:216625 发表于 2017-10-7 18:53 | 只看该作者
借花献佛
/**************************************************************************************
*                              LED流水灯实验                                                                                                  *
实现现象:下载程序后LED呈现流水灯效果进行左移右移滚动
注意事项:无
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>                //因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

#define led P0           //将P0口定义为led 后面就可以使用led代替P0口

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{
        u8 i;
        led=0x01;
        delay(50000); //大约延时450ms
        while(1)
        {
/*                for(i=0;i<8;i++)
                {
                        P0=(0x01<<i);         //将1右移i位,然后将结果赋值到P0口
                        delay(50000); //大约延时450ms
                }
*/

                for(i=0;i<7;i++)         //将led左移一位
                {
                        led=_crol_(led,1);
                        delay(50000); //大约延时450ms
                }
                for(i=0;i<7;i++)        //将led右移一位
                {
                        led=_cror_(led,1);
                        delay(50000); //大约延时450ms
                }
        }
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:237676 发表于 2017-10-7 19:22 | 只看该作者
去百度文库找教程,或者看郭天祥的《新概念51单片机》入门,用proteus仿真或者淘宝买一块片子。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:217803 发表于 2017-10-7 20:07 | 只看该作者
网上一搜一大堆例程
回复

使用道具 举报

5#
ID:237459 发表于 2017-10-7 20:36 | 只看该作者
很简单,STC-ISP下载软件同时也提供了很多资料,打开软件,跳到     范例程序---》选择相应的单片机
如果你是新手,不知道软件在哪里下,可以打开这个链接www点gxwmcu点com    (这是STC官网)
然后跳到    STC-ISP下载编程烧录软件,下载软件就可以了
回复

使用道具 举报

6#
ID:237714 发表于 2017-10-7 22:03 | 只看该作者
是用单片机嘛?就用循环就可以了
回复

使用道具 举报

7#
ID:111634 发表于 2017-10-7 22:20 | 只看该作者
网上一大堆,自己去搜。
回复

使用道具 举报

8#
ID:237722 发表于 2017-10-7 22:36 | 只看该作者
/************************************
*实验名:流水灯
*实验效果:流水灯(循环移位)
*************************************/
#include<reg52.h>
#include<intrins.h>
#include"delay.h"
void main()
{
        P1 = 0xfe;//1111 1110
        while(1)
        {
                delay(500);
                P1 =_crol_(P1,1);/*将P1循环左移1位*/
        }
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:237722 发表于 2017-10-7 22:36 | 只看该作者
www点yahboom点com/build.html?id=111&cid=33
请看这里

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:237414 发表于 2017-10-7 23:39 | 只看该作者
流水灯

流水灯.rar

13.19 KB, 下载次数: 3

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:237747 发表于 2017-10-8 09:21 | 只看该作者
* 实 验 名                 : 流水灯实验
* 实验说明       : 延时实现LED流水灯效果P2口八个灯作跑马灯。采用了寄存器存中间数
* 连接方式       : 见接线图
* 注    意                 :
*******************************************************************************/

//--包含你要使用的头文件
#include <reg52.h>          //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>

//--声明全局函数--//
void Delay10ms(unsigned int c);   //延时10ms            

/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

main()
{
        unsigned char LED;

        LED = ~0xfe;          //0xfe = 1111 1110

        while (1)
        {
             P0 = LED;
                 Delay10ms(50);
                 LED = LED << 1;    //循环右移1位,点亮下一个LED "<<"为左移位
                  if (P0 == 0x00)        //当它全灭的时候,重新赋值
                 {
                         LED = 0xfe;          // 0xfe = 1111 1110
                 }
                                     
        }
}

/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能                   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

        //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }
           
        }      
}



回复

使用道具 举报

12#
ID:237808 发表于 2017-10-8 15:18 | 只看该作者
百度一下,你就知道
回复

使用道具 举报

13#
ID:237826 发表于 2017-10-8 16:23 | 只看该作者
/**************************************************************************************
*                              LED闪烁的简单试验                                                                                                  *
*                延时实现p2口LED流水灯效果 (用循环移位指令)                                       *
*        连接方法: JP11(P2)和JP1(LED灯) 用8PIN排线连接起来                                                          *
*                                                                                                                                                                          *
***************************************************************************************/
#include <reg51.h>            //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>

void delayms(unsigned char ms)       
// 延时子程序
{                                               
        unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}


main()
{
        unsigned char LED;
        LED = 0xfe;          //0xfe = 1111 1110
        while(1)
        {
             P2 = LED;
                 delayms(250);
                 LED = LED << 1;    //循环右移1位,点亮下一个LED "<<"为左移位
                  if(P2 == 0x00 )         {LED = 0xfe;  } // 0xfe = 1111 1110
                    
                 
        }
}





回复

使用道具 举报

14#
ID:232501 发表于 2017-10-8 19:13 | 只看该作者
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
uint a,b,c;
void main()
{               
                P1=0xff;                                          //左到右
                P1=0xfe;
                for(a=0;a<20000;a++);
                b=7;
                while(b--)
                {       
                        P1=_cror_(P1,1);
                        for(a=0;a<20000;a++);
                }
                P1=0xff;
                P3=0xfe;
                for(a=0;a<20000;a++);
                b=7;
                while(b--)
                {
                        P3=_cror_(P3,1);
                        for(a=0;a<20000;a++);
                }
                P3=0xff;
                P2=0xfe;
                for(a=0;a<20000;a++);
                b=7;
                while(b--)
                {
                        P2=_cror_(P2,1);
                        for(a=0;a<20000;a++);
                }
                P2=0xff;
                P0=0x7f;
                for(a=0;a<20000;a++);
                b=7;
                while(b--)
                {
                        P0=_cror_(P0,1);
                        for(a=0;a<20000;a++);
                }                                                              //
                         //
            P0=0xff;                                         //全亮全灭
                P2=0xff;
                P3=0xff;
                P1=0xff;
                for(a=0;a<20000;a++);
                P0=0x00;
                for(a=0;a<20000;a++);
                P2=0x00;
                for(a=0;a<20000;a++);
                P3=0x00;
                for(a=0;a<20000;a++);
                P1=0x00;
                for(a=0;a<20000;a++);               
                                               
            P0=0xfe;                                    //从右向左追赶
                for(a=0;a<10000;a++);
                b=7;
                while(b--)
                {
                        P0=_crol_(P0,1);
                        for(a=0;a<10000;a++);
                }
                P0=0xff;
                P2=0x7f;
                for(a=0;a<10000;a++);
                b=7;
                while(b--)
                {
                        P2=_crol_(P2,1);
                        for(a=0;a<10000;a++);
                }
                P2=0xff;
                P3=0x7f;
                for(a=0;a<10000;a++);
                b=7;
                while(b--)
                {
                        P3=_crol_(P3,1);
                        for(a=0;a<10000;a++);
                }
                P3=0xff;
                P1=0x7f;
                for(a=0;a<10000;a++);
                b=7;
                while(b--)
                {
                        P1=_crol_(P1,1);
                        for(a=0;a<10000;a++);
                }                       
                P0=0xfe;                                         //上收放,下收放
                P1=0xfe;
                b=7;               
                while(b--)
                {
                        P0=_crol_(P0,1);
                        P1=_cror_(P1,1);
                        for(a=0;a<10000;a++);
                }
                P0=0xff;
                P1=0xff;
                P2=0x7f;
                P3=0xfe;
                b=7;               
                while(b--)
                {
                        P2=_cror_(P2,1);
                        P3=_crol_(P3,1);
                        for(a=0;a<10000;a++);
                }
                P2=0xff;
                P3=0xff;
                P2=0xfe;
                P3=0x7f;
                b=7;               
                while(b--)
                {
                        P2=_crol_(P2,1);
                        P3=_cror_(P3,1);
                        for(a=0;a<10000;a++);
                }                                          //
                P2=0xff;
                P3=0xff;
                P0=0x7f;
                P1=0x7f;
                b=7;               
                while(b--)
                {
                        P0=_crol_(P0,1);
                        P1=_cror_(P1,1);
                        for(a=0;a<10000;a++);
                }
                P0=0xff;
                P1=0xff;                                                    //
}
回复

使用道具 举报

15#
ID:237867 发表于 2017-10-8 20:08 | 只看该作者
简单的程序设计,网上有教程
回复

使用道具 举报

16#
ID:478073 发表于 2019-2-25 03:37 | 只看该作者
坛子里一大堆例程
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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