流水灯程序简单又详细

合集下载

51单片机流水灯程序

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 led1=P1^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 intuchar 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);for(i=0;i〈8;i++){P1=a;delay(100);a=_cror_(a,1);}}}4#include<reg52.h>#include 〈intrins。

流水灯程序

流水灯程序

图1流水灯硬件原理图从原理图中可以看出,假如要让接在PLO 口的LEDI 亮起来,那么只要把 P1.0口的电平变为低电平就可以了;相反,假如要接在PLO 口的LEDl 熄灭,就 要把PLO 口的电平变为高电平洞理,接在P1.1~PL7 口的其他7个LED 的点 亮和熄灭的方法同LED1。

因此,要实现流水灯功能,我们只要将发光二极管 LED1-LED8依次点亮、熄灭,8只LED 灯便会一亮一暗的做流水灯了。

在此 我们还应留意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很 短,我们在掌握二极管亮灭的时候应当延时一段时间,否则我们就看不到“流水” 效果了。

3.软件编程单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后, 我们还不能看到流水灯循环点亮的现象,我们还需要告知单片机怎么来进行工PlO POO Pll POl PlJ POi PlJ P03 Pl* PO* P15 PO 5 Pl 3PO 4 P17 λ!SS>C51POT am PJO nττoPnP22 Il pn IO P” P25 I∑∖T> PY P27Xl X :XXD!XD KD ALEP TlPSHT∖n47Kx8VCCLEDl-M —LED)W LED)LED1 W * LEDS人KLEDj WLED7W-44LEDS-M作,即编写程序掌握单片机管脚电平的凹凸变化,来实现发光二极管的一亮一灭。

软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。

下面我们以最简洁的流水灯掌握功能即实现8个LED灯的循环点亮,来介绍实现流水灯掌握的几种软件编程方法。

3.1位控法这是一种比较笨但又最易理解的方法,采纳挨次程序结构,用位指令掌握Pl 口的每一个位输出凹凸电平,从而来掌握相应LED灯的亮灭。

程序如下:ORG OOOOH ;单片机上电后从0000H地址执行AJMPSTART ;跳转到主程序存放地址处ORG 0030H ;设置主程序开头地址START : MOV SP , #60H ;设置堆栈起始地址为60HCLRPl.0;PLO输出低电平,使LEDl点亮ACALL DELAY ;调用延时子程序SETB P1.0;P1.0输出高电平,使LEDl熄灭CLR Pl.l ;P1.1输出低电平,使LED2点亮ACALL DELAY ;调用延时子程序SETB Pl.l ;P1.1输出高电平,使LED2熄灭CLR P1.2;P1.2输出低电平,使LED3点亮ACALL DELAY ;调用延时子程序SETB P1.2;P1.2输出高电平,使LED3熄灭CLR P1.3 ;P1.3输出低电平,使LED4点亮ACALL DELAY ;调用延时子程序SETB P1.3;P1.3输出高电平,使LED4熄灭CLR Pl.4 ;P1.4输出低电平,使LED5点亮ACALL DELAY ;调用延时子程序SETB P1.4;P1.4输出高电平,使LED5熄灭CLR P1.5;P1.5输出低电平,使LED6点亮ACALL DELAY ;调用延时子程序SETB P1.5;P1.5输出高电平,使LED6熄灭CLR P1.6 ;P1.6输出低电平,使LED7点亮ACALL DELAY ;调用延时子程序CLR P1.7 ;P1.7输出低电平,使LED8点亮ACALL DELAY ;调用延时子程序SETB P1.7pl.7输出高电平,使LED8熄灭ACALL DELAY ;调用延时子程序START ;8个LED流了一遍后返回到标号START处再循环AJMPDELAY :;延时子程序MOV RO , #255 ;延时一段时间Dl : MOV Rl , #255DJNZRl , $DJNZ RO , DlRET ;子程序返回END ;程序结束3.2循环移位法在上个程序中我们是逐个掌握Pl端口的每个位来实现的,因此程序显得有点简单,下面我们采用循环移位指令,采纳循环程序结构进行编程。

多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序流水灯最原始下面是一个最基本的流水灯程序,使用了51单片机的寄存器编程方法。

