C51的流水燈 老師布置的作業,上至下再下至上的流水燈,并且可以用按鍵來控制.
0.png (29.42 KB, 下載次數: 96)
下載附件
2016-12-5 02:57 上傳
0.png (61.73 KB, 下載次數: 105)
下載附件
2016-12-5 02:57 上傳
資料下載:
按鍵控制的流水燈(上至下再下至上).zip
(79.29 KB, 下載次數: 14)
2016-11-22 12:59 上傳
點擊文件名下載附件
老師要求的按鍵流水燈 C51 下載積分: 黑幣 -5
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
復制代碼
|