当前位置:文档之家› 程序简单花样齐全的流水灯

程序简单花样齐全的流水灯

利用单片机实现五种花样流水灯

1.硬件电路图设计

本文仿真软件采用Proteus和Keil C51。其中Keil Proteus可以仿真、分析(SPICE)各种模拟器件和集成电路,C51可完成程序的编译链接和仿真调试,并能生成hex文件。通过Keil C51与Proteus的联调便可实现仿真实验。

硬件电路采用单片机最小系统(晶振电路+复位电路),利用P0口作为数据输出端口。由于P0口是一个8位漏极开路的的双向I/O口,必需外接上拉电阻才能有高电平输出。当单片机输出高电平时对应的LED灯熄灭,当输出低电平时则点亮。

2.C语言程序

程序定义了五个数组分别对应五种不同的花样流水灯方式,其中每个数组中的每个元素控制P0口的壮态,从而控制每个LED灯的壮态。另外,程序将流水灯每个壮态的间隙时间进行了宏定义,这使得修改每个壮态的保持时间十分方便。

#include //包含单片机头文件

#define uint unsigned int

#define uchar unsigned char

#define DataPort P0 //定义P0为数据输出端口

#define TIME 30 //设定流水灯每个状态的间隙时间

/************us级延时程序*************/

void Delayus2x(uint n)

{

while(--n);

}

/***********ms级延时程序*************/

void Delayms(uint n)

{

while(--n)

{Delayus2x(245);Delayus2x(245);}

}

/********************五个数组分别对应五种不同的流水灯******************/

uchar DB1[15]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; uchar DB2[15]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe}; uchar DB3[15]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7}; ucharDB4[36]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0x7d,0x7b,0x77,0x6f,0x5f,0x3f,0x3e, 0x3d,0x3b,0x37,0x2f,0x1f,0x1e,0x1d,0x1b,0x17,0x0f,0x0e,0x0d,0x0b,0x07,0x06,

0x05,0x03,0x02,0x01,0x00};

ucharDB5[36]={0x80,0x40,0xc0,0xa0,0x60,0xe0,0xd0,0xb0,0x70,0xf0,0xe8,0xd8,0xb8,0x78,0xf8, 0xf4,0xec,0xdc,0xbc,0x7c,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e,0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f,0xff};

/****************************主函数***************************************/

void main(void)

{

uint i=0;

while(1) //死循环,流水灯依次在五种方式中循环

{

DataPort=0xff; //灯全灭

Delayms(TIME);

for(i=0;i<15;i++)

{

DataPort=DB1[i];

Delayms(TIME);

}//第一种方式

for(i=0;i<15;i++)

{

DataPort=DB2[i];

Delayms(TIME);

}//第二种方式

DataPort=0xff;

Delayms(TIME);

for(i=0;i<15;i++)

{

DataPort=DB3[i];

Delayms(TIME);

}//第三种方式

DataPort=0xff;

Delayms(TIME);

for(i=0;i<36;i++)

{

DataPort=DB4[i];

Delayms(TIME);

}//第四种方式

DataPort=0x00;

Delayms(TIME);

for(i=0;i<36;i++)

{

DataPort=DB5[i];

Delayms(TIME);

}//第五种方式

}

}

3.软件仿真图

3.1第一种

3.2 第二种

3.3 第三种

3.4(略)3.5(略)

程序简单花样齐全的流水灯

利用单片机实现五种花样流水灯 1.硬件电路图设计 本文仿真软件采用Proteus和Keil C51。其中Keil Proteus可以仿真、分析(SPICE)各种模拟器件和集成电路,C51可完成程序的编译链接和仿真调试,并能生成hex文件。通过Keil C51与Proteus的联调便可实现仿真实验。 硬件电路采用单片机最小系统(晶振电路+复位电路),利用P0口作为数据输出端口。由于P0口是一个8位漏极开路的的双向I/O口,必需外接上拉电阻才能有高电平输出。当单片机输出高电平时对应的LED灯熄灭,当输出低电平时则点亮。 2.C语言程序 程序定义了五个数组分别对应五种不同的花样流水灯方式,其中每个数组中的每个元素控制P0口的壮态,从而控制每个LED灯的壮态。另外,程序将流水灯每个壮态的间隙时间进行了宏定义,这使得修改每个壮态的保持时间十分方便。 #include //包含单片机头文件 #define uint unsigned int #define uchar unsigned char #define DataPort P0 //定义P0为数据输出端口 #define TIME 30 //设定流水灯每个状态的间隙时间 /************us级延时程序*************/ void Delayus2x(uint n)

