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

合集下载

花样流水灯(汇编)

花样流水灯(汇编)

花样流水灯程序(汇编)汇编起始命令统一为:ORG 0000HLJMP MAINORG 0100H延时程序统一为:DELAY: MOV R7, #10 (延时500ms)DL Y2: MOV R6, #200DL Y1: MOV R5, #125DJNZ R5, $DJNZ R6, DL Y1DJNZ R7, DL Y2RET 注:不可少1.普通流水灯MAIN: MOV A, #0FEHLOOP0: MOV R1,#10HLOOP1: MOV P1,ALCALL DELAYRL ADJNZ R1,LOOP1LCALL DELAY 注:每循环一次延时长一些,以便观察LCALL DELAYSJMP LOOP02.L1亮到L8,L8灭到L1MAIN: MOV A, #0FEH LOOP0:MOV R1, #15LOOP1: MOV P1, ALCALL DELAYRL ADEC R1CJNE R1, #07H,LOOP1RR ALOOP2: RR AMOV P1, ALCALL DELAYDJNZ R1, LOOP2LCALL DELAYLCALL DELAYSJMP LOOP0 MAIN: MOV A, #0FEH LOOP0: MOV R1, #08MOV R2, #08 LOOP1: MOV P1, ALCALL DELAYRL ADEC R1DJNZ R1, LOOP1RR ALOOP2: RR AMOV P1, ALCALL DELAYDJNZ R2, LOOP2LCALL DELAYLCALL DELAYSJMP LOOP03.L1到L8逐个亮灭MAIN: MOV A, #0FEHLOOP0: MOV R1, #0FEHMOV R2, #15LOOP1: MOV P1, ALCALL DELAYRL AANL A, R1DEC R2CJNE R2, #07H,LOOP1 注:以上是让灯从1亮到8MOV R1, #80HLOOP2: ORL A, R1MOV P1, ALCALL DELAYRR ADJNZ R2, LOOP2RL ALCALL DELAYLCALL DELAYSJMP LOOP04.13572468亮MAIN: MOV A,#0FEHLOOP0: MOV R1,#08HLOOP1: MOV P1, ALCALL DELAYRL ARL ADEC R1CJNE R1,#04H ,LOOP1MOV A, #0FDH LOOP2: MOV P1, ALCALL DELAYRL ARL ADJNZ R1, LOOP2RR ASJMP LOOP0 5.逐个闪烁MAIN: MOV A, #0FEH LOOP0: MOV R1,#10H LOOP1: MOV P1,ALCALL DELAYMOV P1, #0FFHLCALL DELAYRL ADJNZ R1,LOOP1LCALL DELAYLCALL DELAYSJMP LOOP06.流水灯四个四个地亮花样IMAIN: MOV A, #0F0H LOOP0: MOV R1, #09H LOOP1: MOV P1, ALCALL DELAYRL A花样IIMAIN: MOV A, #0F0HLOOP0: MOV R1, #040H LOOP1: MOV P1, ALCALL DELAYSWAP ADJNZ R1, LOOP1LCALL DELAYDEC R1CJNE R1,#05H,LOOP1 LOOP2: MOV P1, ALCALL DELAYRR ADJNZ R1,LOOP2RL A LCALL DELAY LCALL DELAY SJMP LOOP0 LCALL DELAY SJMP LOOP07.全亮全灭MAIN:LOOP0: MOV R1, #04H LOOP1: MOV P1, #00HLCALL DELAYMOV P1, #0FFHLCALL DELAYDJNZ R1, LOOP1LCALL DELAYLCALL DELAYSJMP LOOP08.两个两个地亮MAIN: MOV A, #0FCH LOOP0: MOV R1, #08H LOOP1: MOV P1, ALCALL DELAYRL ARL ADEC R1CJNE R1,#04H,LOOP1RR ARR ALOOP2: MOV P1, ALCALL DELAYRR ARR ADJNZ R1, LOOP2RL ARL ALCALL DELAYLCALL DELAYSJMP LOOP0 9.穿越MAIN: MOV R2,#0FEHMOV R3, #7FH LOOP0: MOV R1,#016 LOOP1: MOV A,R2ANL A,R3MOV P1, ALCALL DELAYMOV A,R2RL AMOV R2, AMOV A,R3RR AMOV R3, ADJNZ R1,LOOP1LCALL DELAYSJMP LOOP0 LCALL DELAY。

