⑴ 51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H;复位启动
AJMP START;
ORG 001BH;T1中断
AJMP T1INT;
;定义变量========================
YSJSEQU 30H;延时计数器
LEDEQU 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;汇编程序结束
(1)51单片机led灯扩展阅读:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。
⑵ 51单片机都有哪个口能接LED灯
89C51或89C52单片机P0P1P3P4四组共32个IO口都可以驱动LED灯。这种单片机的高电平驱动能力很弱,通常IO输出低电平驱动LED,LED的另一端接限流电阻然后再接电源正。限流电阻的选择上,个人经验电流控制在2-7mA之间,根据对亮度和功耗的要求调整选择
⑶ led灯能直接连接51单片机吗
不能
准确的说是不允许。单片机应只考虑开和关两种逻辑状态。这种LED灯是不是能接单片机的问题属于驱动能力问题。如果每次设计都要去考虑单片机管脚可以承受或者输出的电流,或者计算单片机可以带多大的负载,那你的设计工作的复杂性就会成倍的放大同时可靠性也会降低很多。
也许你使用的LED需要极小的电流就可以驱动而你的单片机带负载的能力很强。从电路的角度考虑是可以直接连。但是这种情况下依然不允许将LED直接连接单片机管脚直接进行驱动。因为这种设计思路根本就是错的,出发点都错了,分析的结论再正确也不行。
不一定非要使用三极管来驱动,虽然我们通常的做法是用三极管。可以用一些集成电路作为驱动。不过你的设计非常简单的话,用一个三极管也就可以了。不过注意加限流电阻,别把LED烧了。
⑷ 51单片机控制led灯点亮与熄灭
// 51单片机控制八个发光二极管 左右循环。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; // 改变这里 LED 各种花样
uchar t,i;
void main()
{
TMOD=0x10;
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
EA=1;
ET1=1;//开定时器1中断
TR1=1;//启动定时器1
t=0;
i=0;
while(1)
{
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
t++;
if(t==20)
{
t=0;
P2=TAB[i];
i++;
if(i==18) { i=0;}
}
}
⑸ 51单片机怎么只控制一颗LED灯闪烁
1、新建项目,如图所示。
注意事项:
很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
⑹ 51单片机led灯怎么亮
要式连接51单片机的LED灯被点亮,拢共需要三步:
搭建好51单片机运行的最小系统,并连接好下载线。
LED灯的正极经过470Ω电阻连接在电源正极上,LED灯的负极连接在单片机的某个接口上,例如连接I/O口P1.0上。
编程使P1.0输出低电平,将编译好的程序下载到单片机里,在单片机再次上电后就可以看到LED灯发光亮起了。
⑺ 51单片机的LED灯不能点亮,请指教。谢谢
你的问题应该是LS138没有正确使能;
E1、E2的逻辑使能要求电平是相反的,不能连接在一起;
修改如下:ENLED 连接 E1,ADDR3 连接 E2、E3(即E2、E3连接在一起);
⑻ 51单片机3个LED灯同时来亮灭闪烁
如果只是人眼睛开到的同时亮灭,是没问题的,用3条连续赋值语句。
如果要做到绝对的同时控制,是不可能的,因为有一个在另一组端口,IO寄存器不同,至少要2条赋值语句。就会有时间差,也就是赋值语句之间的时间差。
⑼ 51单片机数码管和led灯
程序如下
#include<REG51.H>
sbit k1=P1^0;
void delay()
{
unsigned int j;
for(j=40000;j>0;j--);
}
void main()
{
while(1)
{
P0=0xff;
if(k1==0)
{
P0=0x55;
delay();
P0=0xAA;
delay();
}
}
}
仿真结果