{ while(--n); } /***********ms级延时程序*************/ void Delayms(uint n) { while(--n) {Delayus2x(245);Delayus2x(245);} } /********************五个数组分别对应五种不同的流水灯******************/ uchar DB1[15]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; uchar DB2[15]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe}; uchar DB3[15]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7}; ucharDB4[36]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0x7d,0x7b,0x77,0x6f,0x5f,0x3f,0x3e, 0x3d,0x3b,0x37,0x2f,0x1f,0x1e,0x1d,0x1b,0x17,0x0f,0x0e,0x0d,0x0b,0x07,0x06, 0x05,0x03,0x02,0x01,0x00}; ucharDB5[36]={0x80,0x40,0xc0,0xa0,0x60,0xe0,0xd0,0xb0,0x70,0xf0,0xe8,0xd8,0xb8,0x78,0xf8, 0xf4,0xec,0xdc,0xbc,0x7c,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e,0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f,0xff}; /****************************主函数***************************************/ void main(void) { uint i=0; while(1) //死循环,流水灯依次在五种方式中循环 { DataPort=0xff; //灯全灭 Delayms(TIME); for(i=0;i<15;i++) { DataPort=DB1[i]; Delayms(TIME); }//第一种方式 for(i=0;i<15;i++) { DataPort=DB2[i];

单片机流水灯程序

单片机流水灯程序 流水灯是一种简单而常见的电子技术实验项目,也是学习 掌握单片机编程的基本操作之一。本文将介绍如何使用C语 言编写单片机流水灯程序,并通过Markdown文本格式输出。硬件准备 在开始编写流水灯程序之前,我们需要准备以下硬件设备: 1.单片机开发板(如:Arduino、STM32等) 2.LED灯(可根据自己的需求选择,一般使用红色、 黄色、绿色等常见颜色的LED灯即可) 3.杜邦线(用于连接单片机和LED灯) 程序编写 引入头文件 首先,我们需要引入相应的头文件,以便使用单片机相关 的功能库和定义常量。 #include

定义引脚 接下来,我们需要定义引脚,将LED灯的接口与开发板的引脚连接起来。 #define LED_PIN_1 2 #define LED_PIN_2 3 #define LED_PIN_3 4 #define DELAY_TIME 500 在这个例子中,我们使用了3个LED灯,分别连接到开发板的2、3、4号引脚。DELAY_TIME用于控制每个灯亮起的时间间隔,单位是毫秒。 初始化引脚 在进入主程序之前,我们需要对引脚进行初始化,设置引脚的输出模式。 void setup() { pinMode(LED_PIN_1, OUTPUT); pinMode(LED_PIN_2, OUTPUT); pinMode(LED_PIN_3, OUTPUT); }

主程序 接下来就是我们的主程序部分,我们可以使用循环语句来实现LED灯的流水效果。 void loop() { digitalWrite(LED_PIN_1, HIGH); delay(DELAY_TIME); digitalWrite(LED_PIN_1, LOW); digitalWrite(LED_PIN_2, HIGH); delay(DELAY_TIME); digitalWrite(LED_PIN_2, LOW); digitalWrite(LED_PIN_3, HIGH); delay(DELAY_TIME); digitalWrite(LED_PIN_3, LOW); } 在这个例子中,我们依次点亮每个LED灯,并延迟一定的时间后熄灭,然后依次点亮下一个LED灯,以此循环。 完整代码 下面是完整的单片机流水灯程序代码: #include #define LED_PIN_1 2 #define LED_PIN_2 3 #define LED_PIN_3 4 #define DELAY_TIME 500

单片机流水灯的程序

单片机流水灯的程序 一、流水灯的概念 流水灯是一种在特定硬件基础上编写的程序,它可以通过单片机控制LED灯的亮灭,从而实现一种特定的灯光效果。流水灯的程序通常利用单片机的定时器/计数器功能,通过对GPIO(通用输入输出)口的操作,控制LED灯的亮灭状态。在程序运行时,LED灯按照特定的顺序逐个亮起,就像流水一样,因此被称为流水灯。 二、硬件组成 要实现流水灯效果,需要准备的硬件包括单片机、LED灯、限流电阻、杜邦线等。其中,单片机是核心控制单元,LED灯是显示设备,限流电阻用于保护LED灯,杜邦线用于连接单片机和LED灯。 三、程序编写 下面是一个基于Arduino的流水灯程序。Arduino是一种常用的单片机开发板,具有易于学习和使用的特点。在这个程序中,我们将使用Arduino板的数字口来控制LED灯的亮灭。 cpp

define NUM_LEDS 8 // LED灯的数量 void setup() { //初始化数字口为输出模式 for (int i = 0; i < NUM_LEDS; i++) { pinMode(i, OUTPUT); } void loop() { //逐个点亮LED灯 for (int i = 0; i < NUM_LEDS; i++) { digitalWrite(i, HIGH); //点亮LED灯 delay(200); //延时200毫秒 digitalWrite(i, LOW); //熄灭LED灯 }

四、程序调试 将程序上传到Arduino板,然后依次连接好LED灯和限流电阻,最后用杜邦线将它们连接到Arduino板的数字口上。当程序运行时,应该可以看到LED灯按照特定的顺序逐个亮起,形成流水灯效果。如果出现问题,可以检查硬件连接是否正确,或者修改程序中的延时时间等参数。 单片机心型流水灯程序 随着科技的不断发展,单片机已经成为了现代电子设备中不可或缺的一部分。其中,流水灯程序作为一种常见的单片机应用,被广泛应用于各种场合。本文将介绍一种基于单片机的简单心型流水灯程序,以帮助读者更好地了解这方面的知识。 一、硬件准备 为了实现心型流水灯程序,我们需要准备以下硬件: 1、单片机开发板(如AT89C51) 2、发光二极管若干

各种流水灯程序

各种流水灯程序 Lesso2.1: 第一个发光管以间隔200ms闪烁(这是最原始的程序没有用延迟子函数)。 #include<reg52.h> sbit D1=P1^0; int a; void main() { while(1) { D1=0; a=25000; while(--a); D1=1; a=25000; while(--a); }

} Lesson2.2: 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。 #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint); uchar temp; sbit beep=P2^3; void main() { temp=0xfe; while(1) { P1=temp; beep=0; delay(500); P1=0xff; beep=1;