include "reg51.h"sbit p0=P1^0;sbit p1=P1^1;sbit p2=P1^2;sbit p3=P1^3;sbit p4=P1^4;sbit p5=P1^5;sbit p6=P1^6;sbit p7=P1^7;void mdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++)void main()while(1)P1=0;p0=1;mdelay(1000);p0=0;p1=1;mdelay(1000);p1=0;p2=1;流水灯位左移在流水灯的基础上,我们可以通过左移位的方式来实现流水灯的效果。

void main()unsigned char led = 0x01.// 初始化led为xxxxxxxxwhile(1)P1 = ~led。

// 取反输出,因为我们的电路是低电平亮灯mdelay(1000);led <<= 1.// 左移一位if(led == 0) // 如果led变为0了,说明已经左移到最后一位了,需要重新开始led = 0x01;流水灯移位函数为了方便实现流水灯的位移,我们可以封装一个移位函数。

void shift_left(unsigned char *led。

unsigned char n)for(unsigned char i=0.i<n。

i++)led <<= 1;if(*led == 0)led = 0x01;void main()unsigned char led = 0x01;while(1)P1 = ~led;mdelay(1000);shift_left(&led。

流水灯控制流程图

流水灯控制流程图

流水灯控制流程图
由于没有更加具体的信息提供,因此以下是一个较为简单的流水灯控制流程图,供参考:
1. 开始
2. 初始化控制器和流水灯
3. 设置流水灯状态,可以是正向或反向移动
4. 等待一段时间,以控制流水灯移动速度
5. 修改流水灯状态,让灯珠进行位移
6. 判断流水灯是否到达边界
1. 是:改变流水灯移动方向
2. 否:继续移动
7. 返回步骤4
8. 结束
注意事项:
- 步骤3和5需要根据具体要求进行修改,例如流水灯的颜色、数量、灯珠个数等。

- 步骤4的等待时间需要根据具体控制器和流水灯的响应时间进行调整。

- 步骤6的判断条件需要考虑边界对应的灯珠位置和移动方向。

单片机-流水灯的程序

单片机-流水灯的程序
再来看函数特性:
unsigned char _crol_( unsigned char a, unsigned char b ) unsigned char:这种函数叫做有返回值,带参数的函数。也就是说程序
执行完这个函数后,通过它内部的某些运算而得出一个新值,该函数 最终将新值返回给调用它的语句。
a= _crol_(a,1);他的意思就是讲a循环向左移动一位。
#define uchar unsigned char
uint i,j; uchar Led;
void main()
{ Led = 0xfe;
while(1)
{ P2 = Led;
for(i=1;i<800;i++) for(j=1;j<800;j++);
Led = Led << 1; if(P2 == 0x00 ) {Led =
led4=0; delay(120);
led5=0 ; delay(120);
led6=0; delay(120);
led7=0;
delay(120); led8=0;
第六页,共18页。
delay(120); led1=1; led2=1; led3=1; led4=1; led5=1; led6=1; led7=1; led8=1; }
0xfe; } }
}
第十四页,共18页。
方法四:利用移位操作实现流水灯(8位二极管循环点亮)
相关知识
一、C51中库函数-crol-的应用 “_crol_”是一个函数名,是51单片机自带的一个内部函数,
包含在C51头文件“intrins.h”中。也就是说如果在程序中要用到这个

流水灯C语言程序

流水灯C语言程序

流水灯C语言程序流水灯是一种常见的电子显示效果,通常用于展示灯光的流动效果。

在C语言中,我们可以通过控制单片机的IO口来实现流水灯的效果。

以下是一个标准格式的C语言程序,用于实现流水灯效果。

```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define LED_COUNT 8 // 流水灯的数量#define DELAY_MS 500 // 每一个灯亮起的延迟时间(毫秒)int main() {int leds[LED_COUNT] = {0}; // 存储每一个灯的状态,0表示灭,1表示亮 int i, j;while (1) {// 灯往右挪移for (i = LED_COUNT - 1; i > 0; i--) {leds[i] = leds[i - 1];}leds[0] = 1;// 输出灯的状态for (i = 0; i < LED_COUNT; i++) {if (leds[i]) {printf("*"); // 亮的灯用*表示} else {printf(" "); // 灭的灯用空格表示}}printf("\n");// 延迟一段时间usleep(DELAY_MS * 1000);// 清空屏幕system("clear");}return 0;}```上述程序使用了C语言的基本语法和系统函数,实现了一个简单的流水灯效果。

程序中的`LED_COUNT`表示流水灯的数量,可以根据实际需求进行调整。