流水灯程序

流水灯程序

图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端口的每个位来实现的,因此程序显得有点简单,下面我们采用循环移位指令,采纳循环程序结构进行编程。

初学单片机花样流水灯10种亮法c语言程序

初学单片机花样流水灯10种亮法c语言程序
delay
(500);
led=0x3c;
P1=led;
delay
(500);
led=0x18;
P1=led;
delay
(500);
led=0x00;
P1=led;
delay
(500);}{
led=0xe7;
P1=led;
delay
(500);
led=0xdb;
P1=led;
3 / 5
delay
(500);
初学单片机花样流水灯10种亮法c语言程序花样流水灯c语言程序单片机c语言单片机c语言教程单片机c语言应用100例单片机c语言入门单片机c语言轻松入门单片机c语言视频教程pic单片机c语言教程单片机c语言程序设计
sfr P1=0x90;
void delay(unsigned int);
void main(void){unsigned char led,i;
(3)void main(void){unsigned char led,i
(4)while
(1){led=0xfe
(5)i++){P1=led
(6)delay
(500)
(7)led=led<<1
(8)led=led>>1
(9)led=(led<<2)+1
内容总结
(1)sfr P1=0x90
(2)void delay(unsigned int)
(500);
led=(led>>1)+128;}{
led=0xe7;
P1=led;
delay
(500);
led=0xc3;

多种方法写出的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。

花样流水灯程序

花样流水灯程序
}
}
{
time=0;
miao++;
miao=miao%10;//0-9
display();//数码管显示函数
}
}
void int_T0()//定时器T0初始化
{
EA=1;//打开总中断
ET0=1;//允许T1中断
TMOD=TMOD&0Xf0|0X01;//配置模式为定时模式(C/T=0),16位自动重装
TH0=(65536-500)/256;//50ms
TL0=(65536-500)%256;//从15536开始计数,到65536溢出,一共计50000个脉冲
TR0=1;//允许计数
}
void fuwu_int_T0(void) interrupt 1//定时器0的优先级比定时器1的优先级高
{//它先要执行完定时器0的服务程序,才能再去执行定时器1的服务程序
{
P0=a;
a=a>>1;
a=a|0x01;
delay_ms((num*100)+1);
}
for(i=0;i<2;i++)//8个led闪烁两次
{
P0=0Xff;//led全部消灭
delay_ms((num*100)+1);
P0=0x00;//led灯全部点亮
delay_ms((num*100)+1);
{
if(pwm1==1)
{
pwm1=1;
flag=0;
}
pwm1--;
}
}
if(num1>64)
{
num1=0;
}
if(num1<=pwm1)

实验3:花样流水灯实验

实验3:花样流水灯实验

实验三:花样流水灯实验一、实验目的1.熟悉LED的显示特点;2.了解单片机系统实现花样流水灯实验的硬件电路和软件编程技巧;3.熟悉基本汇编指令的灵活应用。

二、实验仪器、材料1.微型计算机(PⅣ以上)2.编程、汇编与模拟平台软件Keil uVision33.电子技术专业仿真软件protues运行平台4.单片机实训开发电路板三、实验内容和步骤1.2.//从左到右(或从右到左)流水循环显示实验ORG 0000HMOV A,#80H //MOV A,#01H ;从右到左LOOP:RL A //RR A ;从右到左MOV P1,AACALL DELAYSJMP LOOPDELAY:MOV R7,#0FFH ;延时1ms程序DELAY1:MOV R6,#0FFHDELAY2:DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND//从两端到中间、从中间到两端显示实验ORG 0000HLOOP:MOV P1,#81HACALL DELAYMOV P1,#42HACALL DELAYMOV P1,#24HACALL DELAYMOV P1,#18HACALL DELAYMOV P1,#24HACALL DELAYMOV P1,#42HACALL DELAYSJMP LOOPDELAY:MOV R7,#0FFH ;延时1ms程序DELAY1:MOV R6,#0FFHDELAY2:DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND//从左到右、从右到左流水显示实验1ORG 0000HMOV A,#80HMOV R0,#08HLOOP:RL AMOV P1,AACALL DELAYDJNZ R0,LOOPMOV R0,#07HLOOP1:RR AMOV P1,AACALL DELAYDJNZ R0,LOOP1MOV R0,#07HSJMP LOOPDELAY:MOV R7,#0FFH ;延时1ms程序DELAY1:MOV R6,#0FFHDELAY2:DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND//从左到右、从右到左流水显示实验2ORG 0000HMOV A,#01HLOOP:RL AMOV P1,AACALL DELAYCJNE A,#80H,LOOPLOOP1:RR AMOV P1,AACALL DELAYCJNE A,#01H,LOOP1SJMP LOOPDELAY:MOV R7,#0FFH ;延时1ms程序DELAY1:MOV R6,#0FFHDELAY2:DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND//从左到右、从右到左流水显示实验3ORG 0000HMOV A,#00HSETB CYLOOP:RLC AJC LOOP1MOV P1,AACALL DELAYSJMP LOOPLOOP1:RRC AJC LOOPMOV P1,AACALL DELAYSJMP LOOP1DELAY:MOV R7,#0FFH ;延时1ms程序DELAY1:MOV R6,#0FFHDELAY2:DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND//花样流水灯查表显示实验ORG 0000HSTART:MOV R0,#00HMOV P1,#00HLOOP:MOV A,R0ADD A,#0CHMOVC A,@A+PCCJNE A,#01H,XSH ;3SJMP START ;2XSH:MOV P1,A ;2ACALL DELAY ;2INC R0 ;1SJMP LOOP ;2ASCTAB:DB0FFH,00H,0FFH,00H,0FFH,00H,0FH,0F0H,0FH,0F0H,0FH,0F0H,0FH,0F0H,0CCH,55H,0AAH,55H,0AAH,55H,0AAH,55H DB81H,42H,24H,18H,24H,42H,81H,42H,24H,18H,24H,42H,81H,42H,24H,18H,24H,42H,81H,42H,24H,18H,24H,42H,81H DB03H,06H,0CH,18H,30H,60H,0C0H,60H,30H,18H,0CH,06H,03H,06H,0CH,18H,30H,60H,0C0H,60H,30H,18H,0CH,06H,03H,0 1HDELAY:MOV R7,#0FFH ;延时1ms程序DELAY1:MOV R6,#0FFHDELAY2:MOV R5,#02HDELAY3:DJNZ R5,DELAY3DJNZ R6,DELAY2DJNZ R7,DELAY1RETEND。

流水灯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`表示每一个灯亮起的延迟时间,单位为毫秒。

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

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

流水灯汇编程序 (4)

流水灯汇编程序 (4)

流水灯汇编程序介绍流水灯是一种常见的电子显示装置,通过多个灯泡(或LED)按照一定的节奏依次亮起和熄灭,形成一个像水流一样流动的效果。

本文档介绍了一种汇编语言编写的流水灯程序。

硬件环境本程序使用单片机作为控制设备,需要以下硬件环境:•单片机开发板•LED灯泡(或LED灯带)•连接线软件环境本程序使用汇编语言编写,需要以下软件环境:•汇编语言开发环境(如Keil等)•单片机烧录工具(如ST-Link等)程序功能该流水灯程序通过控制不同IO口的电平,实现了多个LED 灯按照一定的节奏依次点亮和熄灭的效果。

具体的实现逻辑如下:1.初始化IO口:将用于连接LED的IO口配置为输出模式,并初始化电平为低电平。

2.循环控制:进入一个无限循环,以持续驱动流水灯的效果。

3.逐个点亮:依次将每个LED对应的IO口电平设置为高电平,达到点亮效果。

4.延时控制:通过延时操作,控制每个LED点亮的持续时间。

5.逐个熄灭:依次将每个LED对应的IO口电平设置为低电平,达到熄灭效果。

6.延时控制:通过延时操作,控制每个LED熄灭的间隔时间。

通过不断的逐个点亮和熄灭操作,就能够实现流水灯的效果。

根据实际需要,可以调整延时时间,来改变流水灯的速度和亮暗程度。

汇编代码ORG 0x00 ; 程序入口地址; 定义IO口对应的物理地址LED_BASE EQU 0x50000000 ; LED基地址LED0_OFF EQU 0 ; LED0关闭偏移量LED1_OFF EQU 4 ; LED1关闭偏移量LED2_OFF EQU 8 ; LED2关闭偏移量LED3_OFF EQU 12 ; LED3关闭偏移量; 定义延时函数DelayLDR R1, =1000000 ; 设置延时时间,根据实际需要调整DelayLoopSUBS R1, R1, #1 ; 计数器减1BNE DelayLoop ; 若计数器不为0,则跳转继续延时BX LR ; 延时结束,返回; 主程序入口Main; 初始化IO口LDR R0, =LED_BASE ; 加载IO口基地址STR R0, [R0, #LED0_OFF] ; 设置LED0为输出模式 STR R0, [R0, #LED1_OFF] ; 设置LED1为输出模式 STR R0, [R0, #LED2_OFF] ; 设置LED2为输出模式 STR R0, [R0, #LED3_OFF] ; 设置LED3为输出模式; 循环控制Loop; 逐个点亮STR R0, [R0, #LED0_OFF] ; LED0点亮BL Delay ; 延时一段时间STR R0, [R0, #LED1_OFF] ; LED1点亮BL Delay ; 延时一段时间STR R0, [R0, #LED2_OFF] ; LED2点亮BL Delay ; 延时一段时间STR R0, [R0, #LED3_OFF] ; LED3点亮BL Delay ; 延时一段时间; 逐个熄灭STR R0, [R0, #LED0_OFF] ; LED0熄灭BL Delay ; 延时一段时间STR R0, [R0, #LED1_OFF] ; LED1熄灭BL Delay ; 延时一段时间STR R0, [R0, #LED2_OFF] ; LED2熄灭BL Delay ; 延时一段时间STR R0, [R0, #LED3_OFF] ; LED3熄灭BL Delay ; 延时一段时间B Loop ; 跳转到循环开始的位置END ; 程序结束使用方法1.将上述汇编代码保存为一个以.asm为后缀的文件,如led.asm。

单片机-流水灯的程序

单片机-流水灯的程序
程序分析:
#include<reg51.h> sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void delay (unsigned char x);
其中void表示这 个函数执行完后 不返回任何数据。 ()内无任何东西, 所以这是个无参 数的函数。 Delayms是函数名。
1
2
3
4
5
6
2)带参数函数的用位定义实现流水灯(8位二极管循环点亮)
编程思路: a) 先点亮第一盏灯,延时点亮第二盏, 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
循环移动
循环左移 最高位移入最低位,其它依次向左移动一位。C语言中 没有专门的指令,通过移位指令和简单逻辑运算来实现循环左移,或直接利用C51库中自带的函数-crol-实现。
循环右移 最低位移入最高位,其它位依次向右移一位,C语言中没有专门的指令,通过移位指令与简单的逻辑运算可以实现循环右移,或专门利用C51库中自带函数-cror-实现
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识 二进制和十六进制之间的相互转换
二进制
十六进制
二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
二进制
十六进制
二进制

花样流水灯设计

花样流水灯设计

一、原理图设计的目的:利用AT89C51,通过控制按键来实现六种流水灯把戏的转换,实现把戏流水灯的设计,同时通过外部中断0,来控制流水灯的速度。

二、各器件的功能作用:1、AT89C51AT89C51有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<reg51.h> //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;delay(150); //调用延时函数temp<<=1;}temp=0*7F;for(i=0;i<8;i++) //8个流水灯依次反向全部点亮 {P0=temp;delay(150); //调用延时函数temp>>=1;}temp=0*03;for(i=0;i<4;i++) //两个流水灯顺序点亮{P0=temp;delay(150);temp<<=2;}temp=0*30;for(i=0;i<3;i++) //两个流水灯反向点亮{P0=temp;delay(150);temp>>=2;}temp=0*07;for(i=0;i<3;i++) //3个{P0=temp;delay(150);temp<<=3;}temp=0*e0;for(i=0;i<3;i++) //3流水灯反向点亮{P0=temp;delay(150);temp>>=3;}temp=0*0f;for(i=0;i<3;i++) //4ge{P0=temp;delay(150);temp<<=4;}temp=0*f0;for(i=0;i<3;i++) //4流水灯反向点亮{P0=temp;delay(150);temp>>=4;}}}void int0() interrupt 0{uint i;uchar temp;while(1){temp=0*01;for(i=0;i<8;i++) //8个流水灯逐个闪动{P0=temp;delay(800);//调用延时函数temp<<=1;}temp=0*80;for(i=0;i<8;i++) //8个流水灯反向逐个闪动{P0=temp;delay(800);//调用延时函数temp>>=1;}temp=0*FE;for(i=0;i<8;i++) //8个流水灯依次全部点亮{P0=temp;delay(800); //调用延时函数temp<<=1;}temp=0*7F;for(i=0;i<8;i++) //8个流水灯依次反向全部点亮 {P0=temp;delay(800); //调用延时函数temp>>=1;}temp=0*03;for(i=0;i<4;i++) //两个流水灯顺序点亮{P0=temp;delay(800);temp<<=2;}temp=0*30;for(i=0;i<3;i++) //两个流水灯反向点亮{P0=temp;delay(800);temp>>=2;}temp=0*07;for(i=0;i<3;i++) //3个流水灯顺序点亮{P0=temp;delay(800);temp<<=3;}temp=0*e0;for(i=0;i<3;i++) //3个流水灯反向点亮{P0=temp;delay(800);temp>>=3;}}temp=0*0f;for(i=0;i<3;i++) //4个流水灯顺序点亮{P0=temp;delay(800);temp<<=4;}temp=0*f0;for(i=0;i<3;i++) //4流水灯反向点亮{P0=temp;delay(800);temp>>=4;}}void delay(uint t) //定义延时函数 {register uint bt;for(;t;t--)for(bt=0;bt<255;bt++);}。

几种流水灯的闪亮程序

几种流水灯的闪亮程序

流水灯闪亮程序#include<reg52.h>#include<intrins.h>sbit led1=P1^0;#define uchar unsigned char#define uint unsigned intvoid delay(uint ms);void main(void){uchar a;a=0xfe;while(1){P1=a;delay(500);a=_crol_(a,1); //_crol_(a,1);循环左移_cror_(a,1); ;循环右移}}void delay(uint ms) //500{uint i, j; // uchar时间短uint时间较长for (i=ms;i>0;i--)for(j=100;j>0;j--);}流水灯程序#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit key=P1^0;sbit led9=P0^7;uchar k;//delay usvoid Delay(uchar us) //5,7,9{while(--us);}//delay msvoid DelayMS(uint iMs){uint i,j;for(i=0;i<iMs;i++)for(j=0;j<65;j++) Delay(1);}main(){uchar i;i=0xff;led9=1;P2=i;while(1){key=1;DelayMS(50);if(key==0){led9=0;DelayMS(1000);led9=1;i=0x7f;for(k=0;k<8;k++){P2=i;i=_cror_(i,1);DelayMS(500);}i=0xfe;for(k=0;k<8;k++){P2=i;i=_crol_(i,1);DelayMS(500);}led9=0;DelayMS(500);P2=0;led9=0;DelayMS(3000);P2=0xff;led9=1;}}}流水灯程序#include<reg51.h> //包含单片机寄存器的头文件void delay(void){unsigned int i,j; //unsigned char 时间较短,值域0~255 unsigned int 时间较长,值域0~65535for(i=0;i<500;i++) // i为灭灯时间,j为亮灯时间;for(j=0;j<500;j++) // i为灭灯时间,j为亮灯时间;;}void main(void){while(1){P1=0xfe; //第一个灯亮delay(); //调用延时函数P1=0xfd; //第二个灯亮delay(); //调用延时函数P1=0xfb; //第三个灯亮delay(); //调用延时函数P1=0xf7; //第四个灯亮delay(); //调用延时函数P1=0xef; //第五个灯亮delay(); //调用延时函数P1=0xdf; //第六个灯亮delay(); //调用延时函数P1=0xbf; //第七个灯亮delay(); //调用延时函数P1=0x7f; //第八个灯亮delay(); //调用延时函数P1=0xff; //P1口全灭delay(); //调用延时函数P3=0xfe; //第一个灯亮delay(); //调用延时函数P3=0xfd; //第二个灯亮delay(); //调用延时函数P3=0xfb; //第三个灯亮delay(); //调用延时函数P3=0xf7; //第四个灯亮delay(); //调用延时函数P3=0xef; //第五个灯亮delay(); //调用延时函数P3=0xdf; //第六个灯亮delay(); //调用延时函数P3=0xbf; //第七个灯亮delay(); //调用延时函数P3=0x7f; //第八个灯亮delay(); //调用延时函数P3=0xff; //P1口全灭delay(); //调用延时函数}}带开关控制16盏流水灯的程序#include<reg51.h> //包含单片机寄存器的头文件sbit key=P1^0; //P1.0端口为开关key表示开关void delay(void){unsigned int i,j; //unsigned char 时间较短,值域0~255 unsigned int 时间较长,值域0~65535for(i=0;i<500;i++) // i为灭灯时间,j为亮灯时间;for(j=0;j<500;j++) // i为灭灯时间,j为亮灯时间;;}void main(void){while(1){key=1;delay();if(key==0){P0=0xfe; //第一个灯亮delay(); //调用延时函数P0=0xfd; //第二个灯亮delay(); //调用延时函数P0=0xfb; //第三个灯亮delay(); //调用延时函数P0=0xf7; //第四个灯亮delay(); //调用延时函数P0=0xef; //第五个灯亮delay(); //调用延时函数P0=0xdf; //第六个灯亮delay(); //调用延时函数P0=0xbf; //第七个灯亮delay(); //调用延时函数P0=0x7f; //第八个灯亮delay(); //调用延时函数P0=0xff; //P1口全灭delay(); //调用延时函数P2=0x7f; //第一个灯亮delay(); //调用延时函数P2=0xbf; //第二个灯亮delay(); //调用延时函数P2=0xdf; //第三个灯亮delay(); //调用延时函数P2=0xef; //第四个灯亮delay(); //调用延时函数P2=0xf7; //第五个灯亮 delay(); //调用延时函数P2=0xfb; //第六个灯亮delay(); //调用延时函数P2=0xfd; //第七个灯亮 delay(); //调用延时函数P2=0xfe; //第八个灯亮 delay(); //调用延时函数P2=0xff; //P1口全灭delay(); //调用延时函数}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用单片机实现五种花样流水灯
1.硬件电路图设计
本文仿真软件采用Proteus和Keil C51。

其中Keil Proteus可以仿真、分析(SPICE)各种模拟器件和集成电路,C51可完成程序的编译链接和仿真调试,并能生成hex文件。

通过Keil C51与Proteus的联调便可实现仿真实验。

硬件电路采用单片机最小系统(晶振电路+复位电路),利用P0口作为数据输出端口。

由于P0口是一个8位漏极开路的的双向I/O口,必需外接上拉电阻才能有高电平输出。

当单片机输出高电平时对应的LED灯熄灭,当输出低电平时则点亮。

2.C语言程序
程序定义了五个数组分别对应五种不同的花样流水灯方式,其中每个数组中的每个元素控制P0口的壮态,从而控制每个LED灯的壮态。

另外,程序将流水灯每个壮态的间隙时间进行了宏定义,这使得修改每个壮态的保持时间十分方便。

#include<reg51.h> //包含单片机头文件
#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(略)。

相关文档
最新文档