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

合集下载

单片机8个led灯循环点亮程序

单片机8个led灯循环点亮程序

单片机8个led灯循环点亮程序一、前言单片机是一种非常重要的电子元件,它可以通过编程来实现各种功能。

其中,点亮LED灯是最基础的操作之一。

本文将介绍如何使用单片机8个LED灯循环点亮。

二、硬件准备1. 单片机:STC89C52RC或其他8051系列单片机;2. LED灯:8个;3. 电阻:8个(220欧姆);4. 面包板:1个;5. 杜邦线:若干。

三、程序设计首先,我们需要了解一些基本的概念和知识:1. 端口:单片机的I/O口被称为端口,其中P0、P1、P2、P3四个端口分别对应着不同的引脚。

2. 输出:通过控制端口输出高电平或低电平来控制外部设备。

3. 延时函数:为了让程序在执行时停留一段时间,需要使用延时函数。

接下来,我们开始编写程序。

具体步骤如下:1. 定义引脚首先,我们需要定义每个LED所对应的引脚。

这里我们将8个LED分别连接到P0口的0~7引脚上。

sbit led0=P0^0;sbit led1=P0^1;sbit led2=P0^2;sbit led3=P0^3;sbit led4=P0^4;sbit led5=P0^5;sbit led6=P0^6;sbit led7=P0^7;2. 定义延时函数为了让程序在执行时停留一段时间,我们需要定义一个延时函数。

这里我们使用循环来实现延时。

void delay(unsigned int i){while(i--);}3. 循环点亮LED灯接下来,我们就可以开始循环点亮LED灯了。

这里我们使用for循环来实现。

void main(){while(1){for(int i=0;i<8;i++){switch(i){case 0:led0=1;break;case 1:led1=1;break;case 2:led2=1;break;case 3:led3=1;break;case 4:led4=1;break;case 5:led5=1;break;case 6:led6=1;break;case 7:led7=1;break;}delay(50000);switch(i){case 0:led0=0;break;case 1:led1=0;break;case 2:led2=0;break;case 3:led3=0;break;case 4:led4=0;break;case 5:led5=0;break;case 6:led6=0;break;case 7:led7=0;break;}}}}四、总结通过以上步骤,我们就可以实现单片机8个LED灯循环点亮的程序了。

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灯来回点亮

目录第一章绪论--------------------------------------------------------3 第二章设计目的及要求-----------------------------------------5 1.1 设计目的--------------------------------------------------------5 1.2 设计要求--------------------------------------------------------5 第三章设计电路原理----------- -------------------------------7 3.1 控制部分的设计与选择-------------------------------------7 3.2 LED显示方案-----------------------------------------------8 第四章硬件系统------------------------------------------------9 4.1 原件清单-------------------------------------------------------9 4.2 单片机AT89C51---------------------------------------------9 4.3 单片机时钟电路--------------------------------------------104.4 单片机复位电路---------------------------------------------11 4.5 工作电路------------------------------------------------------12 第五章软件设计------------------------------------------------135.1 程序流程图--------------------------------------------------13 5.2 编辑源程序--------------------------------------------------14 第六章系统调试与仿真结果--------------------------------166.1系统调试-----------------------------------------------------16 6.2仿真结果----------------------------------------------------16 总结------------------------------------------------------------- 19 参考文献--------------------------------------------------------20第一章绪论课题简介当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品。

8个LED灯循环闪烁课程设计

8个LED灯循环闪烁课程设计

摘要“微机原理与接口技术”是高等学校电子信息工程、通信工程、自动化、电气工程及其自动化等工科电气与电子信息类各专业的核心课程。

该课程以INTER 8086微处理器和IBM PC系列微机为主要对象,系统。

深入地介绍了微型计算机的基本组成、工作原理、接口技术及应用,把微机系统开发过程中用到的硬件技术和软件技术有机地结合起来。

本文详述了8个LED灯循环闪烁的课程设计。

