|
改為長按開關(guān),短按切換模式更好。
- #include <reg51.h> // <reg51.h>電腦程序?qū)嶒?nbsp; <STC8G.h>
- sbit key1=P3^0;
- unsigned char dat1[4]={0xf1,0xf2,0xf4,0xf8};
- unsigned char dat2[4]={0xfc,0xf9,0xf3,0xf6};
- unsigned char dat3[4]={0xfe,0xfd,0xfb,0xf7};
- unsigned char MODE;
- unsigned int count;
- unsigned char slow;
- bit sign;
- void delay (unsigned int x);
- void mode1(void);
- void mode2(void);
- void mode3(void);
- void keyscan(void);
- void main(void)
- {
- while(1)
- {
- keyscan();
- switch(MODE)
- {
- case 0: P0=0xff;break;
- case 1: mode1();break;
- case 2: mode2();break;
- case 3: mode3();break;
- }
- delay(1);
- }
- }
- void delay(unsigned int x)
- {
- unsigned int i,j;
- for(i=0;i<x;i++)
- {
- for(j=0;j<120;j++);//12T
- // for(j=0;j<1200;j++);//1T STC8G
- }
- }
- void mode1(void)
- {
- static unsigned char i;
- static unsigned int j;
- P0=dat1[i];
- if(++j>=500)
- {
- j=0;
- i=++i%4;
- }
- }
- void mode2(void)
- {
- static unsigned char i;
- static unsigned int j;
- P0=dat2[i];
- if(++j>=500)
- {
- j=0;
- i=++i%4;
- }
- }
- void mode3(void)
- {
- static unsigned char i;
- static unsigned int j;
- P0=dat3[i];
- if(++j>=500)
- {
- j=0;
- i=++i%4;
- }
- }
- void keyscan(void)
- {
- if(key1==0)
- {
- if(count<501)count++;
- if(count==500)//長按
- {
- sign=~sign;
- if(sign)
- {
- slow=MODE;//保存鍵值
- MODE=0;//關(guān)閉流水
- }
- else MODE=slow;//還原鍵值
- }
- }
- else
- {
- if(count>20 && count<500)//短按
- {
- ++MODE;
- if(MODE>3)
- MODE=1;
- }
- count=0;
- }
- }
復(fù)制代碼 |
|