C51的流水灯 老师布置的作业,上至下再下至上的流水灯,并且可以用按键来控制.
资料下载:
按键控制的流水灯(上至下再下至上).zip
(79.29 KB, 下载次数: 14)
c语言的流水灯程序:
- #include<reg51.h>
- #include<intrins.h> //包含循环左、右移位函数的头文件
- #define led P1
- sbit key1=P3^2;
- sbit key2=P3^3;
- unsigned char a,b;
- void delay(unsigned char m)
- {
- unsigned i,j;
- for(i=0;i<=m;i++)
- for(j=0;j<=120;j++); //这条语句大概延时1ms
- }
- void key1ch()
- {
-
- while(key2) //如果键2没有按下,循环执行这段程序
- {
- for(a=0;a<8;a++)
- {
- delay(500);
- led=_crol_(led,1);//左移一位
- while(!key2) return;//如果键2按下,退出
- }
- }
- }
- void key2ch()
- {
- while(key1) //如果键1没有按下,循环执行这段程序
- {for(b=0;b<8;b++)
- {
- delay(500);
- led=_cror_(led,1);//右移一位
- while(!key1) return;//如果键1按下,退出
- }
- }
- }
- void main()
- {
- led=0xfe;
- while(1)
- {if(!key1)
- {
- delay(10);
- while(key1);
- key1ch();
- }
- else
- if(!key2)
- {
- delay(10);
- while(key2);
- key2ch();
- }
- }
- }
复制代码
汇编语言的流水灯程序:
- org 0000h
- ajmp main
- org 0003h
- ajmp int00
- org 0013h
- ajmp int01
- org 0030h
- main:mov sp,#60h
- clr 20h.0
- clr 20h.1
- setb it0
- setb it1
- setb ex0
- setb ex1
- setb ea
- key1:jnb 20h.0,key2
- mov a,#0feh ;按键1处理,从上往下流动
- mov r2,#8
- loop1:mov p1,a
- acall delay
- rl a ;左移一位
- jnb 20h.1,loop2 ;判断按键2是否按下,没有则按照按键1的功能执行
- djnz r2,loop1
- mov r2,#8
- sjmp loop1
- key2:jnb 20h.1,key1
- mov a,#07fh
- loop2: mov p1,a
- acall delay
- rr a
- jnb 20h.0,loop1
- djnz r2,loop2
- mov r2,#8
- sjmp loop2
- int00:setb 20h.1
- clr 20h.0
- reti
- int01:setb 20h.0
- clr 20h.1
- reti
- delay:mov r5,#4
- dl1:mov r6,#200
- dl2:mov r7,#250
- djnz r7,$
- djnz r6,dl2
- djnz r5,dl1
- ret
- end
复制代码- org 0000h
- key:jnb p3.2,key11 ;判断是否按键1,如果是则进行按键处理
- jnb p3.3,key21 ;判断是否按键2,如果是则进行按键处理
- sjmp key
- key11:call delay10ms ;延时10毫秒进行按键消抖
- jnb p3.2,[ DISCUZ_CODE_5 ]nbsp; ;按键还是按下的,则等待键释放
- acall key1
- sjmp key
- key21:call delay10ms
- jnb p3.3,$
- acall key2
- sjmp key
-
- key1:mov a,#0feh ;按键1处理,从上往下流动
- mov r2,#8
- loop1:mov p1,a
- acall delay
- rl a ;左移一位
- jnb p3.3,back1 ;判断按键2是否按下,没有则按照按键1的功能执行
- djnz r2,loop1
- sjmp key1
- back1: mov r2,#8
- ret
- key2:mov a,#07fh
- loop2: mov p1,a
- acall delay
- rr a
- jnb p3.2,back2
- djnz r2,loop2
- sjmp key2
- back2: mov r2,#8
- ret
- delay:mov r5,#4
- dl1:mov r6,#200
- dl2:mov r7,#250
- djnz r7,$
- djnz r6,dl2
- djnz r5,dl1
- ret
- delay10ms:
- mov r6,#200
- ddl2:mov r7,#250
- djnz r7,$
- djnz r6,ddl2
- ret
- end
复制代码
|