ORG 0000H;复位启动 AJMP START;;主控程序=== START: SETB P1.7 ;P17 = 1 LOOP: JB P3.2,LOOP ;没有按键 LCALL DELAY ;延时消抖 JB P3.2,LOOP ;确认按键 CPL P1.7 ;取反 JB P3
ORG 0000H JMP BEGIN ORG 0030H TABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;12345 DB 6DH,7DH,07H,7FH ;6789 DELAY: MOV R5,#20 LOOP4: MOV R6,#50H ;延
延时六秒不好控制,如果晶振频率你知道的话,多用nop指令,来缓冲循环段的长短不一问题
8个开关分别接P1.0-P1.7 控制输出是P0.0-P0.7LED灯 还有开关延时6S和按住一个按钮锁住其它按钮 例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入 --P0.0,是接的按键? 前面不
用汇编语言编写开关控制LED灯
单片机流水灯程序代码(汇编语言):ORG0000HAJMPMAINORG0030HMAIN:MOVP1,#11111110BACALLDELAY;跳转到子程序MOVP1,#11111101BACALLDELAYMOVP1,#11111011BACALLDELAYMOVP1,#11110111BACALLDELAYMOVP1,#11101111BACALLDELAYMOVP1,
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;
控制输出是P0.0-P0.7LED灯 还有开关延时6S和按住一个按钮锁住其它按钮 例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入 --P0.0,是接的按键? 前面不是说接到 LED 的吗?--延时
在单片机中,假如你的LED是接在P0口,而且是共阴的,那么 MOV P0,#FFH 就是把8个LED都点亮(可以通过调整#后的数改变点亮的情况)也可以点亮单独的一个,用SETB P0.0(P0.1,P0.2,等等)
怎么汇编语言使用LED灯亮
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、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
loop1: mov r7,#01h djnz r7,djnz r6,loop1 ret end 好像是这样,延迟时间可能不太准,也是P1口接8个LED灯
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;} } } 汇
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);
单片机用汇编做一个控制8个LED灯泡从左到右依次点亮,最后全部亮,再全部熄灭后重复前面的过程
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 } }
开关控制指示灯显示 MY8255_A EQU 0A860H;8255A口地址 MY8255_B EQU 0A861H;8255B口地址 MY8255_C EQU 0A862H;8255C口地址 MY8255_MODE EQU 0A863H;8255控制口地址 CODE SEGMENT ASSUME CS:CODE START: MOV DX,MY8255_MODE MOV AL,82H OUT DX,AL ;将控制字82H写入8255控制口,A口方式0输出,B口方式0输入, C口未用到。 A1: MOV DX,MY8255_B IN AL,DX ;读8255 B口内容 MOV DX,MY8255_A OUT DX,AL ; 将前面读到的B口内容送到A口,即A口内容=B口内容 CALL BREAK ;调用子程序BREAK JMP A1 ;跳转到A1 BREAK PROC NEAR ;BREAK子程序 MOV AH,1 INT 16H JZ RETURN ;读按键字符,ZF=1,则返回;ZF=0,则AL=字符 MOV AX,4C00H INT 21H ;返回DOS RETURN:RET BREAK ENDP CODE ENDS END START ;流水灯显示 MY8255_A EQU 0b860H;8255A口地址 MY8255_B EQU 0b861H;8255B口地址 MY8255_C EQU 0b862H;8255C口地址 MY8255_MODE EQU 0b863H;8255控制口地址 DATA SEGMENT LA DB ?;留出1个字节 LB DB ?;留出1个字节 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,MY8255_MODE MOV AL,80H OUT DX,AL ;控制字80H送入8255控制口,A口、B口都是方式0输出,C口未用到。 MOV DX,MY8255_A MOV AL,7FH OUT DX,AL ;将7FH送入A口 MOV LA,AL ;将7FH送入LA存储单元 MOV DX,MY8255_B MOV AL,0FEH OUT DX,AL ;将FEH送入B口 MOV LB,AL ;将FEH送入LB存储单元 CALL DALLY A1: MOV AL,LA ROR AL,1 ;LA内容循环右移1次 MOV LA,AL MOV DX,MY8255_A OUT DX,AL ;将循环右移后的LA内容送A口,其目的是让A口连接的LED灯依次向右循环点亮 MOV AL,LB ROL AL,1 ;LB内容循环左移1次 MOV LB,AL MOV DX,MY8255_B OUT DX,AL ;将循环左移后的LB内容送B口,其目的是让B口连接的LED灯依次向左循环点亮 CALL DALLY ;延时,让一个LED灯发光稳定之后再点亮另一个 CALL BREAK ;调用BREAK子程序,看是否有键按下 JMP A1 ;跳转到A1 DALLY: MOV CX,3FFH ;延时子程序 D1: MOV AX,0FFFFH D2: DEC AX JNZ D2 LOOP D1 RET BREAK PROC NEAR ;是否有键按下 MOV AH,06H MOV DL,0FFH INT 21H JE RETURN ;若无,则转RETURN MOV AX,4C00H INT 21H ;返回DOS RETURN:RET BREAK ENDP CODE ENDS END START
ORG 0000H CLR P1.0 SJMP $ END