八个流水灯及程序

合集下载

流水灯单片机简单程序

流水灯单片机简单程序

一:实验目的熟悉如何使用stp-isp软件,用汇编语言实现8个LED1-LED8依次闪亮从而产生“流水”现象,了解单片机汇编语言设计使用和调试方法。

二:实验内容通过p2口将8个LED连接在一起,从而产生“流水现象”。

三:实验线路图四: 实验原理从原理图中可以看出,如果要让接在p2.0口的LED 1灯亮起来,那么只要把p2.0的电平变为低电平就可以;相反的,如果要接在p2.0口的LED 1熄灭,就要把p2.0口的电平变为高电平;同理,接在p2.1-p2.7口的其他7个LED的点亮和熄灭的方法同LED 1 。

因此要实现流水灯功能,我们只要将发光二极管LED 1 —LED 8 依次点亮/熄灭,8个LED灯就会一亮一暗的做规律活动,即“流水”现象。

此外我们还应该注意一点,由于人的视觉暂留,神经反应间隔以及单片机执行每条指令的时间很短,我们在控制二极管亮和暗的时候应该延时一段时间,否则由于时间太短,我们视觉神经反应不过来而看不到“流水”效果了。

六:实验程序ORG 00HLJMP STARTORG 30HSTART: MOV A, #7FHLOOP: RL AINC AMOV P2, ALCALL DELAYLJMP LOOPDELAY: MOV R5, #5DELAY01: MOV R6, #200 DELAY02: MOV R7, #250 DELAY03:DJNZ R7, DELAY03DJNZ R6, DELAY02DJNZ R5, DELAY01RETEND(反复调试程序使之正确)七:实验步骤1 .打开电脑,安装 stp-isp软件;2 .连接接usb转串口线和电源线;3 .在改程序中打开所需程序,然后下载程序进单片机,按照提示打开关闭电板上的开关控制,带程序开始运行之后观察是否与所涉及程序结果一致。

若一致(即观察到”流水“现象),则实验成功,分析实验结果写总结。

若不一致(即观察不到”流水“现象),则重新调试程序和接线,找到原因,重新实验,直至看到”流水“现象。

汇编程序 8只流水灯

汇编程序 8只流水灯
mov a,#7fh
x2:
mov p2,a
call v;调用延时子程序
mov a,r4
rr a
jnz r3,x2
jmp again
ret
m3:
mov p0,#62h ;数码管显示3
call r1,#05h
loop:
mov P2,A;值给LED灯
CALL V ;调用延时子程序
mov a,r4;保存的值还给a
rl a;左移
jmp loop;不为零,重复把值给LED灯
h;s数码管显示2
call delay
inc a
jnz r2,inl
jnz r1,outl
table:
db 7eh,0bdh,0dbh,0e7h
ret
m4:
mov p0,#74h;s数码管显示4
call delay
mov a,#01111111b
mov r4,a
jz delay
ret;子程序返回
end ;程序结束
///////你帮我也看看,怎么修改···记得改好找我哈
mov dptr,#table
mov r2,#04h
mov a,00h
inl:
mov r0,a
mov a,@a+dptr
mov p2,a
call v; 调用延时子程序
mov a,r0
inc a
jnz r2,inl
C1: jne r5,#3,c1
A: jmp m3
C2: jnc C2
C3:
ttt:inc a
m1: mov P0,#7eh;把7eh送到P0口,数码管显示1

项目2---8位流水灯的单片机

项目2---8位流水灯的单片机

