AT89C51单片机如何实现一个按钮控制两个LED同步闪烁?

供稿:hz-xin.com     日期:2025-01-15
51单片机汇编语言程序,一个按键控制两个发光二极管的同时闪烁,交替闪烁,

;P1.0 P1.1接2LED,P2.0接一按键。上电2LED不亮,按第1 次键2LED同时以1S周期闪烁,按第2 次 2LED轮流1S闪烁...同此循环。
;11 04 17

ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
MOV TMOD,#01H ;
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
MOV R0,#10

KEY:
ACALL DISP
JB P2.0,$-2
ACALL DISP
JNB P2.0,$-2
SETB TR0
INC R1 ;R1为按键按下次数
CJNE R1,#2,KEY0
AJMP KEY
KEY0:
MOV R1,#1
AJMP KEY

DISP:
CJNE R1,#1,DISP0
AJMP DISP1
DISP0:
CJNE R1,#2,RT
AJMP DISP2

DISP1: ;一起闪
JNB F0,DISP11 ;F0为0.5S到标志,每0.5S求反一次
SETB P1.0
SETB P1.1
RET
DISP11:
CLR P1.0
CLR P1.1
RT:
RET
DISP2: ;交替闪
JNB F0,DISP21 ;F0为0.5S到标志,每0.5S求反一次
SETB P1.0
CLR P1.1
RET
DISP21:
CLR P1.0
SETB P1.1
RET

T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#10
CPL F0
RTI:
RETI

END

首先定时器中断时间比如5ms,用来定时刷新数码管,他就不闪了。
其次,你另外申明一个全局变量,flash_count,每次定时中断,就是每次5ms,flash_count++,
同时你每次中断再判断flash_count==xxx时,你的led取反,同时设flash_count=0
你可以控制xxx,从1-255 改变,就可以控制闪烁的频率不断变化。

。。。。。。。。。。。。简单到离谱了,一楼还有脸说代做。。。
细节你没说明,以下是按下开关不放时,两个灯一起闪,1秒亮1秒暗。开关松开就停止闪烁。
#include <reg52.h>
sbit d1=P0^0;
sbit d2=P0^1;
sbit k1=P3^0;
void delay(int x)
{
char y;
while(x--)
for(y=0;y<120;y++);
}
void main()
{
while(1)
if(k1==0)
{
d1=~d1;
d2=~d2;
delay(1000);
}
}

因为我偷懒的关系,程序有个小漏洞,延时函数的x和y应该定义成无符号数更合理

这个很简单呀,只要在检测到p3.0有信号,对p0.0和p0.1同时置1,延时,再置0,循环就可以了

求大佬教教怎么用89c51单片机实现模拟路灯
使用89c51单片机实现模拟路灯可以通过控制LED灯的亮灭来模拟路灯的工作状态。下面是一个简单的实现过程:1. 准备材料:89c51单片机、LED灯、电阻、面包板、杜邦线等。2. 连接电路:将89c51单片机与LED灯连接起来。将LED的正极连接到单片机的一个IO口,将LED的负极通过一个适当大小的电阻连接到单片机的地线...

89c51单片机控制舵机!
程序:\/\/12MHz include <reg51.h> void InitTimer0(void){ TMOD = 0x01;TH0 = 0x0B1;TL0 = 0x0E0;EA = 1;ET0 = 1;TR0 = 1;} void delay(void) \/\/误差 0us 延时1ms 此处可以修改高电平周期 \/\/修改此处的延时可以更改舵机转的角度 ,45度具体是多少 你可以试试 { unsigned ...

51单片机怎么实现两位数的加减
I\/O口:四个8位并行I\/O口,既可用作输入,也可用作输出 T\/C:两个定时\/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I\/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体...

用stc-isp给单片机烧写程序,选项中单倍速双倍速的意义?
标准的51要12个时钟脉冲才能运行一条最短的指令,如NOP stc89C5X在设计时进行了优化,改成了只要6个时钟脉冲完成一条最基本的指令,选择12T\/单倍速时,内部会对时钟进行二分频,实际频率降低一半,以兼容AT89C51之类的芯片.选择6T\/双倍速时,不分频,速度比常规51快一倍.选择不同的对程序只是执行时间不同...

用51单片机做一个LED显示的电子钟
用89C51设计LED电子钟6个数码管显示时分秒,要求通过键盘输入初值,打上开关K1时允许设定时间,按下开关K1时开始运行显示时间,K2用做选择是24小时制还是12小时制答得正确又快的可以获... 用89C51设计LED电子钟 6个数码管显示时分秒,要求通过键盘输入初值,打上开关K1时允许设定时间,按下开关K1时开始运行显示时间,K2用...

MCS-51系列单片机的发展史
在集成度、功能、速度、可靠性、应用领域等方面,单片机全面向更高水平发展。在单片机的增强型中,主要分为低档、中档和高档芯片。低档芯片如P87LPC76X系列、P89LPC900系列,中档芯片包括8XC5X系列、P8XC5XX2系列、P89C6XX2系列等,高档芯片如89C51RX系列、Atmel公司的T89C51RX系列等,具有功能齐全、...

单片机C语言程序,看不懂,求讲解
该子程序是在硬件产生中断的时候,跳转到相应中断入口后,再跳转到这个中断服务程序的。请注意函数后面的“interrupt x”声明,这是C51的扩展内容。“用示波器测波形是测p1.0引脚,为什么是这个引脚,怎么确定的?p1_0不是个变量名吗?”P1_0这个符号在前面的头文件 t89c51cc02.h 中有定义。至于“...

老师,我想问一下怎么能确定超声波测距的最大测距范围?
在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在达到微秒级,就能保证测距误差小于1mm的误差。使用的12MHz晶体作时钟基准的89C51单片机定时器能方便的计数到1μs的精度,因此系统采用89C51定时器能保证时间误差在1mm的测量范围内。超声波传播速度误差 超声波的传播速度受空气的密度所影响...

用89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角...
简单说两句,这个也不是很难,有很多种方案,说一个吧,首先是两位数码管的驱动,可以选择单片机带max7219然后外扩两个led数码管,硬件连接既简单也成熟,并且单片机驱动程序也是很成熟的,这样通过程序可以随时改变数码管显示,然后就是复位键和开始键,可以使用中断或查询方式,如果是中断,直接将其连接到外部中断和1上,如果是...

有关单片机的分类,型号的种种疑问
虽然51依然占据的大部分市场,但是在一些特殊的应用场合,还有资源,速度,抗干扰的要求,如控制电机,一般AVR、PIC、ST用的会比较多,msp430系列用于低功耗场合,一般水电表,手持设备会用到。如果成本要求高市场上流行的还有台系的单片机,如义隆单片机,一般EM78P打头的,合泰单片机,一般ht打头的,当然...