1. 单片机 8个LED灯随机闪烁怎么做
1、首先在电脑中新建项目:Keil uVision4 51单片机LED闪烁编程,如下图所示。
2. 下面怎么实现的单片机闪烁
首先,这个程序不会让LED闪烁;如果闪烁,需要加循环语句,如下:
假如P2口接LED 阴极,阳极通过上拉电阻接Vcc的话;
void main() //程序开始
{
while(1)//作用:让下面4条语句往复循环
{
P2 = 0x00; //现在P2口为低电平,LED导通,发光
delay(600); // 相当于等一会;目的是让LED一段时间,不然你看不出变化
P2 = 0xff; //同上,P2口高电平,LED两端都为高电平,不发光;
delay(600); // 同上等待;
}
}
3. 单片机定时器使二极管1S闪烁的实验:TMOD=0x03;TH0=6;TL0=6;//装初值,问题是为什么等于6
TOMD=0x03,是定时器工作方式3,分为两个8为定时器,每个定时器计数最大值为255,计数到最大255,再加1,产生中断,相当于计数从0到256。
假设你的晶振频率为12M,机器周期为1M,那么机器一周期时间为1/f=1/1M=1微秒。定时器3的最大计数为255,最大的计数时间为256微秒,想要以1秒闪烁,TH0=6;TL0=6;每次计数都是记(256-6=250)微秒,中断次数1秒除以250微秒。现在明白为什么初值为6没
4. 单片机流水闪烁灯的实验目的
学习基础知识。
5. 对于下面的51单片机LED闪烁实验C程序,为什么LED会一直不停地闪烁,而不是闪烁一次呢
因为你的代码后面的“空白”处都是复位命令,所以你的代码执行完了就复位了,就闪啦。。
6. 单片机灯闪烁怎样操作的
嘿嘿
俺来帮你解答
1
单片机灯闪烁的实现方法:
主要就是控制小灯的亮和灭的频率
可以让小灯
1秒钟
亮一次
灭一次
也可以控制小灯
2秒钟
亮一次
灭一次
2具体实现:
利用软件延时
或硬件定时器定时
来控制小灯的亮和灭的时间。
满意就选满意回答喽
7. 如何用单片机写5个彩灯依次闪烁
如果数码管是共阴极的,则是把其中一个置高就会让该led亮起来。然后延时(没有延时的话是看不到效果的),再让下一个灯亮起来,再延时,……以此类推,就可以了!
电路给我,我可以帮你写程序!
8. 单片机流水灯实验原理
上一节我们介绍了什么是总线的方法,以及如何通过十六进制来控制IO口。并把我们的之前单点操作的流水灯进行了改进,成为了一个新的更加简洁的程序。这回,就再用总线方法,来实现流水灯的更加多样化的操作。
这次,我们要实现正向流水结束后再反过来流水,如此循环。然后再间隔闪烁。然后再累积流水,最后结束。
正向流水结束,再反过来。这个如何实现呢,我们需要使用到一些运算方法。
第一个是移位指令<<。
由于数字对比不强,看的不是很清晰,所以把数字给换成红色了。
<<这个标志符的意思是,向左移动一位,就像下边这样:
1111 1111》1111 111_
移动完成后,会发现,最低位空出来了,此时程序会自动去填补一个0。于是就成了:
1111 1111》1111 111_》1111 1110
第一次移位1111 1110,第二次在第一次基础上移位1111 1100,第三次在第二次基础上移位1111 1000,如此循环,就可以一直把所有位都变成0。
我们在看下一句"|",这个符号是或的意思,我们知道,逻辑中的或,是说只要有其一为一,结果就是一。所以,我们把1100|0001,结果就是头两个一和最后一个一留下来,第三位因为都是0,所以就是0.结果就是1101了。当再次移位后,数据就变成1010了,我们再次跟0001取或,最后一位就再次置1,结果就是1011,从结果上看,1110》1101》1011……就是0在不断的左移。
通过这个方法,可以让每一位都会单独置零。然后再给以一定时间的延时,就会看到流水灯了。
如果我们不赋初值0xfe会出现什么情况?
就会出现,移位产生一个0,在或运算时就会被重新置1,如此循环,就进入不到第二个LED,也就不会出现流水灯了。可以自己尝试下。
向右流水,效果是一样的,需要注意的是初值更改为左侧为0,就是0x7f,0111 1111,然后移位符号>>,还有取或的语句需要用0x80,1000 0000.
基本上是在左移位的基础上稍作修改即可。
接下来是闪烁的。
闪烁,我们用的是间隔LED的方法,就是隔一个亮一个,端口输出是1010 1010。翻译成十六进制就是0xaa。这次用到的是一个取反的运算,就是把每一位的0变成1,1变成0,然后延时一段时间,再次取反,循环几个周期,就看起来像是不断闪烁。取反的操作相对好理解一些,就是这一位,现在是1,那么取反后就是0,就是0和1的变换。
最后是一个累积点亮LED。
这个程序就是把第一个我们向左移位的函数,进行了更改,取消了赋初值,不用取或了,这样就可以对比着理解,各个语句的作用,如果不使用,会产生什么结果。如果我们的第一个函数不用取或这一步,那最终输出结果就和这个现象一样了。
所以,我们在写程序时,需要认真,仔细分析自己需要的结果,然后对照程序进行简单的演算。保证每一段都是可以输出想要的结果,不然累积到最终,几百行的代码,看起来就会头疼的,尤其是在没有标注释的情况下,有时就会忘记自己为什么要写这一句。
好的,这篇先说到这里,有问题或建议可以留言或私信给我。
想了解更多精彩内容,快来关注小亮谈电气
更多多内容,欢迎关注百家号:小亮谈电气。微信公众号:电气学苑。
9. 单片机实验 :实现LED灯的循环依次闪烁
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
void delay(uint z)//延时2ms程序
{uint x,y;
for(x=z;x<z;x++)
for(y=0;y<110;y++);
}
void main()
{
while(1)
{
P1_3=1;
P1_0=0;
delay(250);
P1_0=1;
P1_1=0;
delay(250);
P1_1=1;
P1_2=0;
delay(250);
P1_2=1;
P1_3=0;
delay(250);
}
}
方法2:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
void main()
{ TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
while(1)
{if(j==5)
P0_0=0;
if(j==10)
{P0_1=0;
P0_0=1;}
if(j==15)
{P0_2=0;
P0_1=1;
}
if(j==20)
{P0_3=0;
P0_2=1;
j=0;
}
}
}
void timer0_init() interrupt 1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
j++;
}
10. 51单片机LED灯闪烁实验,具体分析一下以下程序每一步的作用,完全看不懂。。。
#include<reg51.h>
void delay(unsigned int i);
main() //主函数
{
P2=0x55; //P2口:0101 0101 从左到右:第一个口低电平,第二个口高电平。。。。
delay(600); //延时600,不延时你来不及看见灯亮
P2=0xaa; /*P2口输出端取反,1010 1010 高电平变低电平,低电平变高电平,(原来亮的关掉,原来不亮的亮)*/
delay(600);
}
void delay(unsigned int i) //这个是延时函数
{
unsigned char j;
for(i;i>0;i--)
for(j=255;j>0;j--) ;
}
这样应该明白了吧!不过你这个程序,按一下复位(或者打开一次电源)只亮一下。加个循环就可以不停的闪啦!