您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页51单片机控制灯试验(共四个)

51单片机控制灯试验(共四个)

来源:筏尚旅游网


第一个是用汇编写程序控制八个灯循环的亮

第二个是加加两个按键控制其开始和停止

第三个是用汇编控制数字led灯,其是一个可以从0-9循环的

第四个是加两个键控制其从0-9和9-0循环(可用汇编和c写)

ORG 0000H

lJMP MAIN

MAIN:

MOV A,#11111110B

DD:MOV P1,A

LCALL DELAY

RL A

LJMP DD

DELAY:MOV R0,#20

LOOP1:MOV R1,#100

LOOP2:MOV R2,#250

LOOP3:DJNZ R2,LOOP3

DJNZ R1,LOOP2

DJNZ R0,LOOP1

RET

END

ORG 0000H

lJMP MAIN

MAIN: JB P2.0,MAIN

AA: MOV A,#11111110B

DD: MOV P1,A

LCALL DELAY

RL A

LJMP DD

DELAY: MOV R0,#20

LOOP1: MOV R1,#100

LOOP2: MOV R2,#250

LOOP3: JNB P2.0,AA

JNB P2.1,CC

DJNZ R2,LOOP3

DJNZ R1,LOOP2

DJNZ R0,LOOP1

RET

CC: MOV A,11111111B

MOV P1,A

LCALL DELAY

LJMP MAIN

END

ORG 0000H

LJMP MAIN

MAIN:MOV R0,#00

MOV R1,#10

MOV DPTR,#TABLE

LOOP: MOV A,R0

MOVC A,@A+DPTR

MOV P2,A

LCALL DELAY

INC R0

MOV A,R0

DJNZ R1,LOOP

LJMP MAIN

DELAY:MOV R3,#10

LOOP1:MOV R4,#100

LOOP2:MOV R5,#250

LOOP3:DJNZ R5,LOOP3

DJNZ R4,LOOP2

DJNZ R3,LOOP1

RET

TABLE:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H

END

ORG 0000H

LJMP MAIN

MAIN:MOV R0,#00

MOV R1,#10

MOV DPTR,#TABLE

LOOP: MOV A,R0

MOVC A,@A+DPTR

MOV P2,A

LCALL DELAY

INC R0

MOV A,R0

DJNZ R1,LOOP

LJMP MAIN

DG: MOV R6,#9

MOV R7,#10

MOV DPTR,#TABLE

LOOP4:MOV A,R6

MOVC A,@A+DPTR

MOV P2,A

LCALL DELAY

DEC R6

MOV A,R6

DJNZ R7,LOOP4

LJMP CC

DELAY:MOV R3,#10

LOOP1:MOV R4,#100

LOOP2:MOV R5,#250

JNB P1.1,CC

JNB P1.0,MAIN

LOOP3:DJNZ R5,LOOP3

DJNZ R4,LOOP2

DJNZ R3,LOOP1

RET

TABLE:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H

END

最后这个我还用c语言写了程序,程序如下

#include

sfr p2=0xa0;

sfr p1=0x90;

sbit p1_0=0x90;

sbit p1_1=0x91;

int kk[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

DELAY();

int a,b;

int main()

{

if(p1_0==0)

{

while(1)

{

b=1;

for(a=0;a<10;a++)

{p2=kk[a];

DELAY();

}

if(p1_1==0)

{b=0; break;}

}

}

if(p1_1==0)

{

while(1)

{b=0;

for(a=9;a>=0;a--)

{p2=kk[a];

DELAY();

}

if(p1_0==0)

{b=1;break;}

}

}

}

DELAY()

{

unsigned char i,j,p;

for(i=10;i>0;i--)

for(j=100;j>0;j--)

{if(p1_1==0)

{b=0;a=10;break;}

if(p1_0==0)

{b=1;a=-1;break;}

for(p=200;p>0;p--)

;

}

}

或者如以下程序:

#include

sfr p2=0xa0;

sfr p1=0x90;

sbit p1_0=0x90;

sbit p1_1=0x91;

int kk[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

DELAY();

int flag=2 ,i,t;/*flag先设置一个值(这个值不能为1和0),如果不设的话默认为0*/

int main()

{

while(1)

{

if(p1_0==0)

flag=0;

if(p1_1==0)

flag=1; /*循环一开始就得先检测有没有按键按下*/

if(flag==0||flag==1)

while(1)

{

if(flag==0)

for(i=0;i<10;i++)

{

p2=kk[i];

DELAY();

if(flag==1)

break;

}

else if(flag==1)

}

}

for(t=9;t>=0;t--)

{

p2=kk[t];

DELAY();

if(flag==0)

break;

}

}

DELAY()

{

int j,p;

for(j=100;j>0;j--)

{

if(p1_0==0)

{flag=0;i=-1;break;} /*跟下面一样的道理,考虑一下t不取0而取-1*/

else if(p1_1==0)

{flag=1;t=10;break;} /*循环过程中按键1按下,程序有两种情况,第一种是在程序正在执行按键0程序的时候,这时候有没有t=10对程序没影响,但第二种情况,程序在执行自己按键1的时候按键1按下,是不是就得让数组重新从高往低循环,考虑一下为什么t不取9而取10*/

for(p=900;p>0;p--)

;

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务