设置8个LED灯,首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。

然后是2、4、6、8号LED 依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。

本课程设计,由于自身能力和学习水平有限,可能存在一定的错误和不当之处,敬请批评和指正。

一、设计目的1.巩固和加深课堂所学知识;熟悉各种指令的应用及条件;2.学习掌握一般的软硬件的设计方法和查阅、运用资料的能力;3.进一步了解8255A各引脚的功能, 8255A和系统总线之间的连接, 8255A和CPU 之间的数据交换,以及8255A的内部逻辑结构。

深入掌握8255A显示电路的基本功能及编程方法,8255等芯片的工作方式、作用。

4.培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。

通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。

同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。

二、设计内容根据所学内容和对8255A的应用,整个系统硬件采用8086微处理器和8255A可编程并行接口芯片和8个LED等连成硬件电路。

设计8个LED灯,实现如下要求:首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。

然后是2、4、6、8号LED依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。

三、设计要求使用8255A可编程接口芯片实现8个LED灯以十种不同的方式显示。

八位双向流水灯”设计

八位双向流水灯”设计

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

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灯的状态。

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

实现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 A MOVC 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微秒。

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微秒。

单片机-流水灯的程序

单片机-流水灯的程序
程序分析:
#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
二进制
十六进制
二进制

单片机课程设计-8个LED灯来回点亮

单片机课程设计-8个LED灯来回点亮
第一章绪论
课题简介
当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品。而电子LED灯已跨入了我们生活的众多电子领域。在众多场合随处可见的闪光灯,流水灯不仅大方美观而且十分节能。然而控制它们的单片机却是一个不能被忽视的角色。
单片机简介
第二章设计目的及要求
2.1设计目的
通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
通过本次设计的训练,可以使我在基本思路和基本方法上对基于89C51单片机的系统设计有一个比较感性的认识,并具备一定程度的设计能力。
5.2编辑源程序--------------------------------------------------14
第六章系统调试与仿真结果--------------------------------16
6.1系统调试-----------------------------------------------------16
4.5工作电路------------------------------------------------------12
第五章软件设计------------------------------------------------13
5.1程序流程图--------------------------------------------------13
培养实践技能,提高分析和解决实际问题的能力。
2.2设计要求
(1)认真研究设计任务书,明确设计要求、条件、内容和步骤;复习课程有关内容,熟悉有关单元电路的设计方法和步骤;搜集、分析、消化相关资料、软件等;掌握微型计算机应用系统软件设计方法;准备好设计需要的图书、资料和工具;拟定设计计划等

8个流水灯实验课程设计

8个流水灯实验课程设计

8个流水灯实验课程设计一、课程目标知识目标:1. 学生能理解流水灯的基本原理,掌握电路连接和编程方法。

2. 学生能描述8个流水灯实验的电路图和程序流程。

3. 学生了解并掌握数字电路的基本逻辑功能及其应用。

技能目标:1. 学生能够独立完成8个流水灯实验的电路搭建和程序编写。

2. 学生通过实验操作,提高动手能力和问题解决能力。

3. 学生通过小组合作,提高沟通和团队协作能力。

情感态度价值观目标:1. 学生对电子技术产生兴趣,激发学习积极性。

2. 学生培养耐心、细心的实验态度,养成良好的实验习惯。

3. 学生认识到科技发展对社会的重要性,增强科技创新意识。

课程性质:本课程为实践性课程,结合电子技术和编程知识,培养学生的动手操作能力和创新思维。

学生特点:学生为八年级学生,具有一定的物理知识和数学基础,好奇心强,喜欢动手操作。

教学要求:教师需引导学生掌握基本原理,注重实验操作和问题解决能力的培养,关注学生的情感态度价值观培养。

教学过程中,将目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容本课程依据课程目标,结合教材相关章节,组织以下教学内容:1. 流水灯基本原理:讲解电路组成、LED特性、控制器等基础知识,对应教材第3章。

