关键语句在于两个for中的“a=_crol_(a,1);”和“a=_cror_(a,1);”,可以发现用的是两个不同的函数_crol_()和_cror_(),一个左移,一个右移
51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include
rl a ;左移一位 mov p0,a ;将左移的数据再送到p1 djnz r3,loop ;没有完成8位继续 ;mov p0,#0ffh ;熄灭所有灯 ;;右移 mov r3,#8 ;设置流水位数 mov p0,#01111111b ;从p0.7开始 loop1
LOOP2 SETB 01H CLR 00HLOOP2: JB 01H,LOOP3 JB 00H,LOOP4 SJMP MAINLOOP3: MOV P0,A RR A LCALL DELAY SJMP LOOPLOOP4: MOV P0,A RL A LCALL DELAY SJMP LOOP
对控制LED口的寄存器进行位操作,按k1左移,按K2就是右移了。51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内
// 对变量j 中的值按位取反后,从P1口输出 delay02s( ); // 延时0.2s j= j<<1; // 左移1位 } j=0x80; // 设置右移初始值j为0x80 for (i=0;i>1; // 右移1位 } } }
流水灯的左右移,第一用"intrins.h"的文件包,第二要要会定义赋值变量,第三延时,这是关键。
关于流水灯左移和右移的程序问题
控制8个LED灯,使用上拉方式控制,引脚高电平灯灭,引脚低电平灯亮。这8个LED使用同一P口上的所有引脚,假设为P1口中的P1.0-P1.7共8个脚。软件中,只需要将这些灯使用一个for循环即可。代码 include
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<>i;delay_ms(500);} } }
while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六
输入 : 无 输出 : 无 说明 :也可以使用例1的的方法来关闭数码管 / void Main(void){ uchar i;while(1){ P1 = 0xfe;for(i=0; i<7; i++){ P1 = _crol_(P0, 1); //用于循环左移 Delay(15);}
急求!求一个使单片机控制P1端口的8个LED灯做作左移流水灯的C语言程序(用循环结构)
,故点亮的是p1.0引脚所对应的led灯,也就是你所谓的c0。所以你的程序没有问题啊。
实现两个按键控制LED流水灯,按下P3.0,8个LED循环左移,按下P3.1,8个LED循环右移 调试时只能循环一次 10 ORG0000HLJMPMAINORG0030HMAIN:MOVP1,#00HMOVP3,#0FFHLOOP:MOVP1,#00HJNBP3.0,KEY1JNBP3.1,KEY2LJMPLOOPKEY1:ACALLD
LED=1;P0=LED;while(1)//大循环:至右边最后一个灯,再向左返回至第一个灯// { while(P0!=0x80)//循环1: 向右至最后一个灯 ,在最后一个灯亮后循环断开 { LED=_crol_(LED,1); // 右移1位 j=50000
你好!!for(i=8;i>0;i--) // 这里的循环是错的,应该是 i--; { } i=8; // 循环退出后,i 重新赋值 8 修改后的完整代码:include
我想实现LED灯循环左移,可是只循环了一次 ,就不循环了,求大神指教,程序如下:
第一种:1个LED发光,循环右移。第二种:2个LED发光,循环右移。第三种:3个LED发光,循环右移。第四种:4个LED发光,循环右移。再改成左移,就又有四种。这就有八种了。一边移动,一边闪烁;再改变一下速度;这
第1题.走马灯程序:(1)8个发光二极管,首先点亮一个,依次左移,然后右移,如此重复4次;(2)点亮两个,依次左移,然后右移,如此重复4次;(3)点亮三个,依次左移,然后右移,如此重复4次;(4)如此每次增加一个,直到8个全部
如果你把发光管的正极接电源,那么程序是这样的:include
这个控制原理跟你点亮八个LED灯是一样,你只要能让八个灯亮,再让八个灯灭,你就已经成功了一半,其次就移位操作,C里面有,你懂的,一个个实现,软件设计,只要知道了设计思路,你就应该能解决的。相信自己,你可以的
led_k=1;/*打开8个led的总开关*/ du=0;we=0;while(1){ led1=0;delayms(500);led1=1;delayms(500);led2=0;delayms(500);led2=1;delayms(500);led3=0;delayms(500);led3=1;delayms(500);led4=0;delay
8个LED流水灯依次循环亮的C语言程序,问题详细内容为:我用的是PROTUSE做的仿真程序,想让这8个流水灯依次亮从P0到P7口要它的C语言程序可以在KEILC51里面运行的,希望在每句C语言后面有个解释不用WHILE和for语句i高分悬赏我
include "reg51.h"include "intrins.h"define uchar unsigned char define uint unsigned int sbit Led=P1;void delay(void);void main(void){ unsigned char tmp,i;P1=0x00;//全熄灭 while(1){ for(i=0;i<8;
单片机编程:有8个LED灯P0——P7,编一段程序使之实现 P0亮后依次右移到P7,再从p7左移到P0 如此循环不止。
汇编语言 LEDEQU 30H ORG 0000H LJMP MAIN ORG 0030H MAIN:CLR EA MOV SP,#5FH MOV LED,#0FEH MOV R0,#7 LOOP:MOV R7,#50 LCALL DELAY MOV A,LED RL A MOV LED,A MOV P3,A DJNZ R0,LOOP MOV R0,#7
SETB EX0 SETB IT1 SETB EX1 SETB EA MAIN:SJMP MAIN INEX0P:MOV P1,A RL A RETI ;--- INEX1P:MOV P1, A RR A RETI ;--- END
K1 EQU P1.0K2 EQU P1.1ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,#0FEH CLR 00H CLR 01HLOOP: JB K1,LOOP1 SETB 00H CLR 01H SJMP LOOPLOOP1: JB K2,LOOP2 SETB 01H
while(k2==0);led=(led>>1)|0x80;if(led==0xff)led=0x7f;} } } }
假设使用P0口控制LED:主程序里:MOV P0,#10000000B;按键响应程序:MOV A,P0;RL A;MOV P0,A;
单片机汇编语言编程 每按一下独立按键,led灯显示左移一位
单片机led左移然后右移循环亮灭的汇编语言 电路与程序如下:本程序,经过硬件检验,完全符合题目要求。
1定义一个变量存储待移位的数值,并将其转换为二进制数形式。2将二进制数码管的对应端口输出全部清零。3利用位运算符 << 将数值向左移动一位,并将最高位的数值存放到最低位。4将新的数值通过端口输出到相应的数码管上。
八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环,晶振12M:这是汇编:ORG 0 START:MOV R2
P1=1; } while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } /*--- 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的
/*--- 名称:IO口高低电平控制 修改:无 内容:2个led灯先左移,然后右移,然后同时闪烁 ---*/ includereg52.h //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 void Delay(unsigned int t)
10.怎么玩转单片机双灯左移右移闪烁
四个按键,定义如下: KEY1 BIT P3.0 KEY2 BIT P3.1 KEY3 BIT P3.2 KEY4 BIT P3.3 按键处理程序: ;----------------------------------- READ_KEY: JB KEY1, K2 CALL DELAY JB KEY1, K2 JNB KEY1, $ PUSH ACC INC 75H MOV A, 75H CJNE A, #10, ZINT01 MOV 75H, #0 ZINT01: POP ACC JMP K_EXIT ;--------------- K2: JB KEY2, K3 CALL DELAY JB KEY2, K3 JNB KEY2, $ PUSH ACC INC 76H MOV A, 76H CJNE A, #10, ZINT01 MOV 76H, #0 ZINT01: POP ACC JMP K_EXIT ;--------------- K3: JB KEY3, K4 CALL DELAY JB KEY3, K4 JNB KEY3, $ PUSH ACC DEC 75H MOV A, 75H CJNE A, #255, ZINT03 MOV 75H, #9 ZINT03: POP ACC JMP K_EXIT ;--------------- K4: JB KEY4, K_EXIT CALL DELAY JB KEY4, K_EXIT JNB KEY4, $ PUSH ACC DEC 76H MOV A, 76H CJNE A, #255, ZINT04 MOV 76H, #9 ZINT04: POP ACC K_EXIT: RET ;--------------- DELAY: DJNZ R7, $ DJNZ R7, $ RET ;-----------------------------------单片机的P1.0-P1.3接四个发光二极管L1-L4的阴极,P1.4-P1.7接四个开关K1-K4 程序: ORG 00H START: MOV A,P1 ANL A,#0F0H RR A RR A RR A RR A ORl A,#0F0H MOV P1,A SJMP START 可以检测单个按键,也可以同时检测多个按键 过程:开始——读P1口数据到A——A中的数据右移4次——A中的内容和F0H相或——A中的数据送到P1口——回到开始
跑马灯。网上一大把。 我就解释下间隔一秒的那个,时间常数。 看你用的定时器方式。一般用方式1。若频率是24mhz,机器周期为0.5us。所以计数次数为1s/0.5us=200000次超过了范围。所以用循环。可以50000循环4次或其他次数。算出技术初值。
;增加了几行: ORG 0000H LJMP SETUP ORG 0003H LJMP INEX0P ;----------------------------- ORG 0013H LJMP INEX1P ;----------------------------- ORG 0030H SETUP: MOV A, #0FEH SETB IT0 SETB EX0 SETB IT1 SETB EX1 SETB EA MAIN: SJMP MAIN INEX0P: MOV P1,A RL A RETI ;----------------------------- INEX1P: MOV P1, A RR A RETI ;----------------------------- END
没有代码你让别人怎么帮你看
1丶一发现有中差评,立刻在一两分钟联系上买家,能旺旺在线解决,可以免去很多的长途电话费了。 2丶如果说买家是通过网页端登录,那么这时候为防客户在上班,可以通过短信的形式联系客户,看能不能尽快的解决。如果过程比较复杂难搞,卖家你还是拿起你的电话吧,毕竟,差评意味着什么自己最有发言权。 3丶如果说,卖家的手机装了一些安全软件,对于一些陌生来电进行了设置,以至让卖家联系不上客户,那么,这时候,可以通过支付宝号的查询,网站留言等方式尝试联系。
#include "reg51.h" main() { unsigned int i,j; while(1) { P1=0xfe; //点亮第一个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xfd; //点亮第二个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xfb; //点亮第三个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xf7; //点亮第四个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xef; //点亮第五个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xdf; //点亮第六个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0xbf; //点亮第七个LED for(i=200;i>0;i--) for(j=500;j>0;j--); P1=0x7f; //点亮第八个LED for(i=200;i>0;i--) for(j=500;j>0;j--); } } 或: #include "reg51.h" void delay(unsigned int t) { unsigned inti,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } main() { unsigned char w,i; while(1) { w=0xfe; for (i=0;i<8;i++) { P1=w; //循环点亮LED w<<=1; //点亮灯的位置移动,最低位补0 w=w|0x01; //将最低位置1 delay(500); //延时 } } } 或: #include "reg51.h" //程序中使用_crol_函数,所以要包含头文件"intrins.h" #include "intrins.h" void delay(unsigned int t) { unsigned int i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } main() { unsigned char temp; temp=0xfe; while(1) { P1=temp; delay(500); //延时 temp=_crol_(temp,1); //点亮LED的位置循环左移一位 } }
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。 2、#include "reg51.h"首先写出单片机的头函数。 3、#include "intrins.h"输入位移函数。 4、unsigned int count=0,led;定义函数。 5、输入主函数,定义单片机的端口,写入延时函数。 6、中断跳转,使流水灯运行起来。