delay(500); temp=_crol_(temp,1); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } Lesson2.3:8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。 #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint); uchar temp; int i,j; sbit beep=P2^3;

心形花样LED流水灯(带程序)

心形花样LED 流水灯(带程序)1000146073713 使用89C52做的,原理图如下: 总共有32个LED灯,4个I/O全部用上了。 我在这里不加有LED保护电阻,用200的也可以晶振用12M的或11.0592M也行,C1,C2用30PF。

PCB图如下: 作品效果录像:https://www.doczj.com/doc/1919330469.html,/programs/view/z0bjKg_3Cd4/程序是用C语言写的; 如下:

#include #include #define uint unsigned int #define uchar unsigned char uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐个点亮0~7 uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐个点亮7~0 uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐个灭0~7 uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐个灭7~0 /***********************************************************/ void delay(uint t); //延时 void zg(uint t,uchar a);//两边逐个亮 void qs(uint t,uchar a);//全部闪烁 void zgxh(uint t,uchar a); // 逆时针逐个点亮 //void zgxh1(uint t,uchar a); // 顺时针逐个点亮 void djs(uint t,uchar a); //对角闪 void lbzgm(uint t,uchar a);//两边逐个灭 //void sszgm(uint t,uchar a); // 顺时针逐个灭 void nszgm(uint t,uchar a); // 逆时针逐个灭 void sztl(uint t,uchar a);//顺时逐个同步亮 void nztl(uint t,uchar a);//逆时逐个同步亮 void sztm(uint t,uchar a);//顺时逐个同步灭 void nztm(uint t,uchar a);//逆时逐个同步灭 void hwzjl(uint t,uchar a); //横往中间亮 void hwzjm(uint t,uchar a); //横往中间灭 //void swzjl(uint t,uchar a); //竖往中间亮 //void swzjm(uint t,uchar a); //竖往中间灭 void nzdl(uint t,uchar a); //逆时逐段亮 void nzdgl(uint t,uchar a); //逆时逐段一个点亮 void jgs(uint t,uchar a); //间隔闪 /**********************************************************/ void zg(uint t,uchar a)//两边逐个亮 { uchar i,j; for(j=0;j

