|
K1鍵流水燈交替閃爍。
K2鍵流水燈從兩邊向中間移動(dòng)閃爍。
K3鍵流水燈全部閃爍。
K4鍵流水燈從LED7到LED0流水閃爍。
花樣流水燈大量使用阻滯延時(shí)會(huì)導(dǎo)致按鍵不靈敏,改計(jì)數(shù)延時(shí)為好。
- #include<reg51.h>
- //sbit S5=P2^4;
- //sbit S6=P2^5;
- //sbit S7=P2^6;
- //sbit S8=P2^7;
- unsigned char code table5[]={0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55};
- unsigned char code table6[]={0x7e,0xbd,0xdb,0xe7,0x7e,0xbd,0xdb,0xe7};
- unsigned char code table7[]={0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00};
- unsigned char code table8[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- unsigned char keyval;
- void key_scan(void);
- void Alter(void);
- void main(void)
- {
- keyval=0;
- while(1)
- {
- key_scan();
- Alter();
- }
- }
- void key_scan(void)
- {
- static unsigned char i=0;
- static bit j=0;
- unsigned char k;
- if((P2&0xf0)!=0xf0)
- {
- if(++i>=100 && j==0)
- {
- j=1;
- k=P2&0xf0;
- switch(k)
- {
- case 0xe0: keyval=5; break;
- case 0xd0: keyval=6; break;
- case 0xb0: keyval=7; break;
- case 0x70: keyval=8; break;
- }
- }
- }
- else
- {
- i=0;
- j=0;
- }
- }
- void Alter(void)
- {
- static unsigned int i=0;
- static unsigned char j=0;
- if(++i>=10000)
- {
- i=0;
- switch(keyval)
- {
- case 5: P0=table5[j];break;
- case 6: P0=table6[j];break;
- case 7: P0=table7[j];break;
- case 8: P0=table8[j];break;
- }
- j++;
- j%=8;
- }
- }
復(fù)制代碼 |
|