简单的C语言流水灯程序
- 格式:doc
- 大小:21.00 KB
- 文档页数:2
流水灯电路的制作流水灯是一种光电转换装置,通过一系列的LED灯组成,可以在不同的时间间隔内依次点亮,形成像水流一样的效果,因此得名“流水灯”。
下面我将介绍流水灯电路的制作过程。
首先,我们需要准备以下材料和工具:1. Arduino控制板(如Arduino UNO)2. Jumper wires(杜邦线)3.电阻(220欧)4. LED灯(3mm直径和5mm直径,不同颜色)5.面包板6.铁丝钳和钳子(辅助工具)接下来,按照以下步骤制作流水灯电路:1. 将Arduino控制板插入面包板的两侧,并通过杜邦线将GND(地线)引脚与面包板上的负极连接。
2.将220欧的电阻通过杜邦线连接到面包板上,一端与GND(地线)相连,另一端空置。
3.通过杜邦线将LED灯连接到面包板上。
LED灯有一个长脚和一个短脚,长脚是阳极(正极),短脚是阴极(负极)。
将LED灯的阳极连接到电阻的空置端,阴极连接到GND(地线)。
4.重复步骤3,将其他的LED灯连接到面包板上。
你可以选择不同颜色的LED灯,以获得更丰富的效果。
确保每个LED灯的阳极连接到电阻的空置端,而阴极连接到GND(地线)。
5. 通过杜邦线将Arduino控制板的数字引脚与面包板上的LED灯连接。
根据你想要的效果,可以将LED灯连接到不同的数字引脚上。
例如,将第一个LED灯连接到数字引脚2,第二个LED灯连接到数字引脚3,依此类推。
6. 将Arduino控制板通过USB线连接到计算机,并开启Arduino IDE编程软件。
7. 在Arduino IDE中编写相应的代码,以控制流水灯的效果。
以下是一个简单的流水灯代码示例:```const int ledPin1 = 2; // 设置第一个LED灯的数字引脚const int ledPin2 = 3; // 设置第二个LED灯的数字引脚const int ledPin3 = 4; // 设置第三个LED灯的数字引脚//以此类推...void setupinMode(ledPin1, OUTPUT);pinMode(ledPin2, OUTPUT);pinMode(ledPin3, OUTPUT);//初始化其他LED的引脚void loodigitalWrite(ledPin1, HIGH); // 点亮第一个LED灯delay(100); //等待100毫秒digitalWrite(ledPin2, HIGH); // 点亮第二个LED灯delay(100); //等待100毫秒digitalWrite(ledPin3, HIGH); // 点亮第三个LED灯delay(100); //等待100毫秒//以此类推...逐个点亮其他LED灯digitalWrite(ledPin1, LOW); // 关闭第一个LED灯delay(100); //等待100毫秒digitalWrite(ledPin2, LOW); // 关闭第二个LED灯delay(100); //等待100毫秒digitalWrite(ledPin3, LOW); // 关闭第三个LED灯delay(100); //等待100毫秒//以此类推...逐个关闭其他LED灯```8. 将上述代码上传到Arduino控制板,并观察LED灯是否能够像流水灯一样依次点亮和熄灭。
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第 01 篇基础程序设计01 闪烁的LED/*名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h〉#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x-—){for(i=0;i〈120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include〈reg51。
h〉#include<intrins。
h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x—-){for(i=0;i〈120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/*名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include〈intrins.h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x——){for(i=0;i〈120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i〈7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51。
单片机流水灯实验(说明:本文为word格式,下载后可自由编辑)一、任务让8个LED灯轮流亮起来,实现流水灯的功能。
二、思路让接在P0.0口的LED灯亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED灯熄灭,就要把P0.0口的电平变为高电平就可以了。
要实现流水灯功能,只要将8个LED灯依次点亮、熄灭,8只LED 灯便会一亮一暗的做流水灯了。
我们应该注意一点,由于单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
三、步骤1、用proteus画电路图。
如下图:2、用keil建工程。
1)运行keil C51软件,点击Project菜单新建项目,选择为AT89C52的单片机型号。
然后单击File选择New新建程序文件,保存成.c 文件,右击Source Group1添加入程序文件。
2)用C语言编写程序代码如下:#include <reg52.h>void delay (unsigned char tmp);code unsigned char tmpled[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void main(void){unsigned char i;while (1){for(i=0;i<8;i++){P0=tmpled[i];delay(50);}}}void delay(unsigned char tmp){unsigned char i,j;i=tmp;while(i){i--;j=255;{j--;}}}3)右击Target 1打开设置,Output菜单下勾选上create hex file。
4)调试运行程序后,在proteus中双击单片机,添加hex文件,运行看到流水的的效果。
四、实验中遇到的问题。
1、用proteus仿真时候,发现错误:error variable not found parsing property resistance of RN1-Rnvalue expected for RN1-R (n=1~8)而且led灯亮度十分微弱。
使用74LS164制作流水灯单片机初学者对于流水灯实验一定特别的熟悉,这个实验逻辑清晰,效果明显,在各类单片机以及微机控制相关材料中都会进行讲解。
当我们学习了一段时间单片机之后,或者在进行单片机系统设计时,会发现51单片机的引脚有时并不是很够用,有时候需要尽量节省单片机I/O引脚。
如何节省I/O引脚是我们在设计单片机系统时,经常需要考虑的一个问题。
下面以8个LED组成的流水灯效果的实现为例,讲解如何节省单片机的I/O引脚。
通常我们会采用如图1所示的电路图,通过单片机直接驱动8个LED,但是这种控制方式消耗了8个单片机引脚。
图1 常规流水灯电路我们也可以使用三八译码器来完成流水灯的效果。
其控制电路图如图2所示(这种控制方式在我之前上传的文档中有详细介绍,感兴趣读者可以查看)。
这种控制方式虽然可以在一定程度上可以节省单片机I/O接口的使用,如下图所示,最少只需要使用3个I/O口。
但是这种方式也存在一定的缺点,这种控制方式只能同时点亮1个LED 灯,如果想实现两个以及以上的LED灯点亮的效果,那么这种电路将无法直接实现效果。
图2 三八译码器拓展I/O口下面我们看一下能够使用其他的芯片,来进一步降低单片机I/O 口的消耗。
使用串行转并行芯片74LS164来制作流水灯效果,其控制原理图如图3所示。
从原理图中可以看出,使用了74LS164芯片控制流水灯之后,只占用了单片机的两个I/O口。
一个用于输出时钟脉冲,另外一个用于输出串行数据。
图3 74LS164控制流水灯原理图与前面采用译码器控制的流水灯相比,使用74LS164控制的流水灯效果具有如下两个显著优点:1.占用单片机I/O口少,最少仅为2个。
2.控制功能强大,74LS164驱动的流水灯点亮的个数没有限制,可以任意数量点亮。
编程思路:单片机以最快的速度通过串口控制8个LED灯的点亮状态,由于此过程极短,人眼无法分辨,通过延时函数稳定输出效果,并延时一定时间,再次以最快的速度通过串口控制8个LED灯的亮灭状态,并执行延时函数实现等待效果,如此反复,就可以实现流水灯的效果,且可以实现任意的流水灯的效果。
1.第一个发光管以间隔200ms 闪烁。
2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms。
3.8 个发光管来回流动,第个管亮100ms。
4.用8 个发光管演示出8 位二进制数累加过程。
5.8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁 5 次。
重复此过程。
6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}2#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p 仁P1A0;uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a;delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main(){uchar a,i;while(1)a=0xfe;for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);}}}4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a){uint x,y;for(x=a;x>0;x--) for(y=110;y>0;y--);}void main(){uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main(){uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a;delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa;delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300);a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd;delay(300);P1=0xdb;delay(300);P1=0xe7;delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。
红色led灯c语言程序近年来,LED灯越来越普及,同时也出现了各种各样的LED灯,如红色LED 灯、绿色LED灯、蓝色LED灯等等。
相信不少人看到这些LED灯时,会想着自己能不能动手去做一个属于自己的LED灯呢?本文就将详细介绍如何做一个红色LED灯,并编写一个C语言程序来控制它。
所需材料- 红色LED灯一个- 杜邦线若干- 单片机(此处使用AT89C52)- 电路板一块- 100欧姆的电阻一个- 9V电池一个- 电池座一个以上材料可以在淘宝等网站上购买。
电路图接下来,看一下红色LED灯的电路图。
如图所示,将红色LED灯连接在单片机的P1.0口,通过100欧姆的电阻限流,接在9V电池负极上。
在单片机P1.0口输出低电平时,会使得LED灯变亮;输出高电平时,LED灯则熄灭。
C语言程序接下来,为了让大家更好地控制红色LED灯,需要编写一个C语言程序来控制它。
程序:#include <reg52.h>sbit LED = P1^0; // 定义LED所在的IO口void Delay(unsigned int i) // 定义延时函数{unsigned int j, k;for(j = i; j > 0; j--){for(k = 110; k > 0; k--);}}void main(){while(1){LED = 1; // 输出高电平,LED灯熄灭Delay(500); // 延时500msLED = 0; // 输出低电平,LED灯亮起Delay(500); // 延时500ms}}程序分析上述程序总体简单,主要流程包括:定义LED所在的IO口;定义延时函数;实现LED灯的闪烁。
下面就详细分析一下程序。
- 定义LED所在的IO口sbit LED = P1^0;在单片机上进行控制程序时,每个IO口需要先设置其为输入还是输出模式,以及每个IO口对应的寄存器。
以上代码共定义了一个LED变量(变量名随意),其所在的IO口为P1^0即P1的第0个位。