单片机流水灯多种程序方法

. 一、傻瓜式编程 #include #define uint unsigned int #define uchar unsigned char void delay(uint z); //延时子函数的声明 main () { P0=0xfe;//第一个灯亮 delay(500); P0=0xfd;//第二个灯亮 delay(500); P0=0xfb; delay(500); P0=0xf7; delay(500); P0=0xef; delay(500); P0=0xdf; delay(500); P0=0xbf; delay(500); P0=0x7f; delay(500); } void delay(uint z) //延时子函数 { uint x,y; for(x=0;x

二、用移位符号“<<”或“>>” void main() //主函数 { a=0xfe; //给a赋值 while(1) { P0=a;//给P0口赋值,第一个等亮a为1111 1110 a=~a;//求反a为0000 0001 a=a<<1;//移位a为0000 0010 a=~a;//求反还原a。第二个灯亮a为1111 1101 delay(500); if(a==0x7f) { P0=0x7f;//第八个灯亮一次 delay(500); a=0xfe;//让第一个灯亮,然后无限循环 } } } 三、用移位函数_crol_( )和_cror_( ) main() { a=0xfe; while(1) { P0=a; delay(500); a=_crol_(a,1); //a每次左移一位 } } 四、使用数组 uchar code table[ ]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf,0x7f}; main() { whlie(1) { for(a=0;a<8;a++) { P0=table[a]; delay(500); }

七彩流水灯C程序设计

七彩流水装饰灯程序设计 #include void delay_ms(unsigned short ms) { unsigned short i; unsigned char j; for(i=0;i0x01) led_contrl>>=1; //控制字节移位操作 else led_contrl=0x80; }

单片机编程入门:单片机流水灯程序

单片机编程入门:单片机流水灯程序 今日就来教教大家怎么玩玩51单片机,当然了,首先有一个必要的条件就是你必需要会c语言,目前高校里面有开的关于微机原理的课的,上课的时候,老师还说:“你们要多学学汇编语言,对你们以后学习单片机有用”,而事实上后来才发觉c语言才是最重要的。 要想玩单片机,就必需要知道最重要的是什么,对于一块51单片机的开发板来说,最重要的就是要认仔细真的看它的原理图,原理图才是最重要的。 今日先说说最基本的,就是怎么玩流水灯,老样子,先看看原理图: 可以看到,总共是八个LED灯,都是由单片机的P1口掌握的,并且可以知道当端口为低电平常,灯就会亮,大家肯定要留意这一点,目前市场上51的开发板还是有特别多的,你必需要知道你的板子上LED灯是高电平使能还是低电平使能。像我这块就是低电平使能,写程序的话,我们可以用十六进制的代码写, 任意一个十六进制的数都可以拆分成八位的二进制数,而计算机只识别二进制,这样我们可以直接掌握LED灯。比如我现在写一个代码P1 = 0xfe,那么把它变为二进制后就是1111 1110 这样的话,正好对应八个LED灯,最终一位是零,那么也就是最终一个LED灯亮了,其余的则是全灭状态。

现在我们可以玩玩流水灯,看一下这个程序:看主函数main 里面的代码,P1 = 0xff 说明最开头是全灭状态,定义一个for循环,以八位为一个循环,当然也可以看到,最重要的便是P1 = P1》1这个代码,相当于说是把1111 1111 这个代码整体向右移位,比如说移位一次,那么就会变成0111 1111,那么就会有一个灯亮,移位两次,就会变成0011 1111, 就会有两个灯亮,以此类推下去,等就会渐渐亮起来。也就是流水灯咯。 大家可以自己随便修改,看看各种亮灯方式。

