估摸着是点亮流水灯的代码吧,首先delay();是延时这能明白吧!while(1){ temp=0xfe;P1=temp; //先让P1口值为0xfe,估计是先点亮一个LED灯 delay();for(i=1;i<8;i++){ a=temp<>(8-i); //temp右

中断程序 void zhongduan() interrupt 0 { flag=!flag; }

proteus电路图 画法依旧不说,给出元件清单,其实都差不多,与上篇一致51单片机 电容 瓷片电容 晶振 红色二极管 电阻 电路图如图 程序清单 说明:流水灯的闪亮方法肯定不是唯一的,按照各种形式都可以写出所需的程序,这里只用

P1=0xfe;0xfe是十六进制表示的数,二进制就是1111 1110,通过你的程序和相关注释可以看出,硬件上你有8个led灯连接P1口,且这些led是低电平亮。P1=0xfe(1111 1110)也就是表示七个灯灭,一个灯亮。接下来的代码就是

C语言C51单片机花样流水灯程序分析注释

使左边第二个小灯亮 LCALL DELAY ;调用延时 SJMP LOOP ;跳到loop ,这样循环下来,依次从右往左点亮小灯 DELAY:MOV R6,#255 ;延时程序 D1: MOV R7,#255 DJNZ R7,DJNZ R6,D1 RET END

L1:这是标号,目的是使跳转指令找到跳转的目的地,就像是门牌号码,跳转指令根据这个标号找到要跳转到的地址。L2:DJNZ decreas jump not zero 就是非零跳转,判断R3是否为0,如果不为0跳转到L2这个标号所在的行去执行程序

DELAY //函数名(用于延时 即 拖延时间 目的为将上个状态 延续)后面都是MOV P1,#值b ; LCALL DELAY AJMP START //跳回 START循环 DELAY: //DELAY函数 书写开始 L1: L2: L3: //3个函数 DJNZ R3 ,L2;

#0FEH ;流水灯LED初值,点亮第一个灯LOOP:MOVP1,A ;P1口为LED控制口,将A赋值给P1LCALLDELAY ;延时RLA ;循环左移一位DJNZR2,LOOP ;R2减1不为0转移

A 将A里面的数输出到P0端口 CALL DELAY 执行Delay延迟段代码,不延迟的话就不是流水灯了而是全亮。。。 RL A 左移A寄存器内容(移动后变成11111100B) DJNZ R2,S0 (R2-1)为0?不是则跳转到S0句 SJMP MAIN 跳转到m

ORG 000H //定位,使程序放在0000H处\x0d\x0a MOV P1,#0FFH //使P1口全为高电平,八个灯全灭\x0d\x0aL034: MOV A,#0FEH //11111110B值送入A,只使P1.0为低电平\x0d\x0aL033: MOV P1

流水灯汇编解释?

LED=0xff; 如果全部点亮,则将全部发光管熄灭 } } } void Delay10ms(unsigned int c)延时函数主程序 { unsigned char a, b;建立两个变量 a b for(;c>0;c--)循环语句,不断改变变量数值,已达到延时目的

0x80h等于1000 0000b也就是说二进制的高位为1点亮了最高位的led,其他的led没被点亮,顾名思义反向的自然是0x7F了等于0111 1111 另外c语言里所有的变量都要声明

temp = temp | 0x01;意思就是LED移位以后,把最低位的LED补上一个1,就是让它熄灭。

7、用单片机控制的LED流水灯设计(电路、程序全部给出)1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。8、

bit LEDDirection = 1; /*声明位变量LEDDirection,用来指示点亮的方向,初始值为1*/ while(1) /*一直循环执行大括号里面的语句*/ { if(LEDDirection) /*当LEDDirection=1时,0000 0001左移LEDIndex位,取反后送给P2

执行过程简析如下:当第一次流水完成后(亮完最后一颗灯),第一次 i 循环结束,执行 i 循环内的最后一条语句带C左移,a 又回到第一颗灯状态(0xfe=1111 1110b);执行第③点的左移,此时j=0,相当于不移。再执行

单片机C程序 LED流水灯的 看不懂 求解释。。

关于流水灯单片机程序代码,急求单片机流水灯程序及详解这个很多人还不知道,今天来为大家解答以上的问题,现在让我们一起来看看吧!1、你好! 给你两个份实例 基本可以搞定啦 !一。2、流水灯实例1. 基础知识:寻址方式是寻找、确定参与操作

先亮指初始状态,因为不知道你的是低电平还是高电平驱动),那么temp=0x7F就是第八位先亮,而且两个循环放方向不一样!一个向左,一个向右,说白了就是两段程序形成的状态是互补的形式。

START: //主函数循坏体开始 MOV P1,#0111 1111b // 将二进制值0111 1111 放入P1 LCALL //进入函数 DELAY //函数名(用于延时 即 拖延时间 目的为将上个状态 延续)后面都是MOV P1,#值b ; LCALL DELAY AJMP

执行过程简析如下:当第一次流水完成后(亮完最后一颗灯),第一次 i 循环结束,执行 i 循环内的最后一条语句带C左移,a 又回到第一颗灯状态(0xfe=1111 1110b);执行第③点的左移,此时j=0,相当于不移。再执行

然后是MOV P1,A。把累加器ACC里的FE给P1端口,这时候流水灯才开始亮起来了。按你图上的画法,是P1.0的灯亮,其他的灯不亮。然后执行ACALL DELAY。这是子程序调用。调用名字为DELAY的子程序。这个时候程序跳转到最左边

只有D1亮\x0d\x0a LCALL SE19 //调用延时子程序(决定每个灯亮的时间长度)\x0d\x0a // {可在此再次(或多次)加入“LCALL SE19”使亮的时间增加一倍}\x0d\x0a \x0d\x0a RL A /

单片机的流水灯汇编程序怎么解释?

#include 包含单片机专用头文件 #include 这个是什么俺也不知道,但这个程序不需要这个头文件 void Delay10ms(unsigned int c); 自定义的延时函数声明 main() 主函数 { unsigned int LED; 建立一个数值型变量,变量名 LED LED=0xfe; 给这个变量赋值,0xfe 换成二进制数为 1111 1110 while(1) 主循环 { P2=LED; 点亮发光管,即先点亮右边的第一个 Delay10ms(50); 延时一段时间 LED=LED<<1; 点亮的发光管,向左移动一位 if (P2==0x00) 判断是否8个全部点亮了 { LED=0xff; 如果全部点亮,则将全部发光管熄灭 } } } void Delay10ms(unsigned int c)延时函数主程序 { unsigned char a, b;建立两个变量 a b for(;c>0;c--)循环语句,不断改变变量数值,已达到延时目的 { for(b=38;b>0;b--) { for(a=130;a>0;a--); } } } 给你翻译了,希望能帮到你
ORG 000H //定位,使程序放在0000H处 MOV P1,#0FFH //使P1口全为高电平,八个灯全灭 L034: MOV A,#0FEH //11111110B值送入A,只使P1.0为低电平 L033: MOV P1,A //将A值送出P1口,只有D1亮 LCALL SE19 //调用延时子程序(决定每个灯亮的时间长度) // {可在此再次(或多次)加入“LCALL SE19”使亮的时间增加一倍} RL A //左循环位移,为了下次只使D2亮(再下次就是D3……) SJMP L033 //跳转到L033处重新执行,使D1、D2、D3……D1轮流亮 //下面是延时程序,决定每调用一次延时多长时间 ORG 07A0H //定位,将下面的程序(延时程序段)放在07A0H处 SE19: MOV R6,#0A0H //更改#0A0H值 L036: MOV R7,#0FFH //或更改#0FFH值就可以改变其每次调用延时的时间 L035: DJNZ R7,L035 DJNZ R6,L036 RET END
汇编程序如下: ; 花样流水灯(8个发光二极管以各种形式循环点亮) ; 功能:流水灯(8个发光二极管循环以1S间隔以各种形式循环点亮) ORG 0000H ;伪指令,指定程序从0000H开始存放 LJMP MAIN ;跳转指令,程序跳转至MAIN处执行 ORG 0030H ;伪指令,指定程序从0030H开始存放 MAIN: MOV SP, #60H ;给堆栈指针赋初值 MOV P1,#0FFH ;给P1口赋值 MOV DPTR,#TABLE;查表 LIGHT: MOV R4,#42 ;设置循环次数 LOOP: MOV A,#42 ;给A赋初值 SUBB A,R4 ;将A的值与R4的值相减,结果存在A中 MOVC A,@A+DPTR ;将A+DPTR的值所对应的TABLE中的值赋给A MOV P1,A ;将A的值赋给P1口 LCALL DEL1S ;调用1S延时子程序 DJNZ R4,LOOP ;判断R4是否为0,不为0跳转,为0顺序执行 LJMP LIGHT ;跳转指令,跳转至LIGHT处继续执行 ;1S延时子程序(11.0592MHz晶振,误差0微秒) DEL1S: MOV R5, #089H DL1S0: MOV R6, #0A4H DL1S1: MOV R7, #013H DJNZ R7, $ DJNZ R6, DL1S1 DJNZ R5, DL1S0 RET TABLE: ;定义表格数据 DB 0FFH ;全灭 DB 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 07FH ;依次逐个点亮 DB 0FEH 0FCH 0F8H 0F0H 0E0H 0C0H 080H 000H ;依次逐个叠加 DB 080H 0C0H 0E0H 0F0H 0F8H 0FCH 0FEH 0FFH ;依次逐个递减 DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ;两边靠拢后分开 DB 07EH 03CH 018H 000H 000H 018H 03CH 07EH ;两边叠加后递减 DB 000H ;全亮 END ;程序结束指令 C语言程序如下: /* 该实验是花样流水灯(8个发光二极管以各种方式循环点亮),功能是花样流水灯(8个发光二极管以1S间隔以各种方式循环点亮) */ #include//包含reg.52文件 #define uint unsigned int//宏定义 #define uchar unsigned char//宏定义 void delay(uint z);//声明延时函数 uint a;//定义循环用变量 uchar code table[]={ 0xff,//全灭 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加 0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减 0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开 0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减 0x00,//全亮 };//定义循环用数据表格 /*亮的现象:先是全灭,然后依次逐个点亮,然后依次逐个叠加, 然后依次逐个递减,然后两边靠拢后分开,然后两边叠加后递减, 最后全亮。循环!*/ void main()//main函数 { a=0;//给a赋初值 while(1)//while循环 { P1=table[a];//将a所在的table中的值赋给P1口 delay(1000);//1S延时子程序 a++;//a的值加一 if(a==42)//测试a是否等于42 a=0;//给a赋值 } } void delay(uint z)//1ms延时子程序,通过z值改变延时时间 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
用位定义就可以了