`DELAY_MS`表示每一个灯亮起的延迟时间,单位为毫秒。

在程序的主循环中,通过不断改变灯的状态和输出屏幕,实现了流水灯的效果。

首先,灯往右挪移,即将前一个灯的状态赋值给后一个灯,最后一个灯的状态设置为亮。

几种流水灯程序

几种流水灯程序

几种流水灯程序1. 基础流水灯程序:用来控制1个led灯,使其呈现流水灯的效果,代码如下: int led = 13; // 让led连接到电路的13号引脚void setup(){pinMode(led, OUTPUT); // 设置13号引脚的模式为输出}void loop(){digitalWrite(led, HIGH); // 让led灯亮起来delay(1000); // 等待1秒digitalWrite(led, LOW); // 让led灯熄灭int led1 = 13;int led2 = 12;int led3= 11;int led4 = 10;void setup (){pinMode (led1, OUTPUT);pinMode (led2, OUTPUT);pinMode (led3, OUTPUT);pinMode (led4, OUTPUT);}void loop (){digitalWrite (led1, HIGH);delay (500);digitalWrite (led1, LOW);digitalWrite (led2, HIGH);delay (500);digitalWrite (led2, LOW);digitalWrite (led3, HIGH);delay (500);digitalWrite (led3, LOW);digitalWrite (led4, HIGH);delay (500);digitalWrite (led4, LOW);delay (1000);}3.调节速度的流水灯程序:将第一个流水灯程序增加一个模拟变量,使得可以即时调节灯泡亮度以及闪烁速度,以及可以控制单个led灯或多个led灯,其代码如下:4.设置模式的流水灯程序:将流水灯程序改进,使得应用于不同的场景,可以调节闪烁模式,如快速,慢速,长亮等,其代码如下:。

第2讲(二)流水灯程序设计

第2讲(二)流水灯程序设计

的第 0 为赋值 0,其他位赋值 1,即 1111 1110,也就是 0xfe 了。它实现了点亮第一个 LED
灯。
上面的方法虽然容易想到,但是程序也太长了吧,有没有好一点的方法呢?有的,下面我们 用 C51 即单片机 C 语言提供的一个函数来实现流水灯。
步骤四:其他方法实现流水灯。
我们先直接改写程序,然后再进行解释。 #include<reg52.h> #include<intrins.h> //循环移位函数定义在该头文件中,要想使用该函数必须先包含此头文件
第 3 页,共 7 页
为单片机知识普及而努力!
邢台学院嵌入式系统实验室
到这里你是不是觉得上面那么多位定义很麻烦,其实还有一种对 P0 口整体赋值的方法,被
称为总线方法。例如上面的程序可以改写为: #include<reg52.h> void main() {
P0 = 0xaa; //利用总线方法给端口赋值 } 其中,语句“P0 = 0xaa;”中的 0xaa 是十六进制数,C 语言中十六进制数都以 0x 开头。十 六进制中用 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 来表示十进制中的 0 到 15, 其中 a 表示 10,即二进制的 1010,那么 0xaa 就表示 1010 1010,这八位数从右到左分别对 应 P0 口的 0 到 7 位,如下图:
//进行空循环,来消耗 CPU 周期,达到延时的效果
led1 = 1; for(i=1000;i>0;i--)
for(j=100;j>0;j--); }
可以看出,是我们加入了循环函数来让 CPU 进行其他操作的,这样便实现了一个 LED 灯的
闪烁效果。但是同样的双重 for 循环语句我们却写了两遍,显得很臃肿,我们可以将 for 循
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

流水灯原理图
流水灯程序
其实流水灯程序就是你只要搞懂端口的高低电平是怎么一回事,置为1 即将该点即为高电平,置0即为低电平,低电平一般是0.3V,同时要知道发光二极管在满足一定电压的同时正常发光电流为10~15mA左右,低于该电流二极管发光亮度会很暗。

比如用一个5V 的电源驱动以个发光二极管其亮度会很亮,当串联一个300欧的电阻时,二极管两端的电压大概为2.3V, 此时电阻两端的电压为5.0-2.2=2.8V;电路中的电流为2.8V/300=9.3ma,接近于正常情况下的发光电流,当串联1K电阻时,则基本就不会光。

下图即为分别串联电阻为R=300,100,500.欧姆的情况下个发光二极管的亮度。

相关文档
最新文档