单片机实训报告——花样流水灯的制作

单片机实训报告——花样流水灯的制作 班级:电气一班 学号:110101127 姓名:李亚龙

一、花样流水灯的设计方案 流水灯实际上就是一个带有八个发光二级管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。 如果要让P0.0口的LED2亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED1熄灭,就要把P0.0口的电平变为高电平;同理,接在P0.0~P0.7口的其他7个LED的电亮和熄灭的方法同LED2。因此,要实现流水灯功能我们只要将发光二极管LED2~LED9依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。 对8段LED数码管显示器的控制,包括“显示段”和“公共端”两个地方的控制。其中显示段用来控制字符的形状,公共端用来控制若干个LED中的那一只被选中,前者称为“段选”,后者称为”位选”。只有二者结合起来,才能在指定的LED上显示指定的字形。显然,要显示某种字形就应该使此字形的相应字段点亮,按照dp、g、e、f、e、d、c、b、a的顺序,dp为最高位,a为最低位,引脚输入不同的8位二进制编码,可显示不同的数字或字符。 二、花样流水灯的硬件电路设计 时钟电路是计算机的心脏,它控制着计算机的工作节奏,CPU 就是通过复杂的时序电路完成不同的指令功能的,89C52的时钟信号可以由两种方式产生:一种是内部方式,利用芯片内部的振荡电路,产生时钟信号;另一种为外部方式,时钟信号由外部引入。

单片机有多种复位电路,本系统采用电平式复位与上电复位方式,如下图所示当上电时C1相当于短路时,使单片机复位,在正常工作时,按下复位键是单片机复位。 显示部分主要是由八个LED和四个七段数码管组成,八个LED 由限流电阻限流后接入89C52的P0口。

MPS430流水灯程序

一、程序功能:控制8个LED闪烁,用于测试下载功能是否正常 --------------------------------------------------- 测试说明:观察LED闪烁 ***************************************************/ #include #include "BoardConfig.h" /****************主函数****************/ void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯 CCTL0 = CCIE; //使能CCR0中断 CCR0 = 2047; //设定周期0.5S TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式P2DIR = 0xff; //设置P2口方向为输出 P2OUT = 0xff; _EINT(); //使能全局中断 LPM3; //CPU进入LPM3模式 } /******************************************* 函数名称:Timer_A 功能:定时器A的中断服务函数 参数:无 返回值:无 ********************************************/ #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A (void) { P2OUT ^= 0xff; //P2口输出取反 }

流水灯程序

图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 3 PO 4 P17 λ!SS>C51 POT am PJO nττo Pn P22 Il pn IO P” P25 I∑∖T> PY P27 Xl X : XXD !XD KD ALEP Tl PSHT ∖n 47Kx8 VCC LEDl -M — LED) W LED) LED1 W * LEDS 人K LEDj W LED7 W -44 LEDS -M

作,即编写程序掌握单片机管脚电平的凹凸变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简洁的流水灯掌握功能即实现8个LED灯的循环点亮,来介绍实现流水灯掌握的几种软件编程方法。 3.1位控法 这是一种比较笨但又最易理解的方法,采纳挨次程序结构,用位指令掌握Pl 口的每一个位输出凹凸电平,从而来掌握相应LED灯的亮灭。程序如下:ORG OOOOH ;单片机上电后从0000H地址执行 AJMPSTART ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开头地址 START : MOV SP , #60H ;设置堆栈起始地址为60H CLRPl.0;PLO输出低电平,使LEDl点亮 ACALL DELAY ;调用延时子程序 SETB P1.0;P1.0输出高电平,使LEDl熄灭 CLR Pl.l ;P1.1输出低电平,使LED2点亮

花样流水灯程序和protues仿真图

花样流水灯程序和protues仿真图/*名称:花样流水灯 说明:16只LED分两组按预设的多种花样变换显示 */ #include"reg51.h" #define uchar unsigned char #define uint unsigned int uchar code Pattern_P0[]= { 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xf f,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc 3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1 f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0 f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xf f,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xf b,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,

