简单的C语言流水灯程序
流水灯电路的制作

流水灯电路的制作流水灯是一种光电转换装置,通过一系列的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灯是否能够像流水灯一样依次点亮和熄灭。
(08)使用if语句控制p2口LED流水灯

EA
一、MCS-51单片机的存储器及其结构
单元地址 2FH 2EH 2DH 2CH 2BH 2AH 7FH 77H 6FH 67H 5FH 57H 7EH 76H 6EH 66H 5EH 56H MSB 7DH 75H 6DH 65H 5DH 55H 位地址 7CH 74H 6CH 64H 5CH 54H LSB 7BH 73H 6BH 63H 5BH 53H 7AH 72H 6AH 62H 5AH 52H 79H 71H 69H 61H 59H 51H 78H 70H 68H 60H 58H 50H
EA
一、MCS-51单片机的存储器及其结构
1.程序存储器 MCS-51单片机具有64kB程序存储器寻址空间,它是用于存放用户程序、 数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接 ,空间地址为64kB,此时单片机的EA端必须接地。强制CPU从外部程序存储器 读取程序。对于内部有ROM的8051等单片机,正常运行时,EA则需接高电平, 使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转 向外部的程序存储器读取程序。 8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复 位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但 在程序存储中有些特殊的单元,这在使用中应加以注意: 其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从 0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元 中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
• • • • • • • • • • • • • •
/******************************************************* 闪烁灯函数 ********************************************************/ void flash_LED(void) { unsigned char i; for(i=0;i<4;i++) { P2=0xff; //P2=1111 1111,关闭所有LED delay_2(); P2=0x00; //P2=0000 0000,打开所有LED delay_2(); } }
(完整word版)单片机C语言程序设计实训100例

《单片机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制作流水灯

使用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灯的亮灭状态,并执行延时函数实现等待效果,如此反复,就可以实现流水灯的效果,且可以实现任意的流水灯的效果。
单片机流水灯所有程序

#define unit unsigned int unit i,j;
void delay1s();
sbit led=P1;
sbit led仁PMO;
sbit led2=P1A1;
sbit led3=P1A2;
sbit led4=P1A3;
sbit led5=P1A4;
{
unit i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
用数组实现流水灯循环,依次点亮,然后依次熄灭
#include<reg52.h>
#define uchar unsigned char
//char是字符数组
#define unit unsigned int unit num;
头文件宏定义端口循环永不停止voiddelaymsunitxms用循环左移指令实现流水灯延迟05s下一灯亮led31
#include<reg52.h>
#define uchar unsigned char
//char是字符数组
#define unit unsigned int
uchar num;
sbit led仁PMO;
for(j=110;j>0;j--);
}流水灯
#include<reg52.h>
#define unit unsigned int unit i,j;
void delay1s();
sbit led=P1;
sbit led仁PMO;
sbit led2=P1A1;
sbit led3=P1A2;
(完整版)51单片机流水灯程序
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);}。
3.3 任务2 8位led闪流水灯
预留一定的安全系数。一般对LED发光二极管驱动采用的限流
电阻都要比采用10 mA计算出的大,常用的典型值为470 Ω。 硬件连接上,每个LED发光二极管对应单片机的一个唯一
的输出引脚,即单片机的一个输出端口(P0、P1、P2或P3)就能
够控制8个LED发光二极管。当相应引脚输出为低时,电流从 VCC流入单片机,LED发光二极管开始发光,发光亮度由匹配
模块3 并行I/O口应用与C语言基础
模块3 并行I/O口应用 与C语言基础
任务3 控制8个LED发光二极管闪烁
任务4 流水灯 习题3
模块3 并行I/O口应用与C语言基础
51系列单片机有4个I/O端口,每个端口都是8位双向口, 共有32根引脚。每个端口都包括一个锁存器(即专用寄存器 P0~P3)、一个输出驱动器和输入缓冲器。这4个端口称为 P0~P3,通常情况下,这4个端口的每一位都可以作为双向 通用I/O端口使用。如果要在片外扩展存储器,则P2口作为 高8位地址线,P0口作为低8位地址线和双向数据总线分时复 用,也就是P0、P2口的第二功能。P3口除了作为双向通用 I/O接口使用外,每一根线还具有第二种功能。而P1口只能 作为双向通用I/O接口使用。 本模块从开发控制8个LED发光二极管闪烁的应用程序 入手,介绍4个I/O端口的内部结构及其使用方法。开发单片 机应用程序时可以使用汇编语言,但更多的时候使用的是C 语言,因为C语言开发程序高效且可维护性好。
模块3 并行I/O口应用与C语言基础
此外,如果没有限流电阻,LED发光二极管在工作时也会迅
速发热。为了防止LED发光二极管过热损害,也必须采用限 流串联电阻对LED发光二极管的功耗进行限制。表3.1所示为
单片机控制流水灯—switch语句
8
课后任务
•修改程序,使其实现如下功能:按下按键 1,流水灯从左往右循环;按下按键2,流 水灯从右往左循环;按下按键3,所有灯灭。
单片机技术及应用
switch(表达式) { case 常量表达式1:语句组1; case 常量表达式2:语句组2; …… case 常量表达式n:语句组n; default:语句组n+1; }
2 知识准备
在使用switch语句时还应注意以下几点:
1.在case后的各常量表达式的值不能相同,否则会出现错误。 2.在case后,允许有多个语句,可以不用{}括起来。 3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。 4.多个case可以共同使用一个常量表达式。 5.default子句可以省略不用。
case 2:d1=1;d8=0;delay(20000); d8=1;d7=0;delay(20000); d7=1;d6=0;delay(20000); d6=1;d5=0;delay(20000); d5=1;d4=0;delay(20000); d4=1;d3=0;delay(20000); d3=1;d2=0;delay(20000); d2=1;d1=0;delay(20000); d1=1;break;
知识与技能 2. switch语句的含义及用法
3.用switch语句编程控制流水灯
汇报展示
1.作品展示(可以为实物作品展 示、PPT汇报、简报、作业等形 式)
2. 语言流畅,思路清晰
评价等级
完成任务最终评价等级
(评价参考:自评20%、组评30%、师评50%)
7
任务小结
•学生小结:总结自己收获; •教师小结:强调程序的核心思想,编 程的要点,以及程序错误查找方法。
红色led灯c语言程序
红色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个位。