第一个是用汇编写程序控制八个灯循环的亮
第二个是加加两个按键控制其开始和停止
第三个是用汇编控制数字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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务