花样流水灯设计

一、原理图设计的目的: 利用AT89C51,通过控制按键来实现六种流水灯把戏的转换,实现把戏流水灯的设计,同时通过外部中断0,来控制流水灯的速度。 二、各器件的功能作用: 1、AT89C51 AT89C51有40个引脚,每个引脚都有其功能。本次设计中,利用P0口当输出口,输出低电平来驱动发光二极管点亮。利用P1.0~P1.5六个引脚,通过按键接地,然后采用扫描的方式,判断哪个引脚所接按键按下,从而来控制六种流水灯的把戏。利用P3.2引脚外接按键接地,通过控制按键来减慢流水灯的速度,利用P3.3引脚外接按键接地,通过控制按键来提高流水灯的速度。利用P3.7输出低电平,导通三极管Q1,从而给八个发光二极管的阳极加高电平,一旦P0口输出低电平就可以驱动发光二极管。 2、八个发光二极管: 通过八个发光二极管来实现流水灯的变化,用低电平驱动发光二级管亮,同时,用高电平使其熄灭 。 3、按键 通过P1.0-P1.5外接的按键来实现流水灯各种把戏的变化,当按键按下时,驱动一种流水灯把戏的闪烁。同时,利用按键来提供外部中断,当按下按键时,产生一个外部中断,向CPU申请中断,CPU响应其中断,因此可以用按键来实现提高流水灯闪烁的速度。

通过在RST口处加上一个按钮手动复位电路,利用复位按钮可以使运行中的流水灯复位到初始的状态。 4、排阻 因为P0口作为输出口时需要外接上拉电阻 三、设计原理图: 四、程序如下: #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint);//声明延时函数 void main(void) { uint i; uchar temp; TCON=0*05; IE=0*85; P*1=1; P*0=0; while(1) { temp=0*01; for(i=0;i<8;i++) //8个流水灯逐个闪动 { P0=temp; delay(100);//调用延时函数 temp<<=1; } temp=0*80; for(i=0;i<8;i++) //8个流水灯反向逐个闪动 { P0=temp; delay(150);//调用延时函数 temp>>=1; } temp=0*FE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P0=temp;

单片机41钟花样爱心流水灯

#include #define uint unsigned int #define uchar unsigned char uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED从低位往高位移 uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED从高位往低位移 uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED从1个亮到8个都点亮(从低位往高位) uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED从1个亮到8个都点亮(从高位往低位) uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED从8个全亮到一个都不亮(从低位往高位) uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED从8个全亮到一个都不亮(从高位往低位) uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};//LED从低位往高位移(最低位始终为0) uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};//LED从高位往低位移(最高位始终为0) uchar i,j; //定义循环变量 uint tt=70; //定义时间指数 void delay(uint time) //延时函数 { uint x,y; for(x=time;x>0;x--) for(y=110;y>0;y--); } void disp0() //状态0 所有LED闪烁3次 { for(i=0;i<3;i++) { P0=0x00; P2=0x00; P3=0x00; P1=0x00; delay(300); P0=0xff; P2=0xff; P3=0xff; P1=0xff; delay(300); } } void disp1() //状态1 LED顺时针转一圈 { for(i=0;i<8;i++) { P2=table1[i]; delay(100); }

心形花样LED流水灯(带程序)

心形花样LED流水灯(带程序)

心形花样LED 流水灯(带程序)使用89C52做的,原理图如下: 总共有32个LED灯,4个I/O全部用上了。 我在这里不加有LED保护电阻,用200的也可以晶振用12M的或11.0592M也行,C1,C2用30PF。

程序是用C语言写的; 如下: #include #include #define u int unsigned int #define u char unsigned char uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00 }; // 逐个点亮0~7 uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x 00}; // 逐个点亮7~0 uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xf f}; // 逐个灭0~7 uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff }; // 逐个灭7~0

P1=table[i+1]; P3=table1[i]; delay(t); } P3=0x00;delay(t); } } void qs(uint t,uchar a) //全部闪烁{ uchar j; for(j=0;j

相关主题
文本预览
相关文档 最新文档