2. 电路连接方法:学习电路图的识别,掌握面包板的使用,进行电路搭建,对应教材第4章。

3. 编程方法:学习C语言基础,编写流水灯程序,掌握循环和延时函数的使用,对应教材第5章。

4. 数字电路逻辑功能:介绍基本逻辑门电路,理解并应用与、或、非门等逻辑功能,对应教材第6章。

5. 8个流水灯实验:结合以上知识,进行实验操作,包括电路搭建、程序编写和调试,对应教材第7章。

教学大纲安排如下:1. 第1周:流水灯基本原理学习。

2. 第2周:电路图识别和面包板使用训练。

3. 第3周:C语言基础和编程方法教学。

4. 第4周:数字电路逻辑功能讲解。

5. 第5-6周:8个流水灯实验操作及问题解决。

教学内容科学系统,注重理论与实践相结合,使学生在掌握知识的同时,提高实际操作能力。

【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篇第一篇:班主任工作总结小学班主任特别是一年级的班主任,是一个复合性角色。

8个LED灯循环闪烁课程设计

8个LED灯循环闪烁课程设计

摘要“微机原理与接口技术”是高等学校电子信息工程、通信工程、自动化、电气工程及其自动化等工科电气与电子信息类各专业的核心课程。

该课程以INTER 8086微处理器和IBM PC系列微机为主要对象,系统。

深入地介绍了微型计算机的基本组成、工作原理、接口技术及应用,把微机系统开发过程中用到的硬件技术和软件技术有机地结合起来。

本文详述了8个LED灯循环闪烁的课程设计。

设置8个LED灯,首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。

然后是2、4、6、8号LED 依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。

本课程设计,由于自身能力和学习水平有限,可能存在一定的错误和不当之处,敬请批评和指正。

一、设计目的1.巩固和加深课堂所学知识;熟悉各种指令的应用及条件;2.学习掌握一般的软硬件的设计方法和查阅、运用资料的能力;3.进一步了解8255A各引脚的功能, 8255A和系统总线之间的连接, 8255A和CPU 之间的数据交换,以及8255A的内部逻辑结构。

深入掌握8255A显示电路的基本功能及编程方法,8255等芯片的工作方式、作用。

4.培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。

通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。

同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。

二、设计内容根据所学内容和对8255A的应用,整个系统硬件采用8086微处理器和8255A可编程并行接口芯片和8个LED等连成硬件电路。

设计8个LED灯,实现如下要求:首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。

然后是2、4、6、8号LED依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。

三、设计要求使用8255A可编程接口芯片实现8个LED灯以十种不同的方式显示。

八位流水灯设计报告

八位流水灯设计报告

八位流水灯循环点亮电路设计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还可作数据分配器。

Arunio编程8个灯依次全部亮起来再流水灯闪烁

Arunio编程8个灯依次全部亮起来再流水灯闪烁

int timer1 = 10000;int timer2 = 100; // The higher the number, the slower the timing. int ledPins[] = {2, 7, 4, 6, 5, 3, 8,9}; // an array of pin numbers to which LEDs are attachedint pinCount = 8; // the number of pins (i.e. the length of the array)void setup() {// the array elements are numbered from 0 to (pinCount - 1).// use a for loop to initialize each pin as an output:for (int thisPin = 0; thisPin < pinCount; thisPin++) {pinMode(ledPins[thisPin], OUTPUT);}}void loop() {// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer1);}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer1);}// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:}// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:}digitalWrite(ledPins[thisPin], LOW);// loop from the lowest pin to the highest:for (int thisPin = 0; thisPin < pinCount; thisPin++) {// turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}// loop from the highest pin to the lowest:for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // turn the pin on:digitalWrite(ledPins[thisPin], HIGH);delay(timer2);// turn the pin off:digitalWrite(ledPins[thisPin], LOW);}}。

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

单片机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 char
sbit 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:51
char 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);
}
}
}。

相关文档
最新文档