导航:首页 > 操作系统 > 51单片机八个灯依次亮的编程

51单片机八个灯依次亮的编程

发布时间:2022-05-07 19:55:01

1. 用汇编语言让51单片机八个灯从左到右依次点亮且都不灭,每个灯亮的时

用汇编语言让51单片机八个灯从左到右依次点亮且都不灭,每个灯亮的时间间隔0.5秒,然后全灭,再循环之前的步骤。
参考如下:

  1. 电路

    LED_COUNT DATA 30H
    T0_COUNT DATA 31H

    ORG 0000H
    LJMP MAIN
    ORG 000BH
    LJMP T0_INT

    ORG 0030H
    MAIN:
    ANL TMOD,#0F0H
    ORL TMOD,#01H
    MOV TH0,#3CH
    MOV TL0,#0B0H
    ORL IE,#82H
    SETB TR0
    CLR F0
    MOV LED_COUNT,#00H
    MOV T0_COUNT,#00H
    MOV DPTR,#TAB

    M1:
    JNB F0,M2
    CLR F0
    MOV A,LED_COUNT
    MOVC A,@A+DPTR
    MOV P2,A
    INC LED_COUNT
    MOV A,#9
    CJNE A,LED_COUNT,M2
    MOV LED_COUNT,#00H
    M2:
    SJMP M1

    T0_INT:
    MOV TH0,#3CH
    MOV TL0,#0B0H
    INC T0_COUNT
    MOV A,#10
    CJNE A,T0_COUNT,T
    MOV T0_COUNT,#00H
    SETB F0
    T:
    RETI

    TAB:
    DB0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH
    END

    希望能达到你的要求!!!!!

    2. 如何用单片机实现流水灯,从一依次亮到八,再从八依次亮

    片机流水灯C语言程序的源代码如下:

    #include //51系列单片机定义文件。

    #define uchar unsigned char //定义无符号字符。

    #define uint unsigned int //定义无符号整数。

    void delay(uint); //声明延时函数。


    硬件特征

    1、单片机的体积比较小, 内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分方便,可以模块化应用。

    2、单片机有着较高的集成度,可靠性比较强,即使单片机处于长时间的工作也不会存在故障问题。

    3、单片机在应用时低电压、低能耗,是人们在日常生活中的首要选择, 为生产与研发提供便利。

    3. 求大神编程一个51单片机的8灯点亮程序。

    点灯的方法是由硬件连接方式决定的,以P1囗的8条引脚连接8只LED为例,8只LED共阳极连至电源,则P1口某位为0时,对应LED点亮,为1时LED熄灭。例如熄灭全部LED操作为
    P1=0xFF,
    点亮第一只LED操作为
    P1=0xFE,
    同时点亮第一,二只LED操作为
    P1=0xFC,
    其它可类推。

    4. 单片机C语言,将8个灯依次点亮(被点亮的继续亮),然后再依次熄灭,(在没有熄灭完时熄灭的保持灭)

    其次,我建议还是自己尝试写一写,这个不难,我给你个思路
    首先定义变量类似于P1_2 = P1^2这种,先把这八个管脚全部定义好,之后给个for循环,让P1(假设的你LED灯连接的是P1口)口的P1^0~P1^7相关标志位依次等于0或者1(0还是1需要看你在LED等上给的是高电位亮还是低电位亮),之后再给个for循环,五次的循环,全部P1口置为1(假设高电平LED亮),之后设置P1口全为1,再让P1口的相关标志位置为0,再置为0的时候可以加个延时

    5. c51单片机汇编语言,八个小灯,依次亮灯,间隔0.5s,最后一个点亮后,全部灭掉,请教大神怎么编程

    ORG0000H
    LJMPMAIN
    ORG0030H
    MAIN:
    MOVA,#0FEH
    MOVR2,#8
    LOOP:
    MOVP0,A
    LCALLDELAY
    CLRC
    RLCA
    DJNZR2,LOOP
    MOVP0,#0FFH
    SJMP$
    DELAY:
    MOVR3,#10
    DLY1:
    MOVR4,#100
    DLY2:
    MOVR5,#250
    DJNZR5,$
    DJNZR4,DLY2
    DJNZR3,DLY1
    RET
    END

    6. 51单片机8个led向左循环依次点亮,按一下开关后往右循环一次后继续向左循环

    #include<reg51.h>
    #include<intrins.h>
    #defineucharunsignedchar
    uchartime=0,num,led=0xfe;
    bitflag=0;
    sbitkey=P2^0;
    voidt0isr()interrupt1
    {
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    time++;
    if(time>=10)
    {
    time=0;
    if(flag==0)
    {
    P0=led;
    led=_crol_(led,1);
    }
    else
    {
    P0=led;
    led=_cror_(led,1);
    num++;
    if(num>8)flag=0;
    }
    }
    }
    main()
    {
    TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    TR0=1;
    ET0=1;
    EA=1;
    while(1)
    {
    if(key==0)
    {
    while(key==0);
    flag=1;
    num=0;
    }
    }
    }

    7. 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)

    单片机流水灯C语言程序的源代码如下:

    #include //51系列单片机定义文件

    #define uchar unsigned char //定义无符号字符

    #define uint unsigned int //定义无符号整数

    void delay(uint); //声明延时函数

    void main(void)

    {

    uint i;

    uchar temp;

    while(1)

    {

    temp=0x01;

    for(i=0;i<8;i++) //8个流水灯逐个闪动

    {

    P1=~temp;

    delay(100); //调用延时函数

    temp<<=1;

    }

    temp=0x80;

    for(i=0;i<8;i++) //8个流水灯反向逐个闪动

    {

    P1=~temp;

    delay(100); //调用延时函数

    temp>>=1;

    }

    temp=0xFE;

    for(i=0;i<8;i++) //8个流水灯依次全部点亮

    {

    P1=temp;

    delay(100); //调用延时函数

    temp<<=1;

    }

    temp=0x7F;

    for(i=0;i<8;i++) //8个流水灯依次反向全部点亮

    {

    P1=temp;

    delay(100); //调用延时函数

    temp>>=1;

    }

    void delay(uint t) //定义延时函数

    {

    register uint bt;

    for(;t;t--)

    for(bt=0;bt<255;bt++);

    }

    (7)51单片机八个灯依次亮的编程扩展阅读

    51单片机流水灯的源代码如下

    #include<reg51.h>

    #include<intrins.h>

    voiddelay(inta)

    {

    inti;

    while(a--)for(i=0;i<110;i++);

    }

    main()

    {

    inti;

    while(1)

    {

    P0=0xfe;

    for(i=0;i<8;i++)

    {

    P0=_crol_(P0,1);

    delay(500);

    }

    }

    }

    8. 要求用51单片机控制8个LED亮灭的原理图+程序+解说

    本来以为这个程序很简单的,没想到写了快三个小时。哎学艺不精啊。贴出来给你研究吧。我不想做过多的解释了,我是按我理解的你出的题目做的,可能和你的本意不是很一样,
    1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭
    2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候
    3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒钟有一个灯在闪烁,其中有一秒钟是灭灯状态
    程序中使用了P1口与8个发光二极管相连,具体电路图你网络一下吧,还有使用了一个按键,该按键与P3.7相连,低电平为按下状态。
    程序如下:
    #include <reg52.h>
    #include <intrins.h>

    /*变量声明:
    i、j、k都是记录计时器溢出次数的变量,
    stat是记录当前显示状态的变量,由按键key控制
    temp是状态2中保护P1口状态的变量*/

    unsigned char i=0,j=0,k=0,stat=0,temp;
    bit flag=1; //状态1处于灭灯还是亮灯状态的变量,1为依次亮灯,0为依次亮灯
    sbit key=P3^7; //按键控制
    void init(); //初始化函数
    void delay(unsigned int N); //延时函数
    void keyscan(); //键盘扫描函数

    void main()
    {
    init();

    while (1)
    {
    switch (stat)
    {
    case 0: //0方案
    if(i==20&&flag)
    {
    i=0;
    P1=P1<<1; //依次亮灯
    temp=P1;
    if(temp==0)
    {
    flag=0;
    }
    }
    if(i==20&&!flag)
    {
    i=0;
    if(P1==0xff)
    {
    flag=1;
    P1=0xfe;
    }
    if(!flag)
    {
    P1=P1<<1; //依次灭灯
    temp=P1;

    P1=temp+1;
    }

    }
    break;
    case 1: //2方案
    if(i==20)
    {
    i=0;
    P1=~P1; //去反后亮灯状态为灭灯,P1初值取0x55或0xaa,奇偶交替亮灯
    }
    break;
    case 2: //3方案
    if(j==60)
    {
    P1=temp;
    P1=_crol_(P1,1);
    temp=P1; //保护P1口亮灯状态
    k=0;
    j=0;
    }

    //闪烁部分,应该可以优化
    if(k<5)
    {
    P1=0xff;
    }
    else if(k>=5&&k<10)
    {
    P1=temp;
    }
    else if(k>=10&&k<15)
    {
    P1=0xff;
    }
    else if(k>=15&&k<20)
    {
    P1=temp;
    }
    else if(k>=20&&k<25)
    {
    P1=0xff;
    }
    else if(k>=30&&k<35)
    {
    P1=temp;
    }
    else if(k>=35&&k<40)
    {
    P1=0xff;
    }
    //-----------------------------------
    break;
    }
    keyscan();
    }
    }

    void init()
    {
    TH0=0x3c; //定时器赋初值定时时间50ms
    TL0=0xB0;
    TMOD=0x01; //设置定时器工作方式为方式1
    EA=1; //开总中断
    ET0=1; //开中断允许位
    TR0=1; //定时器计数

    P1=0xfe; //这里假设led灯与P1口相连并且
    //低电平有效

    }
    void delay(unsigned int N)
    {
    int i,j;
    for (i=0;i<N;i++);
    for (j=0;j<110;j++);
    }
    void keyscan()
    {
    if(!key)
    {
    delay(10); //消抖
    if(!key); //确认有键按下
    stat++;
    if(stat==3)
    {
    stat=0;
    }

    //右键按下复位
    i=0;
    j=0;
    k=0;
    TH0=0x3c;
    TL0=0xB0;
    switch (stat)
    {
    case 0:
    P1=0xfe;
    flag=1;
    stat=0;
    break;
    case 1:
    P1=0x55;
    break;
    case 2:
    P1=0xfe;
    temp=P1;
    break;
    }
    //-----------------------------------
    while(!key) //此循环中的函数和主函数中的显示函数是同一个
    //用于长按键的显示,可以去掉,去掉长按键不会正常显示,松开按键后正常
    {
    switch (stat)
    {
    case 0:
    if(i==20&&flag)
    {
    i=0;
    P1=P1<<1;
    temp=P1;
    if(temp==0)
    {
    flag=0;
    }
    }
    if(i==20&&!flag)
    {
    i=0;
    if(P1==0xff)
    {
    flag=1;
    P1=0xfe;
    }
    if(!flag)
    {
    P1=P1<<1;
    temp=P1;

    P1=temp+1;
    }

    }
    break;
    case 1:
    if(i==20)
    {
    i=0;
    P1=~P1;
    }
    break;
    case 2:
    if(j==60)
    {
    P1=temp;
    P1=_crol_(P1,1);
    temp=P1;
    k=0;
    j=0;
    }

    if(k<5)
    {
    P1=0xff;
    }
    else if(k>=5&&k<10)
    {
    P1=temp;
    }
    else if(k>=10&&k<15)
    {
    P1=0xff;
    }
    else if(k>=15&&k<20)
    {
    P1=temp;
    }
    else if(k>=20&&k<25)
    {
    P1=0xff;
    }
    else if(k>=30&&k<35)
    {
    P1=temp;
    }
    else if(k>=35&&k<40)
    {
    P1=0xff;
    }
    break;
    }
    }
    }
    }

    void timer0() interrupt 1
    {
    TH0=0x3c;
    TL0=0xB0; //溢出后重新赋初值
    //定时器中断时间为50ms
    i++; //20次中断时间为1s
    j++; //40次中断时间为2s
    k++; //60次中断时间为3s
    }

    有什么不懂的可以网络Hi我

    9. 单片机控制8个灯依次亮,全亮了,再依次灭的c语言流程图,顺便加上解释,不然看不懂

    1、创建项目,如图所示。

阅读全文

与51单片机八个灯依次亮的编程相关的资料

热点内容
不适合程序员的表现 浏览:498
扣扣服务器问题怎么解决 浏览:126
手机怎么连接加密WF 浏览:329
电脑怎么在邮箱发送文件夹 浏览:803
王者荣耀服务器忙如何强制进入 浏览:26
云服务器网站怎么购买 浏览:477
linux系统记录 浏览:127
linuxusb驱动下载 浏览:34
梁特殊箍筋加密区公式 浏览:141
web应用安全pdf 浏览:47
linuxintel网卡驱动下载 浏览:217
资源解压后怎么删除 浏览:868
编程之美15种算法 浏览:147
java的图形用户界面设计 浏览:769
算数游戏源码 浏览:999
压缩机工作声音判断 浏览:985
事业单位程序员 浏览:507
易语言取相似颜色源码 浏览:773
pyodbclinux 浏览:585
vivo为什么把服务器沉到深海 浏览:460