MOV DX,MY8255_B OUT DX,AL ;将循环左移后的LB内容送B口,其目的是让B口连接的LED灯依次向左循环点亮 CALL DALLY ;延时,让一个LED灯发光稳定之后再点亮另一个 CALL BREAK ;调用BREAK子程序,看是否有键按
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
延时六秒不好控制,如果晶振频率你知道的话,多用nop指令,来缓冲循环段的长短不一问题
8个开关分别接P1.0-P1.7 控制输出是P0.0-P0.7LED灯 还有开关延时6S和按住一个按钮锁住其它按钮 例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入 --P0.0,是接的按键? 前面不
用汇编语言编写开关控制LED灯
void t0isr() interrupt 1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;number++;if(number>1)number=0;switch(number){case 0:P2=0x02;P0=distab[dat/10];break;case 1:P2=0x01;P0=distab[dat%10];break;
假设高电平点亮LED,LED接在P0口,主要程序语句如下:uchar c=0;uchar i;while(c<3){ for(i=0;i<8;i++} { P0=1<
把这句删了sbit led=P1^0; //定义LED为P10,可以改为其他IOunsigned char jishi; void Timer0Init(void)//50毫秒@12.000MHz{ AUXR &= 0x7F;//定时器时钟12T模式
void timer() interrupt 1 { TH0=(65535-50000)/256;TL0=(65535-50000)%256;num++;} 这个程序是逐个点亮的(思路:由256逐减1,值由LED灯显示)include
在上述示例程序中,我们将LED连接到Arduino的13号引脚,并使用digitalWrite()函数控制该引脚的电平。HIGH表示将引脚设置为高电平(点亮LED),LOW表示将引脚设置为低电平(熄灭LED)。通过delay()函数设置LED灯亮灭的时间间隔。
{ P1=0xff; //点亮P1口第0个引脚上的LED灯,0xff为二进制的11111111 delay(1000); //延时1秒 P1=0x00; //将P1口全部置为0,熄灭LED灯 delay(1000); //延时1秒 } } 上述程序的作用是在单片机的P1口上间隔点亮
单片机间隔点亮一led灯的C语言程序
MOV IO_LED,#DATA_CloseLED;同时关闭8个LED LCALLDELAY500MS;延时0.5秒 MOV IO_LED,#DATA_OpenLED;同时打开8个LED LCALLDELAY500MS;延时0.5秒 LJMP MAIN;循环 END;上面程序演示了8个LED间隔0.5秒同时亮
LED1_01 = 1;//打开LED灯点亮 while(1){ if(KEY0_01 == 0)//检测按键是否按下 { Delay_1ms(10);//延时去抖动 if(KEY0_01 == 0)//确定按键按下 { LED1_01 = ~LED1_01;//取反LED灯 [亮 .灭 ]
控制输出是P0.0-P0.7LED灯 还有开关延时6S和按住一个按钮锁住其它按钮 例如:按下P0.0松开按钮 然后延时5s灯亮并且在5s之内锁住P0.1-P0.7的输入 --P0.0,是接的按键? 前面不是说接到 LED 的吗?--延时
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:ORG 0000H;复位启动AJMP START;ORG 001BH;T1中断AJMP T1INT;;定义变量===YSJSEQU 30H;延时计数器LEDEQU 31H;LED控制缓冲器 ;主程序===START:MOV LED,#
include
怎么汇编语言使用LED灯亮
这吧个LED使用同一P口上的所有引脚,假设为P一口中的P一.0-P一.漆共吧个脚。 软件中,只需要将这些灯使用一个for循环即可。 代码 #include unsigned char PD
在main函数中添加延时函数,以实现上电后30秒后LED灯开始点亮的要求。下面是一个简单的示例程序,仅供参考:include
MAIN: MOV P1,#11111110B;点亮P1.0所接的灯 ACALL YS ;调用延时子程序,让P1.0所接的灯亮一小段时间 MOV P1,#11111101B;点亮P1.1所接的灯 ACALL YS ;调用延时子程序,让P1.1所接的灯亮一小段时间 MOV
1、首先打开桌面上的keil软件,在进行对51单片机进行编程时最常用的就是keil软件。2、编写相应的代码:#include
1); // 左移一位,点亮下一位LED delay(55); } // 向右循环点亮LED for(i=0; i/ 右移一位,,点亮上一位LED delay(55); } }}// 延时函数,延时a毫秒void delay(uint a){ uint x,y; for(x=a;x>0
用MCS51单片机汇编语言编写的点亮一只LED灯源程序LED1.ASM,代码如下:ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV A,#FEH MOV P1,A AJMP END
const int ledPin = 13;void setup() { // 将LED引脚设置为输出模式 pinMode(ledPin, OUTPUT);} void loop() { // 控制LED灯亮灭 digitalWrite(ledPin, HIGH); // 点亮LED delay(1000); // 延时1秒 digitalWr
单片机点亮一盏led灯代码
用c啊,我想想: 1、和硬件有点儿关系,这个你清楚么? 2、假设led连接到p1口吧。第一个灯接到p1.0。阴极接io,阳极接5v。 #include bit secflag; unsigned char ms; void display(unsigned char num,unsigned char sec) { num%=8; p1=~(1< >8;tl0=-50000; ms++; if(ms>20){ms=0;secflag=1;}//12mhz, 50ms定时中断,1秒计时。 } 你很容易扩展出任意要求的闪烁流水灯啦。 display(2,1); display(1,1); display(3,2); display(1,2); ……放到while里面就好了。祝你玩得开心。MAIN: MOV P1,#11111110B;点亮P1.0所接的灯 ACALL YS ;调用延时子程序,让P1.0所接的灯亮一小段时间 MOV P1,#11111101B;点亮P1.1所接的灯 ACALL YS ;调用延时子程序,让P1.1所接的灯亮一小段时间 MOV P1,#11111011B;点亮P1.2所接的灯 ACALL YS ;调用延时子程序,让P1.2所接的灯亮一小段时间 MOV P1,#11110111B;点亮P1.3所接的灯 ACALL YS ;调用延时子程序,让P1.3所接的灯亮一小段时间 MOV P1,#11101111B;点亮P1.4所接的灯 ACALL YS ;调用延时子程序,让P1.4所接的灯亮一小段时间 MOV P1,#11011111B;点亮P1.5所接的灯 ACALL YS ;调用延时子程序,让P1.5所接的灯亮一小段时间 MOV P1,#10111111B;点亮P1.6所接的灯 ACALL YS ;调用延时子程序,让P1.6所接的灯亮一小段时间 MOV P1,#01111111B;点亮P1.7所接的灯 ACALL YS ;调用延时子程序,让P1.7所接的灯亮一小段时间 LJMP MAIN ;循环.这回用长调用指令LJMP,当程序比较长的时候就用 LJMP YS: ;延时子程序YS,功能是能让LED亮起来或者灭掉一小段时间 MOV R1,#200 ;让灯亮灭时间的长短也就是延时的长短跟#号后面的数据有关 D: MOV R2,#200 ;延时长点#号后面的数据就大点,延时短点#号后面的数据 T: MOV R3,#200 ;就小点,但#号后面最大的数据是255 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的设计一般都是因为主程序要调用它, ;调用完是要返回到主程序继续运行下一个语句的 END
开关控制指示灯显示 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
设置一个delay_2s()就是: delay_2s() { for(i=0;i<200;i++) { for(j=0;j<200;j++) } } 具体要看你的晶振大小 然后 void main() { uchar temp = 0x01; while(1) { delay_2s(); P0 = temp delay_2s(); temp <<=1; i++; if(i>=7) { i = 0; temp = 0x01 } } } 很容易理解就是让0X01一直左移赋值给P0口然后循环
我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧 ****************这个是用定时器0控制一个灯的亮和灭****************************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num; bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt=!tt; d=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; } ****************这个程序是逐个点亮的(思路:由256逐减1,值由LED灯显示)*********************** #include #define uchar unsigned char #define uint unsigned int /**************************************/ uchar num,tt; //bit tt; sbit d=P1^0; /******************主程序入口********************/ void main() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TCON=0x10; EA=1; ET0=1; tt=255; while(1) { if(num==20) { tt--; P1=tt; num=0; } } } void timer() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num++; }