173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

51单片机流水灯从下到上

htxw 2023-03-14 资讯中心 18 ℃

求助51单片机流水灯程序

第4题

89S51 单片机的P1 口接有 8个 LED,当某一端口输出为“0”时,相应的 LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮 K1~K4,按下按钮时,相应引脚被接地。现要求编写可键控的流水灯程序,当 K1 按下时,开始流动,K2 按下时停止流动,全部灯灭,K3 使灯由上往下流动,K4 使灯由下往上流动。

#include "reg51.h"

#include "intrins.h"

#define uchar unsigned char

void mDelay(unsigned int DelayTime)

{ unsigned int j=0;

for(;DelayTime0;DelayTime--)

{ for(j=0;j125;j++)

{;} }}

uchar Key()

{ uchar KeyV;

uchar tmp;

P1=P1|0x3c; //四个按键所接位置

KeyV=P1;

if((KeyV|0xc3)==0xff) //无键按下

return(0);

mDelay(10); //延时,去键抖

KeyV=P1;

if((KeyV|0xc3)==0xff)

return(0);

else

{ for(;;){ tmp=P1;

if((tmp|0xc3)==0xff)

break;}

return(KeyV);}}

void main()

{ unsigned char OutData=0xfe;

bit UpDown=0;

bit Start=0;

uchar KValue;

for(;;)

{ KValue=Key();

switch (KValue)

{ case 0xfb: //P3.2=0,Start

{ Start=1;

break; }

case 0xf7: //P3.3=0,Stop

{ Start=0;

break; }

case 0xef: //P3.4=0 Up

{ UpDown=1;

break; }

case 0xdf: //P3.5=0 Down

{ UpDown=0;

break; }

}

if(Start)

{ if(UpDown)

OutData=_crol_(OutData,1);

else

OutData=_cror_(OutData,1); P2=OutData;

}

else

P2=0xff; //否则灯全灭

mDelay(1000);

}

}

51单片机流水灯安装与调试的过程

利用实验室提供的单片机实验开发板的最小系统电路模块、流水灯电路模块,以及Protues仿真软件搭建电路,实现I/O口循环流水灯演示效果。

LED流水灯控制电路如图2-1所示,八个LED灯D0-D7(可选择LED-RED)阳极接到+5V,阴极通过300欧姆电阻分别接到单片机的P1.0-P1.7八个IO口上。I/O口循环流水灯效果实现流程如图2-2所示,依次从第一盏灯开始,分别点亮每一盏灯,中间调用延时子函数便可使得流水灯的效果清晰可见。点亮LED灯的具体实现方法与上节相同,只需让相应的IO口输出低电平即可,程序实现代码已给出。按照上节给出的项目开发流程,从仿真电路搭建到程序编写,再到仿真调试以及最后的实物调试完成循环流水灯的实现。

51单片机问题,按下K1流水灯从上到下,再从下往上流动,然后停止,按下K2计数显示器显示数字从9到0

#includereg51.h

#includeintrins.h

#define uchar unsigned char

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳级数码管码表0-9

sbit k1=P3^2;

sbit k2=P3^3;

uchar key;

uchar led=0xfe,num;

uchar flag;

void delay(uchar ms)

{

uchar i;

while(ms--)for(i=0;i120;i++);

}

main()

{

    if(k1==0)

    {

    key=1;

    flag=0;

    while(k1==0);

    }

    if(k2==0)

    {

    key=2;

    dat=9;

    while(k2==0);

    }

    if(key==1)

    {

    if(flag==0)

        {

        P1=_crol_(led,1);

        num++;

        delay(250);

        if(num=8){flag=~flag;led=0x7f;}

        }

    else

        {

        P1=_cror_(led,1);

        num++;

        delay(250);

        if(num=8){flag=~flag;led=0xfe;}

        }

    }

    if(key==2)

    {

    P2=table[dat];

    dat--;

    if(dat9)dat=9;

    delay(250);

    }

}

51单片机流水灯原理有谁能解释下吗

单片机流水灯控制原理就是将多个LED灯珠连接到不同的单片机输出端上,编程使单片机的这些输出端逐个的输出信号点亮LED,在设置好各个LED的通电时间和通电间隔时间后,就可以看到这些LED灯珠此起彼伏的亮起,如同流水一样。

51单片机流水灯程序

程序如下:

#include reg52.h

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit led7 = P2^6;

sbit led8 = P2^7;

void main()

{

  int i,j;

 //点亮第一个灯

  led1 = 1;

  led2 = 0;

  led3 = 0;

  led4 = 0;

  led5 = 0;

  led6 = 0;

  led7 = 0;

  led8 = 0;

  //延时1秒

for(i = 0;i 110; ++i)

{

 for(j = 0; j 1000; ++j)

 {

   ;//什么也不做

 }

}

  //点亮第二个灯

  led1 = 0;

  led2 = 1;

  led3 = 0;

  led4 = 0;

  led5 = 0;

  led6 = 0;

  led7 = 0;

  led8 = 0; 

  //点亮剩余的灯

  //省略……

  while(1);

}

扩展资料:

流水灯几点说明:

void:因为该延时函数不需要返回值,所以写为void

delay1s:该函数的函数名,命名需要符合C语言的标识符命名规则。

(): 不需要传入参数,所以括号中为空

至此我们可以把流水灯程序写为以下形式:

51单片机中如何用汇编语言编写流水灯

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:

ORG 0000H ;复位启动

AJMP START ;

ORG 001BH ;T1中断

AJMP T1INT ;

;定义变量========================

YSJS EQU 30H;延时计数器

LED EQU 31H;LED控制缓冲器

;主程序==========================

START: MOV LED,#0FEH ;初始化数据

MOV YSJS,#0 ;

MOV TMOD,#10H ;定时器1工作于方式1,16位定时器

MOV TL1,#0B0H ;设置定时初值

MOV TH1,#3CH ;定时时间=50mS

SETB ET1 ;使能定时器1中断

SETB TR1 ;启动定时器1

SETB EA ;开总中断

MOV P1,LED ;初始化流水灯

LOOP: JMP LOOP ;循环等待中断

T1INT: PUSH PSW ;定时器1中断程序

PUSH ACC ;保护现场

MOV TH1,#3CH ;定时时间=50mS

MOV TL1,#0B0H ;

INC YSJS ;

PUSH ACC ;保护ACC

MOV A,YSJI ;

CJNE A,#2,QT1 ;50mS*2=100mS

MOV P1,LED ;

MOV A,LED ;

RL A ;累加器A的值循环左移1位

MOV LED,A ;

MOV YSJS,#0 ;

QT1: POP ACC ;恢复现场

POP PSW ;

RETI ;返回主程序

END ;汇编程序结束

扩展资料:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左移函数进行。

51单片机流水灯从下到上的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:51单片机流水灯从下到上

<