} //这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口temp=0xfe;for(num1=0;num1<8;num1++){ P2=temp;P0=0xff;Delay(100);temp =

} //这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口temp=0xfe;for(num1=0;num1<8;num1++){ P2=temp;P0=0xff;Delay(100);temp = _crol_(temp ,

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

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

这只是灯亮的初始状态不一样,如果temp=0x01为第一位先亮(先亮指初始状态,因为不知道你的是低电平还是高电平驱动),那么temp=0x7F就是第八位先亮,而且两个循环放方向不一样!一个向左,一个向右,说白了就是两

每一次循环会在固定的一个时间长度(CYCLE)内显示一个的灭亮过程,随循环的执行改变灭和亮的时间比。说白了就是简单的模拟PWM ,在P2的引脚上将看到一个固定频率但占空比不断变化的波形

解释一下这个流水灯程序

P1=0xbf; //点亮第七个灯 就是:P1 = 1011 1111 //只有D7为0,故点亮第七个灯,其它的,同时都关闭了。

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

内循环你应当能看懂,就是完成灯流水。循环次数取决于外循环,例如第一次外循环(第1个灯)要循环8次、第二次外循环(第1、2个灯)要循环7次。内循环执行完一遍之后,a回复到了最低位为第一个0的状态,因此要_crol_

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

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

LCALL SE19 //调用延时子程序(决定每个灯亮的时间长度)// {可在此再次(或多次)加入“LCALL SE19”使亮的时间增加一倍} RL A //左循环位移,为了下次只使D2亮(再下次就是D3……)SJMP L033 //跳

P1=0xbf; //点亮第七个灯 就是:P1 = 1011 1111 //只有D7为0,故点亮第七个灯,其它的,同时都关闭了。

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

内循环你应当能看懂,就是完成灯流水。循环次数取决于外循环,例如第一次外循环(第1个灯)要循环8次、第二次外循环(第1、2个灯)要循环7次。内循环执行完一遍之后,a回复到了最低位为第一个0的状态,因此要_crol_

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

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

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

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

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

clr a;累加器请0 l0:jnb p3.5,l1;P3.5为低转l1 k0:jb p3.5,l2;P3.5为高转l2 mov r4,#0fh;R4=0fH l1:inc a;累加器加1 mov p1,a;P1=A lcall dl;延时 djnz r4,l1;R4减1不为0转l1 ljmp k0;转

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

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

voiddelay(void){ unsignedinti,j;for(i=0;i<200;i++)for(j=0;j<1000;j++);} voidmain(void){ while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三

define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1=~temp;delay(100);

1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定

//这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口temp=0xfe;for(num1=0;num1<8;num1++){ P2=temp;P0=0xff;Delay(100);temp =

} //这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口temp=0xfe;for(num1=0;num1<8;num1++){ P2=temp;P0=0xff;Delay(100);temp = _crol_(temp ,

请高手解释一下这个单片机流水灯C语言程序,新手~~

后面都是MOV P1,#值b ; LCALL DELAY AJMP START //跳回 START循环 DELAY: //DELAY函数 书写开始 L1: L2: L3: //3个函数 DJNZ R3 ,L2; //执行R3-1 如果不为0执行下一条(DJNZ R2,L1;) 如果等于0

2、 (800,1) 指延时800个延时单位后,再点亮一个灯,依次亮的重复次数为1。其它的类似。3、延时要精确计算,需看dalay函数内的指令执行时间。一般是设个t值,把程序烧进芯片里,估约延时长短,调几次,就得出经验值

;01h循环左移一位,变成00000010b LCALL DELAY 调用延时程序,使小灯亮一会儿,让人眼辨别出小灯是依次循环点亮的 MOV P0,A ;把00000010b送p0口,使左边第二个小灯亮 LCALL DELAY ;调用延时 SJMP LOOP ;跳到loop

①最外层的 j for循环,用来执行8次流水(第一次、第二次);②内层的 i for循环,用来执行每次流水 需要执行多少步(第一次8步,第二次7步);③a=_crol_(a,j) 确实如LZ说的,对a 左移 j 位,

第五步:开始时,8个发光二极管全部被熄灭,然后一个发光二极管被点亮(电量过程是从暗道两的过程,这个过程是PWM方式),以此类推直至8个发光二极管都被点亮。第六步:循环执行前面的第一至第五步。最好可以附上解说,每一部是怎么来的,回

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

while(1)//这是一个死循环,就是程序一直走 { led1=0;1#灯亮(假设是阴极接单片机I/O)delay();延时 led1=1;1#灯灭 delay();延时 led2=0;2#灯亮(以下同)delay();led2=1;delay();led3=0;delay();le

谁能帮我解释一下这个程序每一步都是什么意思??是关于单片机流水灯的

