include
//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay();P3=0xbf;//第七个灯亮 delay();P3=0x7f;//第八个灯亮 delay();} }
//主程序 void main(){ uint s;while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);p0=0xff;DelayMS(150);
} led=0xfe; for(i=0;i<8;i++) { P1=led; led=led<<1; delay(200); } led=0x00; for(i=0;i<8;i++)
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<>i;delay_ms(500);} } }
unsigned LED,i;LED = 0xfe;EA = 0;while(1){ for(i=0;i<7;i++){delay(100);LED = (LED<<1)|0x01;P3 = LED;} for(i=0;i<7;i++){delay(100);LED = (LED>>1)|0x80;P3 = LED;} } } 汇
c语言和汇编的程序八个LED依次左移逐个点亮,点亮后在依次右移逐个点亮不断循环
JMP MAIN ORG 30H MAIN:MOVA,#0FFH;设置左移初值 CLRC;C=0 MOVR2,#08H;设置左移次数 LOOP:RLCA;左移1位 MOVP1,A;输出到P1 CALLDELAY;延时 DJNZR2,LOOP;左移7次 MOVR2,#07H;LOOP1:RRCA;右移1位 MOVP1,A;
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;i++)//左移 { tmp=0x01;tmp=(tmp<
用汇编写这个容易点 main: mov a,#0feh mov r0,#8 loop: mov p1,a acall delay rl a djnz r0,loop delay:mov r6,#0ffh loop1: mov r7,#01h djnz r7,djnz r6,loop1 ret end 好像是这样,延迟时间可能不
P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六个灯亮 delay
void main(){ uint s;while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);p0=0xff;DelayMS(150);
LED = 0xfe;EA = 0;while(1){ for(i=0;i<7;i++){delay(100);LED = (LED<<1)|0x01;P3 = LED;} for(i=0;i<7;i++){delay(100);LED = (LED>>1)|0x80;P3 = LED;} } } 汇编语言 LEDEQU 3
单片机led左移然后右移循环亮灭的汇编语言 电路与程序如下:本程序,经过硬件检验,完全符合题目要求。
单片机led左移然后右移循环亮灭的汇编语言
int i = 8; //循环次数为8 void main(){ P1 = 0xff; //初始化LED,8个LED全灭,(假设低电平点亮)init_t0() ;while(1); //循环等待定时中断 } void init_t0() //定时器0初始化程序 { TMOD = 0x
delay(250); } } } }}
高电平亮 低电平灭 使用51系列单片机 R5寄存器控制要闪烁的发光二极管的位置 MOV R7,#10 LL0:MOV R5,#00000001B MOV A,R5 LL1:MOV P1,A LCALL YS MOV P1,#00H LCALL YS RL A JNB LL1 DJNZ R7,LL0 MO
while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第六
MAIN:MOVA,#0FFH;设置左移初值 CLRC;C=0 MOVR2,#08H;设置左移次数 LOOP:RLCA;左移1位 MOVP1,A;输出到P1 CALLDELAY;延时 DJNZR2,LOOP;左移7次 MOVR2,#07H;LOOP1:RRCA;右移1位 MOVP1,A;输出到P1 CALLDELAY;
各位单片机达人帮个忙 用汇编语言做一个 发光二极管循环点亮的程序 要求 使八只发光二极管做循环点亮一次
1.实现函数Y表达式,已知变量X和函数Y存放于DS:[20H]和DS:[21H]中.Y= |1 (X>0)
#250 DJNZ R4,$ DJNZ R3,DLY RET END
程序段代码:MOV AL,80H;80H是8255的控制字 MOV DX,010EH;010EH是8255的控制端口的地址具体的根据你的电路连接的方法计算出来替换就可以了 OUT DX,AL MOV BX,8 MOV XC,8 A2:MOV AL,01H MOV DX,010AH;010AH是82
1、亮4个灯、暗4个灯,1亮1暗均匀分布且稳 定不变; 2、亮1个灯,暗7个灯,从上到下轮流点亮每 一个灯,每次只亮一个灯,循环间隔约2秒; 3、亮2个灯,暗6个灯,一个灯从上往中间轮 流点亮,另一个灯从下往
halfbytel=halfbytel<<1; delay(10); } }} 例如:1、亮4个灯、暗4个灯,1亮1暗均匀分布且稳定不变;2、亮1个灯,暗7个灯,从上到下轮流点亮每一个灯,每次只亮一个灯,循环间隔约2秒;3、亮2个灯,暗6
8086 汇编 亮2个灯,暗6个灯,一个灯从上往中间轮流点亮,另一个灯从下往中间轮流点亮,循环间隔约1秒。
MAIN: MOV P1, #11111110B ; P1 口 点亮一个发光二极管 ACALL DELAY ; 调用延时子程序 MOV P1, #11111101B ; 从左向右移动 一位 ACALL DELAY MOV P1, #11111011B ACALL DELAY MOV P1, #11110111B ACALL DELAY MOV P1, #11101111B ACALL DELAY MOV P1, #11011111B ACALL DELAY MOV P1, #10111111B ACALL DELAY MOV P1, #01111111B ACALL DELAY JMP MAIN ; 转移 至 MAIN 循环 DELAY: MOV R5,#250 ; 延时子程序 6.000 M 晶振 约 0.5 秒 D1: MOV R6,#250 D2: DJNZ R6,$ DJNZ R5,D1 RET#include #define LED P1 //宏定义,使用LED代替P1口(相当于LED=P1) #define uchar unsigned char //用uchar代替unsigned char方便操作 #define uint unsigned int /*------------------time ms延时函数-----------------*/ void delay_ms(uint time) { uchar tres; for(;time>0;time--) { tres=150; while(tres--); } } void main() { uchar t; LED=0X01;//P1=00000001B while(1)//死循环,不停的点亮和熄灭LED { for(t=0;t<8;t++) { LED=~LED;//按位取反,点亮一个LED delay_ms(100);//延时0.1s LED=~LED;//按位取反 LED<<=1;//左移一位,点亮不同的LED } LED=0X80;//P1=10000000B for(t=0;t<8;t++) { LED=~LED;//按位取反,点亮一个LED delay_ms(100);//延时0.1s LED=~LED;//按位取反 LED>>=1;//右移一位,点亮不同的LED } LED=0X01;//P1=00000001B } }
C语言 #include void delay(unsigned int a) { unsigned i,j; for(i=0;i<a;i++) for(j=0;j<1000;j++); } main() { unsigned LED,i; LED = 0xfe; EA = 0; while(1) { for(i=0;i<7;i++){delay(100);LED = (LED<<1)|0x01;P3 = LED;} for(i=0;i>1)|0x80;P3 = LED;} } } 汇编语言 LED EQU 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 LOOP1: MOV R7,#50 LCALL DELAY MOV A,LED RR A MOV LED,A MOV P3,A DJNZ R0,LOOP1 MOV R0,#7 SJMP LOOP ;---------------------------- DELAY: MOV R2,#8 DLY1: MOV R3,#250 DJNZ R3,$ DJNZ R2,DLY1 DJNZ R7,DELAY RET ;----------------------------- END
22行在while 里面,必然会循环执行,P0=~(1<<8),结果是 0xff,也就是没灯亮。 也就是说,在执行右移的时候,是先灭,亮第1颗,再灭一段时间,再右移下一颗,再灭一段时间,右移下一颗………… #define LED_Num 8 if(cnt<LED_Num) P0=~(1<<cnt); else P0=~(1<<(LED_Num-1<<1)-cnt); for(i=0;i<30000;i++); cnt=++cnt%(LED_Num-1<<1); 另外,以后不要用 延时函数了。
你好,可以用单片机实现 来自天蝎雨之林的回答,满意请采纳,谢谢~祝你生活愉快~
若P1.7—P1.0对应LED7—LED0 ,低电平点亮,高电平熄灭 初始值 A=0xfe ,即LED0 亮,其余灭 执行CLR C; RLC A; A=0xfc ,LED0、LED1亮 执行CLR C; RLC A; A=0xf8 ,LED0、LED1、LED2亮 以此类推: CLR C; RLC A; 在这段程序中,这2条指令目的就是使A变量的数值左移,然后末位补0(bit 0); SETB C; RRC A; 在这段程序中,这2条指令目的就是使A变量的数值右移,然后高位补1(bit 7);