用单片机p2口接八个发光二极管

核心提示#include<reg51h>#define uchar unsigned char#define uint unsigned intuint num=0,i=0;uchar code LED[]={0x01,0x02,0x04,0x08

#include<reg51h>

#define uchar unsigned char

#define uint unsigned int

uint num=0,i=0;

uchar code LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void main()

{

     EA=1;

     ET0=1;

     TMOD=0x01;

     TH0=(65536-50000)/256;

     TL0=(65536-50000)%256;

     TR0=1;

     P1=0;

     while(1)

     {

          if(num==2)

          {

              num=0;

              P1=LED[i];

             i++;

             if(i>7) i=0;

         }

     }

}

void time0() interrupt 1

{

    num++;

    TH0=(65536-50000)/256;

    TL0=(65536-50000)%256;

}

单片机中流水灯如何控制

74ls194控制8个流水灯原理如下。

1、将要控制的8个流水灯的电源供电。

2、将电源的正极接入74LS194的8个输出端,将电源的负极接入74LS194的GND,将74LS194的输入端接入一个计数器。

3、当计数器计数到一定值时,就会触发74LS194的移位操作,从而使8个流水灯依次亮起。

用单片机控制流水灯的六种方案,要程序电路图,详细讲解

单片机中流水灯控制:

硬件连接很简单,只要将8个LED指示灯接在P1口上 另一端通过220欧姆的电阻接+5V电源上,就可以了。

主要靠软件控制,简单的可以使用左移或右移指令,将低电平0 逐渐移入寄存器中,即控制LED指示灯逐渐一个一个地点亮或一个一个地熄灭。

复杂点: 可以进行花式流水控制。

例如: 可以由两边逐渐向内点亮 然后再由内逐渐向外一个一个熄灭。

还可以由由内逐渐向两边内点亮 然后再由两边渐向内逐一个一个熄灭。

在程序的实现上 可以把各种花式流水的P1口亮灭状态字 事先定义成数组 然后每隔一定的时间

取出送P1口显示。

呵呵 俺只提供给你一个号的算法 程序就自己动手自立更生。

设计一个流水灯控制电路使8只发光二极管按一定频率轮流发光

;//

;//实现功能:本程序实现在P0口模拟一种流水灯程序

;//

p_out equ P0 ;宏定义P0为p_out

org 00h ;程序的开始地址

ajmp main ;跳到main

org 030h

;//主函数

;//描 述:实现在P0口模拟一个流水灯程序

;//设计人: lishengling24

;//

main: ;主函数

mov sp,#50h ;设置sp堆栈的初始位置

mov a,#0feh ;初始化acc

main_1:

mov p_out,a ;点亮一个灯

mov r1,#250 ;

mov r0,#250 ;

Call delay_time;调用时间延迟子程序,上面两句是设置延迟时间

mov p_out,#0ffh;熄灭灯

RL a ;循环左移一位准备点亮下一个灯

JMP main_1 ;跳到main_1循环

;//时间延迟函数

;//描 述:用指令实现延时一段时间

;//入口参数:r1为高位,r0为低位,都是十六进制表示

;//出口参数:无

;//设计人:lishengling24

;//

delay_time:

push acc ;acc入栈

push psw ;psw入栈

mov a,r0 ;把r0赋给acc

inc r1 ;r1加1,因为djnz是先减1再比较是否为零,如果不加1

;当r1的初值为0的时候,减1后变成了0x0ff,改变了当

;初预想的延迟时间计数值

inc r0 ;道理和inc r1 一样,当然r0和r1的初值不能为0x0ff

loop:

nop

nop

nop

nop

nop

nop

djnz acc,loop ;

mov a,r0 ;

djnz r1,loop ;

pop psw ;psw出栈

pop acc ;acc出栈

ret

end ;需要其他5种方案的程序和电路,在百度HI我。

以下是C的写法:

//

//实现功能:本程序实现在P0口模拟一个流水灯程序

//

#include <reg51h>

#define p_out P0 //宏定义输出的i/o口为p0

//时间延迟函数

//描 述:用指令实现延时一段时间

//入口参数:int i,为时间延迟参数

//

void delay_time(int i)

{

while(i)

i--;

}

//主函数

//描 述:实现在P0口模拟一个流水灯程序

//

void main(void)

{

unsigned char i=0; //初始化一个局部变量为0

p_out=0xff; //初始化将要输出的i/o口,输出高电平,熄灭所有灯

while(1)

{

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

{

p_out=~(1<<i);//点亮一个灯,

delay_time(50000); //延迟一段时间

p_out=0xff;//熄灭所有灯

}

}

}

555接成多谐振荡器+4017(计数译码器)输出直接接LED就可以构成按一定频率轮流发光的电路 。

追问: 有没有原理啊 ?电路图什么的 ?我还是不会啊

回答: 电路见下图,频率可以调节C1和RP

追问:

 
友情链接
鄂ICP备19019357号-22