|
|
|
|
 |
PIC16F716抽油烟机主控板程序
|
|
|
|
文章编号: |
091111214643 |
文章分类: |
单片机 > PIC |
|
点 击: |
|
关 键 词: |
PIC16F716,抽油烟机 |
|
文章来源: |
网络 |
|
摘 要: |
|
|
-
-
-
-
-
-
-
-
-
-
-
-
- #include<pic16f716.h>
- #define uint unsigned int
-
- #define TMR0Init 0x3e
-
- #define keyOnDelay 0x08
- #define keyBuzzerDelay 0x09
-
- #define off 0
- #define on 1
-
- #define outLight RB0 //外部灯
- #define we RB1 //弱风
- #define st RB2 //强风
- #define bz RB3 //蜂鸣器
- #define backLight RB4 //背光灯
- #define da RB5 //数据线
- #define wr RB6 //控制线
- #define cs RB7 //片选线
- #define RBon 0 //低电平选通相应的功能 相当于负逻辑
- #define RBoff 1 //高低电平关闭选通相应的功能
-
- #define switchKey RA0
- #define lightKey RA1
- #define adjustKey RA2
- #define setKey RA3
-
- bit lightKeyFlag,switchKeyFlag,setKeyFlag,adjustKeyFlag,switchFlag,strongFlag,colFlag,f3Flag;
- bit setFlag,endFlag,hourFlag,backLightFlag,twoMinutesFlag,halfSecondFlag ,LCDLightFlag,f2Flag;
- bit f6Flag,f7Flag,f4Flag,f5Flag,longKeyFlag,shortKeyFlag,l1Flag,l2Flag,l3Flag,f1Flag;
-
- signed char timeNumber[4]={0,3,0,0};
- signed char timeNumberTemp[4]={0,3,0,0};
- char sWeiTemp,bWeiTemp,qWeiTemp;
- char gWeiTemp;
- char fiveSecondTime;
- char weakCount,strongCount,switchCount,setCount,endTimeCount;
- uint count,backLightTime;
- char gWei,sWei,bWei,qWei;
- char count2;
- char secondCount;
- char keyOnTime;
- uint twoMinutesCount;
- char map[]={0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f};
- char num[]={0x5f,0x06,0x3d,0x2f,0x66,0x6b,0x7b,0x0e,0x7f,0x6f,0x00};
- void delayms(unsigned char a);
- void sendHighBit(char data,char count);
- void sendLowBit(char data,char low);
- void init(void);
- void writeData(char *pa, char *pm);
- void writeCommand(char command);
- void refurbish(void);
- void strongWindOff(void);
- void weakWindOff(void);
- void timeCount(void);
- void keyScan(void);
- void keyOnResponse(void);
- void recover(void);
- void colFliker(void);
- void twoMinutes(void);
- void endFunction(void);
- void setFlagOn();
-
- void main()
- {
- init();
- writeCommand(0x01);
- writeCommand(0x29);
- writeCommand(0x03);
- writeData(0,map);
-
- while(1)
- {
- if(T0IF==1)
- {
- T0IF=0;
- TMR0=0x3e;
- count++;
- if(count==10)
- bz=RBoff;
- if(count==40)
- {
- count=0;
- l3Flag=on;
- break;
- }
- }
- }
- while(1)
- {
- while(T0IF==1)
- {
- T0IF=0;
- TMR0=0x3e;
- count++;
- if(backLightFlag==on)
- {
- backLight=on;
- }
- else
- {
- backLightTime++;
- if(backLightTime==300)
- backLight=off;
- }
- colFliker();
- timeCount();
- keyScan();
- if(LCDLightFlag==on)
- {
- outLight=RBon;
- }
- else
- {
- LCDLightFlag=off;
- outLight=RBoff;
- }
-
- if((lightKeyFlag==on)&&(lightKey ==1))
- {
- lightKeyFlag=off;
- LCDLightFlag=!LCDLightFlag;
- keyOnResponse();
- }
-
- if(setFlag==off)
- {
- if((adjustKeyFlag==on)&&(adjustKey==1))
- {
- adjustKeyFlag=off;
- if(switchFlag==on)
- {
- backLightTime=0;
- backLight=on;
- strongFlag=!strongFlag;
- keyOnResponse();
- }
- }
- }
- else
- {
- if(setCount!=3)
- {
- if(adjustKeyFlag==on)
- { keyOnTime++;
- if(keyOnTime>10)
- longKeyFlag=on;
- if(adjustKey==1)
- {
- adjustKeyFlag=off;
- longKeyFlag=off;
- shortKeyFlag=on;
- keyOnTime=0;
- keyOnResponse();
- }
-
- }
- }
- else
- {
- if((adjustKeyFlag==on)&&(adjustKey==1))
- {
- strongFlag=!strongFlag;
- adjustKeyFlag=off;
- keyOnResponse();
- }
-
- }
- }
-
- if((switchKeyFlag==on)&&(switchKey==1))
- {
- switchKeyFlag=off;
- twoMinutesFlag=off;
- if(switchFlag==off)
- {
- switchFlag=on;
- strongFlag=on;
- }
- else
- {
- switchCount++;
- if(switchCount==1)
- twoMinutesFlag=on;
- if(switchCount==2)
- {
- switchCount=0;
- switchFlag=off;
- setFlag=off;
- recover();
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- }
- }
- keyOnResponse();
- }
-
- if((setKeyFlag==on)&&(setKey==1))
- {
- setKeyFlag=off;
- setFlag=on;
- setCount++;
- fiveSecondTime=0;
- keyOnTime=0;
- count2=0;
- hourFlag=off;
- if(switchFlag==on)
- {
- if(setCount>=4)
- {
- recover();
- setFlag=0;
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- }
- }
- else
- {
- if(setCount>=3)
- {
- recover();
- setFlag=0;
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- }
- }
- keyOnResponse();
- }
-
- setFlagOn();
-
- if(switchFlag==on)
- {
- backLightFlag=on;
- if(strongFlag==on)
- {
- weakWindOff();
- st=RBon;
- l1Flag=on;
- strongCount++;
- switch(strongCount)
- {
- case 0x01: f1Flag=on; f2Flag=off; f3Flag=on; f4Flag=off; break;
- case 0x02: f1Flag=on; f2Flag=off; f3Flag=on; f4Flag=off; break;
- case 0x03: f1Flag=off; f2Flag=on; f3Flag=off; f4Flag=on; break;
- case 0x04: f1Flag=off; f2Flag=on; f3Flag=off; f4Flag=on; break;
- default: strongCount=0x00; break;
- }
- }
- else
- {
- strongWindOff();
- we=RBon;
- l2Flag=on;
- weakCount++;
- switch(weakCount)
- {
-
- case 0x01: f5Flag=on;f6Flag=on;f7Flag=off; break;
- case 0x02: f5Flag=on;f6Flag=on;f7Flag=off; break;
- case 0x03: f5Flag=off;f6Flag=on;f7Flag=on; break;
- case 0x04: f5Flag=off;f6Flag=on;f7Flag=on; break;
- case 0x05: f5Flag=on;f6Flag=off;f7Flag=on; break;
- case 0x06: f5Flag=on;f6Flag=off;f7Flag=on; break;
- default: weakCount=0;break;
- }
- }
-
- }
- else
- {
- strongWindOff();
- weakWindOff();
- backLightFlag=off;
- switchCount=0;
- }
- endFunction();
- twoMinutes();
- refurbish();
- writeData(0,map);
- if(count==60000)
- count=0;
- }
- }
- }
-
-
- void timeCount(void)
- {
- if(count%20==0)
- {
- secondCount++;
- if(secondCount==60)
- {
- secondCount=0;
- gWei++;
- if(gWei==10)
- {
- gWei=0;
- sWei++;
- if(sWei==6)
- {
- sWei=0;
- bWei++;
- if(qWei==2&&bWei==4)
- {
- bWei=0;
- qWei=0;
- }
- if(bWei==10)
- {
- bWei=0;
- qWei++;
- }
- }
- }
- }
- }
- }
-
- void keyScan(void)
- {
- if(lightKeyFlag==off)
- {
- if(lightKey ==0)
- {
- delayms(keyOnDelay);
- if(lightKey ==0)
- {
- lightKeyFlag=on;
- }
- }
- }
- if(switchKeyFlag==off)
- {
- if(switchKey==0)
- {
- delayms(keyOnDelay);
- if(switchKey==0)
- {
- switchKeyFlag=on;
- }
- }
- }
- if(setKeyFlag==off)
- {
- if(setKey==0)
- {
- delayms(keyOnDelay);
- if(setKey==0)
- {
- setKeyFlag=on;
- }
- }
- }
- if(adjustKeyFlag==off)
- {
- if(adjustKey==0)
- {
- delayms(keyOnDelay);
- if(adjustKey==0)
- {
- adjustKeyFlag=on;
- }
- }
- }
- }
-
- void refurbish(void)
- {
- if(setFlag==1)
- {
- map[0]=num[gWeiTemp];
- map[1]=num[gWeiTemp]>>4;
- if(l3Flag==on)
- map[1]=map[1] | 0x08;
- map[2]=num[sWeiTemp];
- map[3]=num[sWeiTemp]>>4;
- if(colFlag==on)
- map[3]=map[3] | 0x08;
- map[4]=num[bWeiTemp];
- map[5]=num[bWeiTemp]>>4;
- if(l2Flag==on)
- map[5]=map[5] | 0x08;
- map[6]=num[qWeiTemp];
- map[7]=num[qWeiTemp]>>4;
- }
- else
- {
- map[0]=num[gWei];
- map[1]=num[gWei]>>4;
- if(l3Flag==on)
- map[1]=map[1] | 0x08;
- map[2]=num[sWei];
- map[3]=num[sWei]>>4;
- if(colFlag==on)
- map[3]=map[3] | 0x08;
- map[4]=num[bWei];
- map[5]=num[bWei]>>4;
- if(l2Flag==on)
- map[5]=map[5] | 0x08;
- map[6]=num[qWei];
- map[7]=num[qWei]>>4;
- }
- if(f6Flag==on)
- map[7]=map[7]| 0x08;
-
- if(LCDLightFlag==on)
- map[8]=0x01;
- else
- map[8]=0;
- if(f1Flag==on)
- map[8]=map[8] | 0x02;
- if(f2Flag==on)
- map[8]=map[8] | 0x04;
- if(l1Flag==on)
- map[8]=map[8] |0x08;
-
-
- if(f4Flag==on)
- map[9]=0x01;
- else
- map[9]=0;
- if(f3Flag==on)
- map[9]=map[9] | 0x02;
- if(f5Flag==on)
- map[9]=map[9] | 0x04;
- if(f7Flag==on)
- map[9]=map[9] | 0x08;
- }
-
- void init(void)
- {
- GIE=0;
- T0IE=0;
- OPTION=0x07;
- ADCON1=0x07;
- TMR0=TMR0Init;
- T0IF=0;
- TRISB=0x00;
- TRISA0=1;
- TRISA1=1;
- TRISA2=1;
- TRISA3=1;
- backLight=on;
- bz=RBon;
- we=RBoff;
- st=RBoff;
- outLight=RBoff;
- lightKeyFlag=off;
- switchKeyFlag=off;
- setKeyFlag=off;
- adjustKeyFlag=off;
- strongFlag=off;
- switchFlag=off;
- LCDLightFlag=off;
- colFlag=on;
- setFlag=off;
- halfSecondFlag=off;
- twoMinutesFlag=0;
- longKeyFlag=off;
- shortKeyFlag=off;
- setCount=0;
- endFlag=off;
- backLightFlag=off;
- backLightTime=0;
- endTimeCount=0;
- fiveSecondTime=0;
- twoMinutesCount=0;
- keyOnTime=0;
- secondCount=0;
- count2=0;
- hourFlag=off;
- }
-
- void sendLowBit(char data,char low)
- {
- char i;
- for(i=0;i<low;i++)
- {
- if((data&0x01)==0)
- da=0;
- else
- da=1;
- wr=0;
- asm("nop");
- wr=1;
- asm("nop");
- data>>=1;
- }
- }
-
- void sendHighBit(char data,char count)
- {
- char i;
- for(i=0;i<count;i++)
- {
- if (data & 0x80)
- da = 1;
- else
- da = 0;
- wr = 0;
- asm("nop");
- wr = 1;
- asm("nop");
- data <<= 1;
- }
- }
-
- void delayms(unsigned char a)
- {
- uint mmm;
- while(a-->1)
- {
- for(mmm = 0; mmm < 1000;mmm ++) {}
- }
- }
-
- void writeData(char *pa, char *pm)
- {
- char i;
- cs=1;
- asm("nop");
- cs=0;
- asm("nop");
- sendHighBit(0xa0,3);
- sendHighBit(*pa<<2,6);
- for(i=0;i<10;i++)
- {
- sendLowBit(*pm++,4);
- }
- }
-
- void writeCommand(char command)
- {
- cs=1;
- asm("nop");
- cs=0;
- asm("nop");
- sendHighBit(0x80,3);
- sendHighBit(command,9);
- }
-
- void strongWindOff()
- {
- st=RBoff;
- l1Flag=off;
- f1Flag=off;
- f2Flag=off;
- f3Flag=off;
- f4Flag=off;
- }
-
- void weakWindOff(void)
- {
- we=RBoff;
- l2Flag=off;
- f5Flag=off;
- f6Flag=off;
- f7Flag=off;
- }
-
-
- void keyOnResponse(void)
- {
- bz=RBon;
- backLightTime=0;
- backLight=on;
- delayms(keyBuzzerDelay);
- bz=RBoff;
- }
-
- void recover(void)
- {
- setCount=0;
- setFlag=off;
- timeNumber[0]=timeNumberTemp[0];
- timeNumber[1]=timeNumberTemp[1];
- timeNumber[2]=timeNumberTemp[2];
- timeNumber[3]=timeNumberTemp[3];
- }
-
- void twoMinutes(void)
- {
- if(twoMinutesFlag==on)
- {
- twoMinutesCount++;
- if(twoMinutesCount>=2400)
- {
- bz=RBon;
- LCDLightFlag=off;
- switchFlag=off;
- backLightFlag=off;
- backLight=off;
- switchCount=0;
- setFlag=0;
- if(twoMinutesCount==2404)
- {
- bz=RBoff;
- twoMinutesFlag=off;
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- }
- }
- }
- else
- {
- twoMinutesCount=0;
- }
- }
-
- void endFunction(void)
- {
- if(endFlag==on)
- {
-
- backLight=off;
- setFlag=off;
- LCDLightFlag=off;
- switchFlag=off;
- endTimeCount++;
- if(endTimeCount%3==0)
- bz=!bz;
- if(endTimeCount==100)
- {
- bz=RBoff;
- endFlag=off;
- endTimeCount=0;
- }
- }
- }
-
-
- void setFlagOn()
- {
- if(setFlag==on)
- {
- if(setCount==1)
- {
- fiveSecondTime++;
- if(longKeyFlag==on)
- {
- backLightTime=0;
- fiveSecondTime=0;
- if(count%4==0)
- {
- timeNumber[2]++;
- if((timeNumber[3]==2)&&(timeNumber[2]==4))
- {
- timeNumber[3]=0;
- timeNumber[2]=0;
- }
- else
- {
- if(timeNumber[2]==10)
- {
- timeNumber[2]=0;
- timeNumber[3]++;
- }
- }
- timeNumberTemp[2]=timeNumber[2];
- timeNumberTemp[3]=timeNumber[3];
- }
- }
- else
- {
- if(shortKeyFlag==on)
- {
- shortKeyFlag=off;
- fiveSecondTime=0;
- timeNumber[2]++;
- if((timeNumber[3]==2)&&(timeNumber[2]==4))
- {
- timeNumber[3]=0;
- timeNumber[2]=0;
- }
- else
- {
- if(timeNumber[2]==10)
- {
- timeNumber[2]=0;
- timeNumber[3]++;
-
- }
- }
- timeNumberTemp[2]=timeNumber[2];
- timeNumberTemp[3]=timeNumber[3];
- }
- }
- if(fiveSecondTime%10==0)
- halfSecondFlag=!halfSecondFlag;
- if((longKeyFlag==off)&&(halfSecondFlag==off))
- {
- bWeiTemp=10;
- qWeiTemp=10;
- colFlag=on;
- }
- else
- {
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- colFlag=on;
- }
- if(fiveSecondTime==100)
- {
- fiveSecondTime=0;
- setFlag=off;
- setCount=0;
- keyOnTime=0;
- }
-
- }
-
- if(setCount==2)
- {
- fiveSecondTime++;
- if(longKeyFlag==on)
- {
- backLightTime=0;
- fiveSecondTime=0;
- if(count%4==0)
- {
- timeNumber[0]++;
- if(timeNumber[0]==10)
- {
- timeNumber[0]=0;
- timeNumber[1] ++;
- if(timeNumber[1]==6)
- {
- timeNumber[0]=0;
- timeNumber[1]=0;
- }
- }
- timeNumberTemp[0]=timeNumber[0];
- timeNumberTemp[1]=timeNumber[1];
- }
- }
- else
- {
- if(shortKeyFlag==on)
- {
- shortKeyFlag=off;
- fiveSecondTime=0;
- timeNumber[0]++;
- if(timeNumber[0]==10)
- {
- timeNumber[0]=0;
- timeNumber[1] ++;
- if(timeNumber[1]==6)
- {
- timeNumber[0]=0;
- timeNumber[1]=0;
- }
- }
- timeNumberTemp[0]=timeNumber[0];
- timeNumberTemp[1]=timeNumber[1];
- }
- }
- if(fiveSecondTime%10==0)
- halfSecondFlag=!halfSecondFlag;
- if((longKeyFlag==off)&&(halfSecondFlag==off))
- {
- gWeiTemp=10;
- sWeiTemp=10;
- colFlag=on;
- }
- else
- {
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- colFlag=on;
- }
- if(fiveSecondTime==100)
- {
- fiveSecondTime=0;
- setFlag=off;
- setCount=0;
- keyOnTime=0;
- }
- }
-
- if(setCount==3)
- {
- if(hourFlag==off)
- {
- if((timeNumber[3]==0)&&(timeNumber[2]==0))
- {
- hourFlag=on;
- count2=0;
- timeNumber[3]=timeNumber[1];
- timeNumber[2]=timeNumber[0];
- timeNumber[1]=0;
- timeNumber[0]=0;
- }
- else
- {
- if(count%20==0)
- {
- count2++;
- if(count2==60)
- {
- count2=0;
- timeNumber[0]--;
- &nbs p; if(timeNumber[0]<0)
- {
- timeNumber[0]=9;
- timeNumber[1]--;
- if(timeNumber[1]<0)
- {
- timeNumber[1]=5;
- timeNumber[2]--;
- if(timeNumber[2]<0)
- {
- timeNumber[2]=9;
- timeNumber[3]--;
- }
- }
- }
- }
- }
- }
- }
- else
- {
- if(count%20==0)
- {
- timeNumber[0]--;
- if(timeNumber[0]<0)
- {
- timeNumber[0]=9;
- timeNumber[1]--;
- if(timeNumber[1]<0)
- {
- timeNumber[1]=5;
- timeNumber[2]--;
- if(timeNumber[2]<0)
- {
- timeNumber[2]=9;
- timeNumber[3]--;
- if(timeNumber[3]<0)
- {
- endFlag=on;
- hourFlag=off;
- bz=RBon;
- recover();
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- }
- }
- }
- }
- }
-
- }
- gWeiTemp=timeNumber[0];
- sWeiTemp=timeNumber[1];
- bWeiTemp=timeNumber[2];
- qWeiTemp=timeNumber[3];
- colFlag=on;
- }
- }
- else
- {
- setCount=0;
- }
- }
-
-
- void colFliker(void)
- {
- if(count%10==0)
- {
- colFlag=!colFlag;
- }
- }
|
|
|
|
|
|
|
|
|
|
|