Ⅰ 如何用单片机做流水灯
因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。
电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口,我们这里只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振荡电路组成时钟振荡器。值得注意的是,C2、C3的容量不能与图中数值偏差太大,否则可能引起不起振或振荡不稳定。XTAL的频率可以在4-20MHz之间,不过,频率的变化会导致程序运行速度的变化,这样就需要调整延时子函数的参数。事实上,不调整参数亦可,只是此时延迟时间不再是1秒,其延迟时间会随着XTAL频率的降低而增加。
二、软件部分
本程序包含两个函数,一个是主函数,另一个是延时子函数。源程序如下(为了便于讲解,我们为每行程序加上了编号):
程序各行作用如下:
00行:把AT89C2051的头文件“AT89x051.H”包含进来。
01行:声明Delay()延时子函数,该函数有一个无符号整型参数k,同时函数前面的void表明函数不返回函数值。
02行:延时子函数的开始,同时声明两个无符号整型变量i和j。
不过请注意,这里没有象上期的程序一样,把表示函数开始的“{”单独成行,而是把下一行写在一起了。事实上,写C程序的时候,可以把多行写作一行,C编译器只要遇到分号就认为是一行语句的结束。
当然,我们不能因为C程序有这个特点,就随意把多行合作一行书写,实际书写C程序的时候,还是要养成良好的程序书写习惯,按照约定俗成的原则来书写。
03行:声明for()循环。这个循环的初始条件是i=0,终止条件是i<k,循环计数是每循环一次,用手计数的变量i加1。因此,这个循环的循环次数就是k次。这样,只要改变k的值(即改变Delay()延时子函数的参数k的值),就可以很容易地控制循环次数,从而获得不同的延时时间。
04行:声明嵌套在03循环中的一个新的for()循环,这个循环与上一个循环相似,其循环次数是120次。本循环与上一个循环嵌套后,使得总的循环次数达120×k次。
05行:第一个分号,表示L条空语句,占用一个机器时间,以实现延时的目的。后面的两个“}”中,第一个“}”是04行for()循环的结束标志,程序遇到它时,将自动返回04行,使用于循环计数的变量j加1,同时判断j是否小于120,如果否,则转入05行;第二个是03行for()循环的结束标志,程序遇到它则会返回03行
Ⅱ 求单片机大神帮忙设计一个电路,51单片机制作led呼吸灯的
proteus仿真按理来说是不可能达得到效果的,因为这种仿真得有非常快的处理速度。我刚动手试了下和自己的想法相同,LED只会间断的闪烁。我是用AVR单片机,用51也是一样的。我这个程序也在实物试过效果很好。
*
@演示定时器1的快速PWM输出
@利用快速PWM输出控制LED的亮度变化,达到呼吸灯的效果
*/#include<iom8a.h>
#include"port_set.h"
#include"delay.h"/*********************************************
@函数功能:定时器1初始化
@说明:定时器初始化为快速PWM,TOP为8位(0x00FF)
时钟输入为系统时钟
匹配时OC1A输出0,在TOP时输出1
OC1B为普通端口
输入捕捉触发沿选择下降沿触发捕捉
捕捉中断禁止,通道A比较中断禁止
通道B比较中断禁止,溢出中断禁止
*********************************************/
void Timer1_Init(void)
{
TCCR1A = 0x81;
TCCR1B = 0x89;
OCR1A = (unsigned int)0x0;
OCR1B = (unsigned int)0x0;
ICR1 = (unsigned int)0x0;
TCNT0 = (unsigned int)0x0;
SFIOR |= 0x1;
TIMSK |= 0x0;
}void main(void)
{
unsigned char ocr = 0; //比较值
signed char ddr_flag = 1; //比较值的增长方向
IO_SET_OUT(B,1); //T1的比较输出端口设置为输出
Timer1_Init();
while(1)
{
delay_ms(5);//延时一定时间改变一次比较值
ocr += ddr_flag;
OCR1A = (unsigned int)ocr;
/*改变比较值的增长方向*/
if(ocr>0xFE)
ddr_flag = -1;
else if(ocr<0x1)
ddr_flag = 1;
}
}
Ⅲ 如何用单片机简单制作一个流水灯
工具:STC系列51单片机、串口转换器(USB转TTL 或232转TTL)
材料:实验板一块(可以买现成的,也可以买面包板自己搭建),电阻、LED灯 若干,5V电源等。
以下程序可以直接用Keil C 直接编译执行。
//可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。
//具体实现方法可以参考如下程序:
#include<reg51.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uinta);
voidmain()
{
P1=0xfe;
while(1)
{
//向左循环点亮LED
for(i=0;i<7;i++)
{
P1=_crol_(P1,1);//左移一位,点亮下一位LED
delay(55);
}
//向右循环点亮LED
for(i=0;i<7;i++)
{
P1=_cror_(P1,1);//右移一位,,点亮上一位LED
delay(55);
}
}
}
//延时函数,延时a毫秒
voiddelay(uinta)
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
Ⅳ 如何用单片机简单制作一个流水灯
代码:
#include<reg52.h>
#include <intrins.h>
void delayms(unsigned char ms) // 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
main()
{
unsigned char LED;
LED = 0xff;
P0 = LED;
while(1)
{
delayms(1000);
LED = LED<<1; //循环右移1位,点亮下一个LED
if(LED==0x00)
{
LED=0xff;
}
P0 = LED;
}
}
电路:
就是普通的单片机IO口,采用灌电流方式就行,外接上拉电阻。
Ⅳ 单片机led流水灯实验步骤
一个小的程序是不需要专门绘制流程图的。其实在初学阶段,画好流程图能帮助我们整理好程序设计的脉络,让程序变得有条理。在编程的时候,流程图像一个指路明灯引领着程序的走向,所以应该养成良好的习惯,在编写程序之前,绘制一份流程图。
流程图的绘制方法很简单,一些编程类书籍有过专门的介绍,在本书就不再讲述了。怎样才能达到我们演示的流水灯的效果,就是让P1端口在间隔一段时间后,输出不同的值?假设我们想要的效果是某一时刻,只有一个LED小灯亮,而间隔的时间是一秒,当I/O端口输出高电平的时候,LED小灯是不亮的,当I/O端口输出低电平的时候,LED小灯才亮。如图所示,P1的值用十六进制可以表示为FEH,因为四位二进制数可以表示一位十六进制数。我们得出在不同LED小灯被点亮的时候,P1端口输出的状态程序流程图还是比较简单的,P1口在间隔一段时间之后,输出不同的值,然后返回到程序执行的起点,重新开始执行,这样就会循环往复不断地出现流水的效果。
Ⅵ 我想用单片机控制制作流水灯实物,需要哪些原件
万能板,89C51单片机,MAX232,104电容若干,12MHZ晶振,20P电容2个,串口母座,LED灯若干,1K电阻若干,导线若干,5V直接电源
差不多一般就这么多吧,建议可以网络搜索 51单片机最小系统 也允许能帮到你,谢谢!
Ⅶ 单片机制作呼吸灯的C语言程序怎样编写
#include<reg51.h>
sbit LED0=P0^0;
sbit wei=P1^1;
sbit an=P1^0;
sbit lcden=P1^7;
sbit dianzhen=P1^3;
sbit leden=P1^2;
void Delay(unsigned int t);
void main (void)
{
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
lcden=0;
P0=0x00;
dianzhen=0;
P0=0xff;
wei=0;
an=0;
while (1) //主循环
{
LED0=1;
Delay(150000); //特意加延时,可以看到熄灭的过程
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
}
}
void Delay(unsigned int t)
{
while(t--);
}
Ⅷ 如何用单片机简单制作一个流水灯
1:首先得准备单片机的最小系统;2:安装共阳或者共阴电路外加限流电阻接好硬件;3:使用相应的编程软件将编写好的代码下载到单片机,完后上电运行结果。
Ⅸ 怎么用单片机做LED流水灯
你那里附近有电子元器件市场吗?去那里买就可以了。你是有单片机芯片而已?如果是只有单片机芯片,那你可能要晶振,12M、6M都可以,还要一个5V电源,可以用手机充电器,自己买一个USB接口焊在洞洞板上,流水灯自然要买LED灯了,估计也就1~2毛钱一个,还要买电阻限流,不然LED灯会烧,如果不想直接从单片机取电以保护单片机,可以外接一个驱动芯片,比如74HC573。如果你已经有单片机开发板,那就什么都解决了。
Ⅹ 如何利用单片机设计一个光感小灯
主要是分为采集部分和驱动部分,采集部分对光线进行采集,驱动部分是驱动LED小灯,光线采集可以用光灭电阻,通过单片机的ADC进行光线采集,驱动的话,可以用恒流LED驱动芯片。