找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: x小白x
打印 上一主题 下一主题
收起左侧

谁能给我给个流水灯程序

  [复制链接]
41#
ID:197324 发表于 2017-5-6 15:16 | 只看该作者
这个网上一大把
回复

使用道具 举报

42#
ID:197136 发表于 2017-5-6 15:27 | 只看该作者
这个网上很多吧
回复

使用道具 举报

43#
ID:197362 发表于 2017-5-6 16:07 | 只看该作者
用FPGA做的
回复

使用道具 举报

44#
ID:197393 发表于 2017-5-6 16:59 | 只看该作者

/*---------------------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,
                  //头文件包含特殊功能寄存器的定义
/*-------------------------IO口定义----------------------------*/
sbit P20 = P2^0;//这是为了关闭开发板上的数码管实际应用去掉
sbit P21 = P2^1;//这是为了关闭开发板上的数码管实际应用去掉
sbit CS88 = P2^2;//这是为了关闭开发板上的点阵实际应用去掉

sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,
sbit LED1=P1^1;//LED是自己任意定义且容易记忆的符号
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
        P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉
        P20=0; //这是为了关闭开发板上的数码管实际应用去掉
        P21=0; //这是为了关闭开发板上的数码管实际应用去掉
        CS88=0; //这是为了关闭开发板上的点阵实际应用去掉
        P1=0xFF;//P1口置1

                  //此方法使用bit位对单个端口赋值
LED0=0;            //将P1.0口赋值 0,对外输出低电平
LED1=1;
LED2=0;
LED3=1;
LED4=0;
LED5=1;
LED6=0;
LED7=1;
while (1)         //主循环
  {
                  //主循环中添加其他需要一直工作的程序
  }
}
回复

使用道具 举报

45#
ID:197445 发表于 2017-5-6 19:24 | 只看该作者

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

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

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

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

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{
        u8 i;
        led=0xfe;
        delay(50000); //大约延时450ms       
        while(1)
        {       
/*                for(i=0;i<8;i++)
                {
                        P2=~(0x01<<i);         //将1右移i位,然后将结果取反赋值到P2口
                        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       
                }       
        }               
}
回复

使用道具 举报

46#
ID:197464 发表于 2017-5-6 20:17 | 只看该作者
#include<reg52.h>                                                      //包含特殊功能寄存器定义的头文件
                                                                                          


sbit ADDR0 = P1^0;                                                          //位地址声明,注意:sbit必须小写,P必须大写

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;



int main(void)

{
                                                         
        unsigned char cnt1 = 0;                                              //定义一个字符型变量cnt1,并初始赋值0

        unsigned char cnt2 = 0;                                          //定义一个字符型变量cnt2,并初始赋值0

        unsigned int i = 0;                                                 //定义无符号整型变量i,并初始赋值0



        ENLED = 0;                                                                   // 使能3-8译码器

        ADDR3 = 1;

        ADDR2 = 1;                                        // 开启8盏小灯总开关

        ADDR1 = 1;

        ADDR0 = 0;



        while(1)                                   //主循环,程序无限循环执行该循环体语句

        {

                P0 = ~(0x01 << cnt1);                       // P0等于1左移cnt位,控制8个LED灯,P0等于1时二进制是0b00000001,然后取反变成0b11111110,8个小灯以此类推

                for (i=0; i<30000; i++);                           //软件延时
                                                                                           //移位计数变量自加1
                cnt1++;

            
                if(cnt1 >= 8)                                                  //移位计数超过7次后,再重新从0开始
            {

               for (cnt2=0; cnt2<=7; ++cnt2)       // 实现从左向右移动
                                                                                         
                        {

                                 P0 = ~(0x80 >> cnt2);                   //P0等于0x80右移cnt位,控制8个LED灯,P0等于80时二进制是0b10000000,然后取反变成0b01111111,8个小灯以此类推

                                 for (i=0; i<30000; i++);           //软件延时
                                                                                          
                                                                                          
                                 if(cnt2 >= 7)                                   //移位计数超过6次后,再重新从0开始

                                  {

                                        cnt1 = 0;                                   //移位计数cnt1等于0时,开始循环

                                  }

                         }

                  }

                cnt2 = 0;                                                          //移位计数cnt2等于0时,重新开始程序循环

        }



        return 0;                                                          //返回住函数

}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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