程序有毛病,可能你的数组中的数据个数你少写了,如果for循环中的i=136,那么数组中一定得有136个数据,否则自动取零补充,灯不亮或一直亮。i=多少选的就是数组中的第几个数。主程序中的P0=Pattern_P0应该为P0=Pattern_P0[ ],P2也是如此 。
51单片机的左移右移,首先在开始要调用"intrins.h"的文件包,这个文件包含_cror_(右移),_crol_(左移);然后通过for语句来控制; for(m=20;m>0;m--) for(n=20;n>0;n--) for(k=250;k>0;k--); 理解这三句,第一句是指:m=20;m>0然后m--是真就执行: for(n=20;n>0;n--) for(k=250;k>0;k--); 这两句,m--一直减,减一次,里面就执行一次,这里是20次。 流水灯的左右移,第一用"intrins.h"的文件包,第二要要会定义赋值变量,第三延时,这是关键。
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。 2、#include "reg51.h"首先写出单片机的头函数。 3、#include "intrins.h"输入位移函数。 4、unsigned int count=0,led;定义函数。 5、输入主函数,定义单片机的端口,写入延时函数。 6、中断跳转,使流水灯运行起来。
这个- -!看来你是单片机没学好啊。 挺简单的找你同学写一个就行 我给你一个我练习的程序,你自己看看吧。不符合你要求,你参考参考吧。 #include #include #include #define uchar unsigned char #define uint unsigned int #define BIT(x) (1 << (x)) uchar num; void delayms(uint ms) { uint i,j; for(i=0;i<ms;i++) for(j=0;j<110;j++); } uchar KEY_PRESS() { uchar temp; P3=0XF0; temp=P3; temp&=0XF0; if(temp!=0XF0) delayms(10); if(temp!=0XF0) { return 1; } else { return 0; } } uchar KEY_SCAN() { uchar key; delayms(10); if(KEY_PRESS()) { key=P3; key&=0XF0; switch(key) { case 0XE0: key=1; break; //注意不能漏 break; case 0XD0: key=2; break; case 0XB0: key=3; break; case 0X70: key=4; break; default: key=0; } while(KEY_PRESS()); } else { key=5; } return key; } void LED_control() { uchar temp; temp=KEY_SCAN(); if(temp==1) { num=_crol_(num,1); //循环左移 P1=num; } if(temp==2) { num=_cror_(num,1); //循环右移 P1=num; } } void SYSTEM_INIT() { P1=0XF0; num=P1; } void main() { SYSTEM_INIT(); while(1) { LED_control(); } }
#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
#include "reg52.h" #include "intrins.h" //循环移动函数要用到的头文件 void Delay(unsigned int t) //延时子程序 { unsigned i; while(t--!=0) { for(i=0;i<500;i++) {;} } } void main(void) { unsigned char temp,num1,num2; P0=0xff; //LED初始化 起始状态 灭 P2=0xff; while(1) //大循环 { temp=0xfe; //送给P0口的初值 点亮一侧第一个灯 for(num1=0;num1<8;num1++) //循环体用于循环左移用 循环8次 { P0=temp; //给P0 P2=0xff; //P2控制的灯灭 Delay(100); //延时 temp = _crol_(temp , 1); //执行一次循环就循环左移一位 与汇编的 RL功能相同 } temp=0x7f; //送给P0口的初值 点亮另一侧第一个灯 for(num2=0;num2<8;num2++) { P0=temp; P2=0xff; Delay(100); temp =_cror_(temp,1); //循环右移 同RR 下面的就是控制P2口了 同上面类似 } //这个程序实现的效果是:先让P0口控制的LED自右向左点亮(只亮一个灯)再自左向右点亮 然后就是P2口......... temp=0xfe; for(num1=0;num1<8;num1++) { P2=temp; P0=0xff; Delay(100); temp = _crol_(temp , 1); } temp=0x7f; for(num2=0;num2<8;num2++) { P2=temp; P0=0xff; Delay(100); temp =_cror_(temp,1); } } }
利用对亮和灭延迟时间的不同,加上视觉暂留就有逐渐变化的效果 for(PWM_LOW=1; PWM_LOW<CYCLE ; PWM_LOW++) { P2=0xff; //灭 delay1(PWM_LOW); //灭延迟,随循环的执行,灭的时间越来越长 P2 =0x00; //亮 delay1(CYCLE-PWM_LOW); //亮延迟,随循环的执行,亮的时间越来越短 } 每一次循环会在固定的一个时间长度(CYCLE)内显示一个的灭亮过程,随循环的执行改变灭和亮的时间比。 说白了就是简单的模拟PWM ,在P2的引脚上将看到一个固定频率但占空比不断变化的波形