51单片机是较为简单的8位单片机,意思是一次能处理8位2进制数据。这一次闪烁LED灯就是让单片机的引脚定时输出1或0。
51单片机有4个IO端口,每一个端口分别由P0,P1,P2,P3,4个寄存器控制。我们假设输出0时LED灯点亮,我们用单片机驱动时就需要让端口的某一位置零。例如我们用P1口的第0位闪烁点亮,我们需要给P1口的第0位定时置零。在的单片机旋转式led中遇到的问题及解决措施如下:
1、在的单片机旋转式led中遇到的问题:旋转不平滑或卡顿:这可能是因为程序不够优化,导致在更新LED状态时产生了延迟。LED灯颜色异常:这可能是由于电压不稳定或信号干扰引起的。
2、在的单片机旋转式led中遇到的解决措施如下:解决方案可能包括选择合适的控制器、调整数据传输参数,以及进行严密的防干扰设计等。解决方案可能包括重新设计电路板、更换LED引脚布局以及优化光学设计。给你个C语言的\x0d\#include//头文件\x0d\sbitjian=P1^0;\x0d\sbitLED=P1^1;\x0d\voidys(unsignedint);//声明延时函数\x0d\voidmain()\x0d\{\x0d\while(1)\x0d\{\x0d\LED=1;//让LED点亮,其实这条语句可以不写,因为单片机的IO口默认就是高电平\x0d\if(jian==0)//判断按键是否按下\x0d\{\x0d\ys(1000);//延时消抖\x0d\if(jian==0)//再次判断按键是否按下,这条语句很有必要。\x0d\{\x0d\LED==0;//LED熄灭\x0d\}\x0d\}\x0d\}\x0d\}\x0d\/延时函数/\x0d\voidys(unsignedinti)\x0d\{\x0d\unsignedx;\x0d\for(x=0;xfor(x=0;x回答于 2022-12-14#include <reg51h>
#include <intrinsh>
#include "74hc595h"
#include "delayh"
unsigned char w,flag=0;
void delay0_5s();
void delay_t(unsigned char t);
void led();
void main()
{
PT0 = 1;
EA = 1;
EX0 = 1;
EX1 = 1;
IT0 = 1;
IT1 = 1;
TMOD = 0x01;
w = 0x01;
led();
}
void led()
{
while(1)
{
P1 = w;
delay_t(2);
if(flag==0)w = _crol_(w,1);
if(flag==1)w = _cror_(w,1);
}
}
void delay0_5s()
{
unsigned char i;
for(i=0;i<0;i++)
{
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(!TF0);
TF0=0;
}
}
void delay_t(unsigned char t)
{
unsigned char i;
for(i=0;i<t;i++) delay0_5s();
}
void int_0() interrupt 2 //反向点亮LED
{
flag=1;
}
void int_1() interrupt 0 //正向点亮LED
{
flag=0;
}嘿嘿
这两种方法
都是可以的
都可以驱动LED指示灯。
1
关于你的LED怎么都不亮:
原因可能是连接的方法不太对,你可以参考下述连接方式,检查一下你的电路。
方法1:
用8050的三极管做开关电路,三极管的基极接P20,然后用集电极通过LED接5v电源,发射极通过220欧姆电阻接地。执行SETB
P20
指令可以点亮led。
方法2:
是用P10直接驱动led,应该让led另一端通过220欧姆电阻接5v电源,执行CLR
P10
指令
会点亮led。
呵呵
赶快再试试吧
满意后要选满意回答啊
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)