這- /****************************************************8
- 功能 :單按鍵控制多個LED
- 單片機:STC12C5608AD
- 晶振 :12M
- 使用矩陣按鍵小板測試
- ******************************************************/
- #include <reg52.H>
- #define uchar unsigned char
- #define uint unsigned int
-
- uchar ID=0;//定義按鍵的次數(shù)變量
- sbit key=P3^1;
- sbit led1=P1^0;
- sbit led2=P1^1;
- sbit led3=P1^2;
- sbit led4=P1^3;
- sbit led5=P1^4;
- sbit led6=P1^5;
- sbit led7=P1^6;
- sbit led8=P1^7;
- uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar code tab1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,};
- //-----精確延時1ms----------------------
- void delay1ms(uint z)
- {
- unsigned int a,b;
- for(a=z;a>0;a--)
- for(b=642;b>0;b--) ;
- }
- //---------延時20ms--------------------
- void delay20ms(void)
- {
- unsigned char a,b;
- for(b=215;b>0;b--)
- for(a=45;a>0;a--);
- }
- void liushui()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- P1=tab[i];
- delay1ms(200);
- }
- }
- void liushui1()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- P1=tab1[i];
- delay1ms(200) ;
- }
- }
- void liushui2()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- P1=tab1[i];
- delay1ms(200) ;
- }
- for(i=0;i<8;i++)
- {
- P1=tab[i];
- delay1ms(200) ;
- }
- }
- void main(void)
- {
-
- while(1)
- {
- if(key==0)
- {
- delay1ms(10);
- if(key==0)
- {
- ID++;
- if(ID==9)
- {
- ID=0;
- }
- while(key==0);
- }
- }
- switch(ID)
- {
- case 1:liushui();break;
- case 2:liushui1();break;
- case 3:liushui2();break;
- case 4:P1=0xff;delay20ms();led4=0;delay20ms();break;
- case 5:P1=0xff;delay20ms();led5=0;delay20ms();break;
- case 6:P1=0xff;delay20ms();led6=0;delay20ms();break;
- case 7:P1=0xff;delay20ms();led7=0;delay20ms();break;
- case 8:P1=0xff;delay20ms();led8=0;delay20ms();break;
- default: P1=0xff;break;
- }
- }
- }
復制代碼 就是一個按鍵控制多個LED的程序 |