导航:首页 > 操作系统 > 单片机控制8个灯从左到右

单片机控制8个灯从左到右

发布时间:2022-10-29 06:13:34

❶ 用汇编语言让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

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

    ❷ 单片机考试啊 跪求大神单片机练习题 1.用单片机控制8个LED灯,8个LED灯从左到右依次点亮一

    while(1)
    {recy=0xfe;
    for(k=1;k<=8;k++)
    { P1=recy;
    Delay(50000);
    recy=recy<<1;
    }
    }

    ❸ 单片机C语言编程:让8个LED流水灯以0.2s时间间隔从左到右依次点亮然后重复实现

    #include<reg52.h>
    #include<intrins.h>
    void delay(unsigned int z );
    void main()
    {
    unsigned int a;
    unsigned char b=0xfe;
    for(a=0;a<8;a++)
    {
    P1=b;//P1口接8个LED灯
    delay(200);
    b=_crol_ (b,1);
    }
    }
    void delay(unsigned int z)
    {
    unsigned int i;
    for(;z>0;z--) //延迟时间自己算吧
    for(i=110;i>0;i--);
    }
    用汇编写这个容易点
    main: mov a,#0feh
    mov r0,#8
    loop: mov p1,a
    acall delay
    rl a
    djnz r0,loop
    delay:mov r6,#0ffh
    loop1: mov r7,#01h
    djnz r7,$
    djnz r6,loop1
    ret
    end
    好像是这样,延迟时间可能不太准,也是P1口接8个LED灯

    ❹ 单片机用汇编做一个控制8个LED灯泡从左到右依次点亮,最后全部亮,再全部熄灭后重复前面的过程

    #include<reg51.h>

    #include<intrins.h>

    #defineucharunsignedchar

    #defineuintunsignedint

    //延时

    voidDelayMS(uintx)

    {

    uchari;

    while(x--)

    {

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

    }

    }

    //主程序

    voidmain()

    {

    uints;

    while(1)

    {

    P0=0xfe;

    DelayMS(150);

    for(s=8;s>1;s--)

    {

    P0=_crol_(P0,1);//P0的值向左循环移动

    DelayMS(150);

    }

    P0=0x00;

    DelayMS(150);

    p0=0xff;

    DelayMS(150);

    (4)单片机控制8个灯从左到右扩展阅读:

    常用单片机汇编指令:

    1 .MOV A,Rn寄存器内容送入累加器

    2 .MOV A,direct 直接地址单元中的数据送入累加器

    3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器

    4 .MOV A,#data立即数送入累加器

    5 .MOV Rn,A 累加器内容送入寄存器

    6 .MOV Rn,direct 直接地址单元中的数据送入寄存器

    7 .MOV Rn,#data 立即数送入寄存器

    8 .MOV direct,A 累加器内容送入直接地址单元

    9 .MOV direct,Rn寄存器内容送入直接地址单元

    10. MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元

    11 .MOV direct,@Ri (i=0,1)间接RAM 中的数据送入直接地址单元

    12 MOV direct,#data立即数送入直接地址单元

    13 .MOV @Ri,A (i=0,1)累加器内容送间接RAM 单元

    14 .MOV @Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元

    15 .MOV @Ri,#data (i=0,1)立即数送入间接RAM 单元

    16 .MOV DPTR,#data16 16 位立即数送入地址寄存器

    17 .MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器

    18 .MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器

    19 .MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器

    20 .MOVX A,@DPTR 外部RAM(16 位地址)送入累加器

    21 .MOVX @Ri,A (i=0,1)累计器送外部RAM(8 位地址)

    22 .MOVX @DPTR,A 累计器送外部RAM(16 位地址)

    23 .PUSH direct 直接地址单元中的数据压入堆栈

    24 .POP direct 弹栈送直接地址单元

    25 .XCH A,Rn寄存器与累加器交换

    26 .XCH A,direct 直接地址单元与累加器交换

    27 .XCH A,@Ri (i=0,1)间接RAM 与累加器交换

    28 .XCHD A,@Ri (i=0,1)间接RAM 的低半字节与累加器交换

    ❺ 用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)

    #include<reg51.h>

    voiddelay(void)

    {

    unsignedinti,j;

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

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

    ;

    }

    voidmain(void)

    {

    while(1)

    {

    P3=0xfe;//第一个灯亮

    delay();//延时

    P3=0xfd;//第二个灯亮

    delay();

    P3=0xfb;//第三个灯亮

    delay();

    P3=0xf7;//第四个灯亮

    delay();

    P3=0xef;//第五个灯亮

    delay();

    P3=0xdf;//第六个灯亮

    delay();

    P3=0xbf;//第七个灯亮

    delay();

    P3=0x7f;//第八个灯亮

    delay();

    }

    }

    (5)单片机控制8个灯从左到右扩展阅读

    单片机C语言16种方式流水灯

    voidmain()

    {

    while(1)

    {

    P1=0xfe;//点亮第一个发光管

    Delay(5000);

    P1=0xfd;//点亮第二个发光管

    Delay(5000);

    P1=0xfb;

    Delay(5000);

    P1=0xf7;

    Delay(5000);

    P1=0xef;

    Delay(5000);

    P1=0xdf;

    Delay(5000);

    P1=0xbf;

    Delay(5000);

    P1=0x7f;//点亮第八个发光管

    }

    }

    ❻ 用单片机控制8个LED灯,8个LED灯从左到右依次点亮一次,再从右到左依次点亮一次

    假设51单片机,P1口点亮,低电平点亮。

    unsigned char x =0xfe,i=0;

    for(i=0,i<8;i++)
    {
    x=_crol_(x,1);
    P1=x;
    delay500ms();
    }
    for(i=0,i<8;i++)
    {
    x=_cror_(x,1);
    P1=x;
    delay500ms();
    }

    ❼ 单片机八个led 从左到右依次单个点亮,从右到左再依次点亮;然后从左到右每次增加一个led 点亮

    #include<reg51.h>
    #include<intrins.h>
    #defineucharunsignedchar
    voiddelay(uchara)
    {
    uchari;
    while(a--)for(i=0;i<120;i++);
    }
    main()
    {
    uchari,led;
    while(1)
    {
    led=0xfe;
    for(i=0;i<8;i++)
    {
    P1=led;
    delay(200);
    led=_crol_(led,1);
    }
    led=0x7f;
    for(i=0;i<8;i++)
    {
    P1=led;
    delay(200);
    led=_cror_(led,1);
    }
    led=0xfe;
    for(i=0;i<8;i++)
    {
    P1=led;
    led=led<<1;
    delay(200);
    }
    led=0x00;
    for(i=0;i<8;i++)
    {
    P1=led;
    led=(led>>1)|0x80;
    delay(200);
    }
    P1=0x7e;delay(200);
    P1=0x3c;delay(200);
    P1=0x18;delay(200);
    P1=0x00;delay(200);
    P1=0x18;delay(200);
    P1=0x3c;delay(200);
    P1=0x7e;delay(200);
    P1=0xff;delay(200);
    }
    }

    ❽ C语言控制单片机,控制八个流水灯从左到右依次亮,最后又从右到左依次亮回来,一直循环下去,求帮帮忙

    假设P1接8 个LED,高电平时LED点亮,主程序如下:
    void main(void)
    {
    uchar i;
    while(1)

    {
    for(i=0;i<7;i++)
    {
    P1=1<<i;
    delay_ms(500);
    }
    for(i=0;i<7;i++)
    {
    P1=0x80>>i;
    delay_ms(500);
    }
    }
    }

    ❾ 用51单片机c语言让八个led亮度自左向右逐渐变亮(pwm)

    #include<iom16.h>
    #include<avr_macros.h>

    voidInit_IO(void)
    {
    DDRA=0xFF;
    PORTA=0x00;
    }
    /*以上代码51忽略*/
    voidLED1(unsignedcharx,unsignedcharLEDx)
    {
    unsignedcharCount=0;
    Count=LEDx*36;//最小0,最大7*36=252,char型最大不能超过255;
    Count=Count+1;//加1的目的是针对LED0不亮

    if(x<=Count) //<=是针对LED0不亮
    PORTA|=(1<<LEDx);//51怎么改?。P0|=(1<<LEDx);PWM正占空
    else
    if(x>Count)
    PORTA&=~(1<<LEDx);//51怎么改?。P0&=~(1<<LEDx);PWM负占空
    }

    voidmain(void)
    {
    unsignedchardelay=0;
    unsignedcharLEDx=0;
    Init_IO();
    while(1)
    {
    delay++;
    if(delay==250)
    {
    delay=0;
    LEDx++;
    if(LEDx>7)
    LEDx=0;
    }
    LED1(delay,LEDx);
    }
    }

阅读全文

与单片机控制8个灯从左到右相关的资料

热点内容
QQ会员头像源码 浏览:261
内核命令行 浏览:320
脚本提取源码器 浏览:928
smo源码 浏览:875
为什么要搭建单独服务器 浏览:478
编译器有什么控制 浏览:891
希尔伯特pdf 浏览:645
php数组全数字 浏览:645
解密塔罗牌小程序源码 浏览:862
聚合跑分源码 浏览:553
注册dns服务器写什么 浏览:879
linux安装deb包 浏览:521
电脑盘文件夹如何平铺 浏览:267
相机卡满了没文件夹 浏览:751
如何批量快速压缩视频 浏览:432
我的世界如何加入ice服务器 浏览:873
兄弟cnc编程说明书 浏览:204
php闪电入门教程学习 浏览:152
金岳霖逻辑pdf 浏览:938
linuxtomcat线程 浏览:77