51单片机。LED闪烁问题。
发布网友
发布时间:2022-05-06 10:33
我来回答
共4个回答
热心网友
时间:2022-06-29 19:05
这是正常的,因为你灯的亮灭是由单片机的低电平驱动的(从你程序里看出),而单片机给的高低电平带负载能力不是很强,也就是说它虽然电压达到了,但是电流比较小,我们写程序也是一样的情况。没问题的,不用担心。
热心网友
时间:2022-06-29 19:05
主函数改动了一些,如下:
main()
{
init();
while(1) {
if(a == 100) a = 0;
if(a <= 50) P0 = 0x00;
else P0 = 0xFF;
}
}
热心网友
时间:2022-06-29 19:06
灯很弱的闪烁很暗,与程序无关,只与51单片机的端口驱动能力有关。51单片机的端口输出电流很小,直接驱动LED等,当然很暗。必要再外接放大电路。简单的放*
C51单片机应用与C语言程序设计(第2版)电子社
热心网友
时间:2022-06-29 19:06
菜鸟小弟啊。我无语啊!我给你写个吧,在你的基础上,这样能达到2.5M的闪烁
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void init();
uchar a=0;
main()
{ init();
while(1)
{ //P0=0XFF;
if(a==50) //!!!!!!!!50*50=2500MS.
{
P0=0x00; //P0控制LED,低电平有效。
// init();去掉init()因为前边已经初始化了,多此一举!
//P0=0XFF;//P0从低电平到高电平,只是一个指令的时间.相当于动态显示,当然是微弱的!
}
if(a==100)
{a=0;P0=~P0;}
}
}
void init()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
TR0=1;
ET0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}