二、编程及问答:
1、要使得本项目中发光二极管的闪烁速度加快,程序如何修 改?若变慢呢?
2、试编写两段延时时间不同的子程序,并分别调用。 3、汇编程序的书写格式和注意事项是什么?
项目2个发光二极管的顺序点亮, 学会使用MCS-51单片机芯片的P1口进行输出控 制,进一步学习汇编程序的分析方法,并能熟练 运用RR、RL等基本指令。
项目任务
要求应用AT89C51芯片,控制8个发光 二极管的有序亮灭,呈现流水灯的效果。 设计单片机控制电路并编程实现此功能。
(二)程序编写
ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV P1,#0FEH LCALL YS MOV P1,#0FDH LCALL YS MOV P1,#0FBH LCALL YS MOV P1,#0F7H LCALL YS MOV P1,#0EFH LCALL YS MOV P1,#0DFH LCALL YS
项目分析
利用单片机P1口连接8个发光二极管, 利用各引脚输出电位的变化,控制发光二 极管的亮灭。P1口各引脚的电位变化可以 通过指令来控制,为了清楚地分辨发光二 极管的点亮和熄灭,在P1口输出信号由一 种状态向另一种状态变化时,编写延时程 序实现一定的时间间隔。
项目实施
一、硬件电路设计 二、控制程序的编写
MOV P1,#0BFH LCALL YS MOV P1,#7FH LCALL YS LJMP MAIN ORG 0100H YS:MOV R7,#2 L1:MOV R6,#0FFH L2:MOV R5,#0FFH L3:DJNZ R5,L3 DJNZ R6,L2 DJNZ R7,L1 RET END
DJNZ R7,D0
LJMP XH

四、实现8个LED流水灯

四、实现8个LED流水灯

/***************项目名称:实现8个LED流水灯***************/ #include<reg52.h> //引用S52单片机头文件/***************定义8个LED引脚***************************/ sbit LED1=P1^0; //定义一个LED的引脚sbit LED2=P1^1; //定义另一个LED的引脚sbit LED3=P1^2;sbit LED4=P1^3;sbit LED5=P1^4;sbit LED6=P1^5;sbit LED7=P1^6;sbit LED8=P1^7;void Delay(void); //子函数的声明,后面要加分号。

void main() //主程序main函数{while(1) //在主程序中设置死循环"while(1)"{LED1=0; //P1.0口输出低电平,使LED1灯亮Delay(); //延时字函数的调用LED1=1; //P1.0口输出高电平,使LED1灯灭LED2=0; //P1.1口输出低电平,使LED2灯亮Delay(); //延时字函数的调用LED2=1; //P1.1口输出高电平,使LED2灯灭LED3=0; //P1.2口输出低电平,使LED3灯亮Delay(); //延时字函数的调用LED3=1; //P1.2口输出高电平,使LED3灯灭LED4=0; //P1.3口输出低电平,使LED4灯亮Delay(); //延时字函数的调用LED4=1; //P1.3口输出高电平,使LED4灯灭LED5=0; //P1.4口输出低电平,使LED5灯亮Delay(); //延时字函数的调用LED5=1; //P1.4口输出高电平,使LED5灯灭LED6=0; //P1.5口输出低电平,使LED6灯亮Delay(); //延时字函数的调用LED6=1; //P1.5口输出高电平,使LED6灯灭LED7=0; //P1.6口输出低电平,使LED7灯亮Delay(); //延时字函数的调用LED7=1; //P1.6口输出高电平,使LED7灯灭LED8=0; //P1.7口输出低电平,使LED8灯亮Delay(); //延时字函数的调用LED8=1; //P1.7口输出高电平,使LED8灯灭}}void Delay(void) //子函数的建立,延时一段时间的子函数{unsigned int i=50000; //声明一个int型的变量,即"int"的范围为0~65536 while(--i); //延时一段时间}。

8个流水灯程序

8个流水灯程序

