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

单片机16流水灯

htxw 2023-03-13 资讯中心 16 ℃

51单片机16个灯流水循环,C语言

代码已修改,并仿真通过。

#includereg51.h     //包含单片机寄存器的头文件

#include "intrins.h"

#define uchar unsigned char

#define uint unsigned int

 sbit CLK=P1^0;

 sbit IN =P1^1;

//uchar code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uint code w[]={0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f,0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff};//【新建了一个流水表】

void delay(uint i)

{

    uint j;

    uchar k;

    for(j=i;j0;j--)

        for(k=125;k0;k--);

}

//【发送1字节给74LS164】

void send_byte(uchar temp)

{

    uchar i;

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

    {

        if(temp  0x80)

        {

            IN =1;

        }

        else

        {

           IN =0;

        }

        CLK = 0;

         _nop_();  //if Keil,require use intrins.h

        CLK = 1;

        

        temp=temp1;// temp左移1位

    }

}

//【发送2字节给74LS164】

void send_word(uint temp)

{

    

    send_byte((uchar)(temp8));//先发送高字节

    send_byte((uchar)(temp0x00FF));//再发送低字节

}

void main(void)

{

    uint i;

    

    while(1)

    {

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

        {

            //send_byte(a[i]);

            send_word(w[i]);//【发送2字节】

            delay(4000);

            

           

        }

    }

}

单片机16盏流水灯汇编程序

只能用2个P口来实现或者你用4094试试看

ORG 00H 这是用2个P口实现的 你试试看吧

JMP MAIN P2高8位,P0低8位

ORG 30H 不知道对不对 没环境进行调式

MAIN:CLR C

MOV 30H,#10H

MOV 31H,#01H

JJ1:MOV A,30H

MOV P2,A

MOV A,31H

MOV P0,A

CALL YS

MOV A,30H

RR A

MOV 30H,A

MOV A,31H

RL A

MOV 31H,A

MOV A,30H

CJNE A,#01H,JJ

JJ:MOV A,31H

JNC JJ1

MOV 30H,#01H

MOV 31H,#10H

JJ3:MOV A,30H

MOV P2,A

MOV A,31H

MOV P0,A

CALL YS

MOV A,30H

RL A

MOV 30H,A

MOV A,31H

RR A

MOV 31H,A

MOV A,30H

JNC JJ2

JJ2:MOV A,31H

CJNE A,#01H,JJ3

JMP MAIN

YS:MOV R5,#150

YS1:DJNE R5,YS1

RET

END

单片机流水灯程序 16

#includereg52.h

#include intrins.h

void delayms(unsigned char ms) // 延时子程序

{

unsigned char i;

while(ms--)

{

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

}

}

main()

{

unsigned char LED;

LED = 0xff;

P0 = LED;

while(1)

{

delayms(1000);

LED = LED1; //循环右移1位,点亮下一个LED

if(LED==0x00)

{

LED=0xff;

}

P0 = LED;

}

}

51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解

我给你个简单的例子:

#include AT89X51.H //预处理文件里面定义了特殊寄存器的名称如P1 口定义为P1

void main(void)

{

//定义花样数据

const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,

0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,

0xE7,0xDB,0xBD,0x7E,0xFF};

unsigned int a; //定义循环用的变量

unsigned char b; //在C51 编程中因内存有限尽可能注意变量类型的使用

//尽可能使用少字节的类型,在大型的程序中很

受用

do{

for (b=0; b32; b++)

{

for(a=0; a30000; a++); //延时一段时间

P1 = design[b]; //读已定义的花样数据并写花样数据到P1 口

}

}while(1);

}

程序中的花样数据可以自以去定义,因这里我们的LED 要AT89C51 的P1 引脚为低电平才

会点亮,所以我们要向P1 口的各引脚写数据O 对应连接的LED 才会被点亮,P1 口的八个引

脚刚好对应P1 口特殊寄存器的八个二进位,如向P1 口定数据0xFE,转成二进制就是

11111110,最低位D0 为0 这里P1.0 引脚输出低电平,LED1 被点亮。如此类推,大家不难算

出自己想要做的效果了。

留个邮箱给你发个入门文档

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

本文标签:单片机16流水灯

<