i = 10000; // SW Delay
do i--;
while(i != 0);
break;
}
}
P2DIR=BIT0;//P1.0显示按键起作用
P2OUT=BIT0+BIT3;//P2IN低电平跳转
P2REN=BIT3;//上拉电阻,缺了好像不能用
while(i != 0);
P1OUT ^= 0X20; // Toggle P1.5 using exclusive-OR
i = 10000; // SW Delay
do i--;
while(i != 0);
break;
}
}
while(i != 0);
P1OUT ^= 0X04; // Toggle P1.2 using exclusive-OR
i = 10000; // SW Delay
do i--;
while(i != 0);
P1OUT ^= 0X08; // Toggle P1.3 using exclusive-OR
while(i != 0);
P1OUT ^= 0X04; // Toggle P1.2 using exclusive-OR
i = 10000; // SW Delay
do i--;
while(i != 0);
break;
}
}
{
P1DIR |= 0X01; // Set P1.0 to output direction
P1DIR |= 0X02;
P1DIR |= 0X04;
P1DIR |= 0X08;
P1DIR |= 0X10;

八位双向流水灯”设计

八位双向流水灯”设计

八位双向流水灯”设计以下是对八位双向流水灯设计的详细介绍。

1.硬件设计:该设计需要使用以下硬件元件:-8个LED灯:用于点亮和显示流水灯效果。

-8个当前限流电阻:用于限制LED灯的电流,保护LED灯不受损坏。

-8个开关:用于手动切换流水灯的方向。

-一个控制器:用于控制LED灯的点亮和熄灭。

-一个脉冲发生器:用于为控制器提供驱动信号。

首先,将8个LED灯连接到控制器的8个输出引脚上,并通过对应的当前限流电阻进行连接。

然后,将8个开关连接到控制器上,用于手动控制流水灯的方向。

最后,将脉冲发生器连接到控制器上,用于为控制器提供驱动信号。

2.软件设计:该设计需要使用软件来控制LED灯的点亮和熄灭。

软件设计可以使用C语言等编程语言实现。

首先,需要定义一个数组,用于存储LED灯的状态。

数组中的每个元素对应一个LED灯,其中0表示灯灭,1表示灯亮。

然后,通过控制器的输入和输出引脚,可以确定当前LED灯的状态和流水灯的方向。

接着,需要实现一个循环,用于不断更新LED灯的状态。

循环的过程中,根据当前LED灯的状态和流水灯的方向,通过控制器的输出引脚控制LED灯的点亮和熄灭。

在循环的过程中,需要监测开关的状态,以便手动切换流水灯的方向。

当检测到开关状态改变时,需要更新流水灯的方向。

3.工作原理:首先,当控制器接收到脉冲发生器的驱动信号时,它将根据当前流水灯的方向和控制器的输入引脚的状态来更新LED灯的状态。

如果流水灯的方向是从左到右,则控制器会根据当前LED灯的状态和开关的状态,点亮或熄灭相应的LED灯。

具体的控制规则可以根据设计需求进行定义,例如按照顺序点亮灯1、2、3、4、5、6、7、8如果流水灯的方向是从右到左,则控制器会根据当前LED灯的状态和开关的状态,点亮或熄灭相应的LED灯。

具体的控制规则可以根据设计需求进行定义,例如按照顺序点亮灯8、7、6、5、4、3、2、1当开关的状态改变时,控制器会更新流水灯的方向,并根据新的方向重新设置LED灯的状态。

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

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

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

51八只LED灯做流水灯实验

51八只LED灯做流水灯实验

51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。

如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。

想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED 1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。

本实验在“SP-5 1实验板”学习套件上的相关图纸:P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到开始、程序结束。

我们不能说P1.1你变低,它就变低了。

因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”代码。

我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。

今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。

这里的“程序语言”目前主要有汇编和C两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。

前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。

现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。

“汉语”语言汇编语言开始:star:P1.0低clr p1.0P1.0高setb p1.0P1.1低clr p1.1P1.1高setb p1.1P1.2低clr p1.2P1.2高setb p1.2这里用到了四条汇编指令:clr、 setb、 ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。

实现8个LED流水灯汇编语言程

实现8个LED流水灯汇编语言程

START: MOV ACC,#0FEH ;ACC 中先装入LED1 亮的数据(二进制的11111110 )MOV P1,ACC ;将ACC 的数据送P1 口MOV R0,#7 ;将数据再移动7 次就完成一个8 位流水过程LOOP: RL A ;将ACC 中的数据左移一位MOV P1,A ;把ACC 移动过的数据送p1 口显示ACALL DELAY ;调用延时子程序DJNZ R0,LOOP ;没有移动够7 次继续移动AJMP START ;移动完7 次后跳到开始重来,以达到循环流动效果延时子程序DELAY: MOV R0,#255 ;延时一段时间D1: MOV R1,#255DJNZ R1,$DJNZ R0,D1RET ;子程序返回END ;程序结束START: CLR P1.0 ;P1.0 输出低电平,使LED1 点亮ACALL DELAY ;调用延时子程序SETB P1.0 ;P1.0 输出高电平,使LED1 熄灭CLR P1.1 ;P1.1 输出低电平,使LED2 点亮ACALL DELAY ;调用延时子程序SETB P1.1 ;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 P1.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 ;调用延时子程序SETB P1.6 ;P1.6 输出高电平,使LED7 熄灭CLR P1.7 ;P1.7 输出低电平,使LED8 点亮ACALL DELAY ;调用延时子程序SETB P1.7 ;P1.7 输出高电平,使LED8 熄灭ACALL DELAY ;调用延时子程序AJMP START ;8 个LED 流了一遍后返回到标号START 处再循环延时子程序DELAY: MOV R0,#255 ;延时一段时间D1: MOV R1,#255DJNZ R1,$DJNZ R0,D1RET ;子程序返回END ;程序结束ORG 0000H ; 上电复位,程序从 0000H 开始执行END ;程序结束START: MOVSP,#60HMOVDPTR,#LIU_TAB LOOP:CLR AMOVC A,@A+DPTRCJNEA,#0FFH,SHOWAJMPSTARTSHOW:MOV P1,A ACALL DELAYINC DPTRAJMP LOOP延时子程序; 堆栈初始化为 60H;流水花样表首地址送 DPTR;检查流水结束标志;所有花样流完 ,则从头开始重复流;将数据送到 P1 口DELAY: MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZR0,D1RET;子程序返回; ---- 下面是流水花样数据表 -----LIU_TAB:DB 01111111B ;二进制表示的流水花样数据DB 10111111B DB 11011111B DB 11101111B DB 11110111B DB 11111011B DB 11111101B DB 11111110B DB 11111110B DB 11111101B DB 11111011B DB 11110111B DB 11101111B DB 11011111B DB 10111111B DB 01111111BDB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ; 十六进制表示 DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH DB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H DB 0FFH;流水花样结束标志 0FFH延时子程序,12M 晶振延时约250 毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETorg 00h ;程序上电从00h 开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A 赋值成11111110loop:mov p1,a ;将A 送到P1 口,发光二极管低电平点亮lcall delay ; 调用延时子程序rl a ; 累加器A 循环左移一位ajmp loop ; 重新送P1 显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250 次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1 ret end如何精确计算延时子程序的执行时间?汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!;延时子程序,12M 晶振延时约253 毫秒DELAY:MOV R4 ,#2 ------执行 1 个机器周期,耗时 1 微秒L3: MOV R2 ,#250---执行1 个机器周期,耗时 1 微秒L1: MOV R3 ,#251---执行 1 个机器周期,耗时 1 微秒L2:DJNZ R3 ,L2 ---------- 执行2个机器周期,反复执行251次(2x251) = 502 微秒)DJNZ R2 ,L1 -------------- 执行2个机器周期,反复执行250次(1 + 502+ 2)*250=126250微秒)DJNZ R4丄3 ------------- 执行2个机器周期,反复执行2次(1+1+502+126250+2)*2=253512微秒)RETdelay 加上第一条总共延时1+253512=253513微秒。

实现8个LED流水灯汇编语言程

实现8个LED流水灯汇编语言程

START:MOV ACC,#0FEH ;ACC中先装入LED1亮的数据(二进制的11111110)MOV P1,ACC ;将ACC的数据送P1口MOV R0,#7 ;将数据再移动7次就完成一个8位流水过程LOOP: RL A ;将ACC中的数据左移一位MOV P1,A ;把ACC移动过的数据送p1口显示ACALL DELAY ;调用延时子程序DJNZ R0,LOOP ;没有移动够7次继续移动AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回END;程序结束START:CLR P1.0 ;P1.0输出低电平,使LED1点亮ACALL DELAY;调用延时子程序SETB P1.0;P1.0输出高电平,使LED1熄灭CLR P1.1;P1.1输出低电平,使LED2点亮ACALL DELAY;调用延时子程序SETB P1.1;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 P1.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;调用延时子程序SETB P1.6;P1.6输出高电平,使LED7熄灭CLR P1.7;P1.7输出低电平,使LED8点亮ACALL DELAY;调用延时子程序SETB P1.7;P1.7输出高电平,使LED8熄灭ACALL DELAY;调用延时子程序AJMP START;8个LED流了一遍后返回到标号START处再循环;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回END;程序结束ORG0000H;上电复位,程序从0000H开始执行START:MOV SP,#60H;堆栈初始化为60HMOV DPTR,#LIU_TAB;流水花样表首地址送DPTR LOOP: CLR AMOVC A,@A+DPTRCJNE A,#0FFH,SHOW;检查流水结束标志AJMP START;所有花样流完,则从头开始重复流SHOW: MOV P1,A;将数据送到P1口ACALL DELAYINC DPTRAJMP LOOP;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回;----- 下面是流水花样数据表-----LIU_TAB:DB 01111111B ;二进制表示的流水花样数据DB 10111111BDB 11011111BDB 11101111BDB 11110111BDB 11111011BDB 11111101BDB 11111110BDB 11111110BDB 11111101BDB 11111011BDB 11110111BDB 11101111BDB 11011111BDB 10111111BDB 01111111BDB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;十六进制表示DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FHDB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EHDB 7FH,3FH,1FH,0FH,07H,03H,01H,00HDB 0FFH ;流水花样结束标志0FFHEND;程序结束延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETorg 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮 lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend如何精确计算延时子程序的执行时间?汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!;延时子程序,12M晶振延时约253毫秒DELAY:MOV R4,#2------执行1个机器周期,耗时1微秒L3: MOV R2 ,#250---执行1个机器周期,耗时1微秒L1: MOV R3 ,#251---执行1个机器周期,耗时1微秒L2: DJNZ R3 ,L2---执行2个机器周期,反复执行251次(2x251)=502微秒)DJNZ R2 ,L1-----执行2个机器周期,反复执行250次(1+502+2)*250=126250微秒)DJNZ R4 ,L3-----执行2个机器周期,反复执行2次(1+1+502+126250+2)*2=253512微秒)RETdelay 加上第一条总共延时1+253512=253513微秒。

8位流水灯课程设计

8位流水灯课程设计

8位流水灯课程设计一、课程目标知识目标:1. 让学生掌握8位流水灯的基本原理,理解其内部电路结构与工作流程。

2. 学会运用所学知识设计简单的8位流水灯电路,并掌握相关编程技巧。

3. 了解8位流水灯在实际应用中的场景和意义。

技能目标:1. 培养学生动手实践能力,能够独立完成8位流水灯电路的搭建与编程。

2. 提高学生问题分析、解决能力,能够在实际操作过程中发现并解决问题。

3. 培养学生团队协作能力,能够在小组合作中发挥各自优势,共同完成任务。

情感态度价值观目标:1. 激发学生对电子技术的兴趣,培养创新意识和探索精神。

2. 培养学生严谨、细致的学习态度,注重实际操作中的安全意识。

3. 引导学生关注科技发展,认识到电子技术在日常生活中的重要性。

课程性质:本课程为电子技术实践课程,以项目式教学为主,结合理论知识与实际操作。

学生特点:八年级学生,具备一定的电子技术基础,对实践操作有较高的兴趣。

教学要求:注重理论与实践相结合,以学生为主体,教师为主导,鼓励学生积极参与,培养学生的实际操作能力和创新精神。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高学生的综合素养。

二、教学内容1. 理论知识:- 8位流水灯基本原理介绍- 电路组成:LED、电阻、微控制器等- 编程语言基础:C语言或汇编语言- 8位流水灯程序设计思路及方法2. 实践操作:- 8位流水灯电路图的绘制- 电路板搭建,焊接LED和电阻- 微控制器编程与调试- 8位流水灯功能实现与优化3. 教学安排与进度:- 第一课时:8位流水灯基本原理及电路组成介绍- 第二课时:编程语言基础学习与电路图绘制- 第三课时:电路板搭建、焊接及微控制器编程- 第四课时:8位流水灯功能实现与调试优化4. 教材章节:- 《电子技术基础》第四章:数字电路基础- 《电子技术基础》第六章:微控制器原理与应用- 《C语言程序设计》第一章:C语言概述与基本语法教学内容确保科学性和系统性,结合课程目标,注重理论与实践相结合,使学生能够在实践中掌握8位流水灯的相关知识。

各种流水灯程序

各种流水灯程序
{
while(1)
{
D1=0;
a=25000;
while(--a);
D1=1;
a=25000;
while(--a);
}
}
Lesson2.2: 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
#include&lt;reg52.h&gt;
{
P1=0x00;
delay(300);
P1=0xff;
delay(300);
}
P1=0xff;
while(1);
}
#include&lt;reg52.h&gt;
#include&lt;intrins.h&gt;
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar temp;
int i,j=3;
void delay(uint z)
#include&lt;intrins.h&gt;
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
uchar temp;
sbit beep=P2^3;
void main()
{
temp=0xfe;
beep=1;
P1=temp;
delay(500);
temp=_cror_(temp,1);

8位流水灯课课程设计

8位流水灯课课程设计

8位流水灯课课程设计一、教学目标本课程旨在让学生了解8位流水灯的工作原理和设计方法,通过学习,学生能掌握数字电路的基本知识,培养动手实践能力和创新思维。

1.了解8位流水灯的电路结构和工作原理。

2.掌握数字电路的基本知识,如逻辑门、触发器等。

3.学习常用的数字电路设计方法。

4.能够使用电子设计软件进行简单的电路设计。

5.能够独立完成8位流水灯的组装和调试。

6.培养分析问题和解决问题的能力。

情感态度价值观目标:1.培养学生对电子科技的兴趣,激发创新意识。

2.培养团队合作精神,提高沟通与协作能力。

3.培养学生热爱科学、追求真理的品质。

二、教学内容本课程的教学内容主要包括以下几个部分:1.数字电路基本知识:逻辑门、触发器、计数器等。

2.8位流水灯电路原理:了解流水灯的电路结构,理解其工作原理。

3.设计方法与实践:学习常用的数字电路设计方法,并应用于8位流水灯的设计与制作。

4.电路调试与优化:学习如何对电路进行调试,提高电路的性能。

三、教学方法为了提高教学效果,我们将采用多种教学方法进行授课:1.讲授法:讲解数字电路的基本知识和设计方法。

2.讨论法:学生进行小组讨论,分享设计经验和心得。

3.案例分析法:分析典型的流水灯设计案例,引导学生学会分析电路。

4.实验法:让学生动手实践,组装和调试8位流水灯。

四、教学资源为了保证教学质量,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供理论知识的学习。

2.参考书:提供丰富的参考资料,帮助学生拓展知识面。

3.多媒体资料:制作精美的PPT,直观展示电路原理和设计过程。

4.实验设备:准备充足的实验设备,确保每个学生都能动手实践。

5.在线资源:利用网络资源,为学生提供更多学习途径和交流平台。

五、教学评估本课程的评估方式包括平时表现、作业、考试等,以全面客观地评价学生的学习成果。

1.平时表现:评估学生在课堂上的参与度、提问回答等情况,以考查其对课程内容的掌握程度。

八位流水灯设计

八位流水灯设计

八位流水灯设计流水灯是一种常见的电子元件,它可以通过不断变化的灯光颜色、明暗程度和位置,展现出美丽的图案和效果。

八位流水灯是一种能够显示8位二进制代码的流水灯,在电子技术领域中得到广泛应用。

利用八位流水灯,可以实现许多有趣的电子实验和项目,比如数字电子钟、数字电子扫描仪等等。

下面我们将详细介绍八位流水灯的设计原理和制作步骤:1. 设计原理八位流水灯的设计原理基于二进制计数器的工作原理。

二进制计数器是由多个触发器组成的电路,它可以不断地计数,并显示出相应的二进制代码。

在八位流水灯中,我们需要使用八个触发器,并将其连接成一个环形计数器。

计数器的工作原理如下:当计数器的时钟信号触发时,它将从0开始计数,并逐渐增加到最大值FF(即二进制数11111111)。

当计数器达到最大值时,它将会自动清零,并从0重新开始计数。

将计数器的每个二进制位分别与LED灯相连。

当计数器计数时,LED灯将按照二进制代码的顺序依次点亮,从而形成流水灯的效果。

2. 制作步骤制作八位流水灯需要以下材料和工具:材料:1. 8个LED灯2. 8个220欧姆电阻3. 8个NPN型晶体管5. 74HC595移位寄存器工具:1. 焊接工具2. 电线切割工具3. 钳子4. 面包板步骤:将8个LED灯连接到8个220欧姆电阻上,再将电阻与负极连接。

然后将正极端与每个NPN晶体管的基脚相连。

2. 连接晶体管将晶体管的集电极连接到正极,发射极连接到地,基极与LED灯连接的电阻相连。

3. 连接电阻将8个3.3K欧姆电阻连接到74HC595移位寄存器的输出引脚上。

将移位寄存器的输入引脚连接到单片机的IO口上,QH引脚连接到第一个LED的输入上,并将移位寄存器的时钟(Clock)和锁存(Latch)引脚连接到单片机的IO口上。

5. 安装电路将电路连接在面包板上,并使用钳子进行固定。

6. 测试电路将电路连接到电源上,并编写程序进行测试。

7. 整理布线在电路测试成功后,用电线整理布线,使其美观整齐。

【8个流水灯来回点亮设计程序】

【8个流水灯来回点亮设计程序】

单片机C语言如何实现8个LED流水灯来回流动?第一部分参考程序#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int//--------------------------------void DelayMS(uint ms){uchar t;while(ms--) for (t=0;t<120;t++);}//----------------------------------void main(){P2= 0xfe;while (1){P2 =_crol_(P2,1);DelayMS(200);}}2012-06-14 17:06 芯DZ|分类:C/C++|浏览267次现在只能从左到右循环流动,怎么才能从左到右再从右到左流动呢?#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit beep=P2^3;uchar p1e;void delay(uint a);void main(){p1e=0xfe;P1=p1e;while(1){p1e=_crol_(p1e,1);delay(55);P1=p1e;beep=0;delay(55);beep=1;delay(55);}}void delay(uint a){uint x,y;for(x=a;x>0;x--)for(y=150;y>0;y--); }提问者采纳2012-06-14 17:51char i;while(1){for(i=0; i<7; i++){p1e=_crol_(p1e,1);delay(55);P1=p1e;beep=0;delay(55);beep=1;delay(55);}for(i=0; i<7; i++){p1e=_cror_(p1e,1);delay(55);P1=p1e;beep=0;delay(55);beep=1;delay(55);}}CYF0316|六级p1e=_cror_(p1e,1);追问这个只是向右移吧...我是说向左移动到第8个LED后再从第8个向左移,实现来回流动回答1,赋值2,右移动3,再赋值4,左移动你程序都写出了只是把程序COPy 粘帖到下面把p1e=_crol_(p1e,1); 改成p1e=_cror_(p1e,1); 就好了呀第二部分参考、归纳、总结得正确程序(仅供参考)#include <AT89X51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint ms) {uchar t;while(ms--) for (t=0;t<120;t++);}void main(){ char i;P2= 0xfe;while (1){for(i=0; i<7; i++){P2 =_crol_(P2,1);DelayMS(200);}for(i=0; i<7; i++){P2 =_cror_(P2,1);DelayMS(200);}}}以下是附加文档,不需要的朋友下载后删除,谢谢班主任工作总结专题8篇第一篇:班主任工作总结小学班主任特别是一年级的班主任,是一个复合性角色。

八位流水灯设计报告

八位流水灯设计报告

八位流水灯循环点亮电路设计1.设计要求采用74LS138芯片,实现8位流水灯循环点亮电路。

2.题目分析74LS138为3-8线译码器,它的工作原理是:①当一个选通端(E1)为高电平,另两个选通端E2和E3为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。

举例说明:如果A2A1A0=001,那么Y1输出0,其余输出1,发光二极管阴极接Y0-Y7,阳极接VCC,接上限流电阻,则Y1端发光二极管发光。

课题要求设计八位二极管循环点亮,则需要一系列脉冲序列,使得A2A1A0电平发生变化。

即依次选通Y0-Y7,脉冲从000-111。

3.方案选择利用74LS138选通发光二极管发光。

利用74LS161产生000-111脉冲控制74LS138的A2A1A0,依次选通Y0-Y7。

产生脉冲序列也可以用74LS191是四位二进制同步加/减计数器,与74LS161相比,它能够实现减计数,此处只需要求产生脉冲序列,而且74LS161是常用的计数器,所以选择74LS161产生脉冲序列。

74LS161计数必须有时钟脉冲,如何获得时钟脉冲:一、函数发生器获得;二、555定时器可以产生方波;三、LM358设计成方波发生器。

因为在电子设计这门课程中,我们做过LED闪烁灯,产生方波的原理前面实验报告中已经有所介绍,所以决定采用555定时器产生方波,而且频率更容易控制。

到此,所需设计已经完成,但如果加上数码管显示第几个LED灯发光,还需要讲信号进行译码,才能输出显示数字。

采用4511芯片驱动数码管,功耗比较低。

4.原理框图5.主要元器件介绍5.1 74LS13874LS138 为3 线-8 线译码器,其工作原理如下:●当一个选通端(E1)为高电平,另两个选通端(E2)和(E3)为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。

●若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。

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