|
基于pic16f616單片機(jī) 可以手動(dòng)控制 也可自動(dòng)控制(開啟感應(yīng)開關(guān))
單片機(jī)源程序如下:
- #include<pic.h>
- #define u16 unsigned int
- #define u8 unsigned char
- u8 second,fen=0,miao=0,key=0,mode;
- u16 adval; //3v/5v*1024=614
- u16 x1=512;
- bit loop1,yy1;
- int pwm;
- __CONFIG(0xfd94); //fdd5 RA4可以輸出主頻率的4分頻
- //const u8 table[]={160,130,101,90,80};
- const u8 tab[]={150,100,60,30};
- void init()
- {//OSCTUNE=0x0f; //修改主頻率
- ADCON0=0x9d;
- ADCON1=0x20;
- INTCON=0xd0; //開啟總中斷 外部中斷 外設(shè)中斷
- INTEDG=1; // 設(shè)置觸發(fā)中斷的條件為電平從低到高觸發(fā)
- PIE1=0x41; //允許Time1中斷
- TMR1L=(65536-1000)%256;
- TMR1H=(65536-1000)/256;
- T1CON=0x01; //使能Time1
-
- PR2=160; //周期計(jì)數(shù)
- CCP1CON=0x3c; //0011 1100單輸出 P1A被調(diào)制 1011 1100半橋輸出 P1A P1B被調(diào)制
- CCPR1L=40; //脈沖寬度計(jì)數(shù)
-
- }
- void delay500us(u16 x)
- {
- u16 a,b;
- for(a=x;a>0;a--)
- for(b=20;b>0;b--);
- }
- void delayms(u16 x)
- {
- u16 a,b;
- for(a=x;a>0;a--)
- for(b=220;b>0;b--);
- }
- void beep()
- {
- u8 i;
- for(i=255;i>0;i--)
- {
- delay500us(8);
-
- RA1=!RA1;
- }
- RA1=0;
- }
- void ledstate()
- { u8 i;
- RC0=0;
- loop1=1;
-
- while(loop1)
- {
- for(i=3;i>0;i--)
- { beep();
- RC0=!RC0;
- delayms(1000);
- }
- loop1=0;
- }
- }
- void KEY_Scan(void) //鍵值掃描
- {
- if((RC2==1) || (RC1=1) || (RA4==1) || (RA5==1))
- {
- delayms(50);//去抖動(dòng)
- if(RC2==1) //A led模式與開關(guān)
- {
- delayms(200);
- delayms(200);
- delayms(200);
- delayms(200);
- if(RC2==1) key=!key; //0 on 1 off
- else mode=!mode; //0 手動(dòng)模式 1 自動(dòng)模式
- while(RC2);
- }
- else if(RC1==1) //B 音頻開關(guān)
- {
- RC4=!RC4;
- while(RC1!=0);
- }
- else if(RA4==1) //C 亮度加
- {
- if(mode==0)
- {
- pwm++;
- if(pwm>=3){pwm=3;beep();}
- while(RA4);
- }
- }
- else if(RA5==1) //D 亮度減
- {
- if(mode==0)
- {
- pwm--;
- if(pwm<1){pwm=0;beep();}
- while(RA5);
- }
- }
- }
- }
- void pwm_out()
- {
- T2CON=0x04;
- CCP1CON=0x3c;
- RC0=1;
- RA0=0;
- delayms(5);
-
- CCPR1L=tab[pwm];
- delayms(4);
- }
- void pwm_out1()
- {
- T2CON=0x04;
- CCP1CON=0x3c;
- RC0=1;
- RA0=1;
- delayms(5);
- if(yy1)
- {
- CCPR1L=tab[3];
- delayms(4);
- }
- else
- {
- CCPR1L=tab[0];
- delayms(4);
- }
-
- }
- void stopstate() // pwm 停止輸出
- {
- T2CON=0x00;
- CCP1CON=0x00;
- RC0=0;
- RA0=0;
- RC5=1;
- }
- void interrupt time1(void)
- {
- if(TMR1IE&&TMR1IF) //定時(shí)器1用于產(chǎn)生秒信號(hào) 定時(shí)時(shí)間為25ms
- {
- TMR1IF=0;
- TMR1L=(65536-50000)%256;
- TMR1H=(65536-50000)/256;
- second++;
- if(second>=40) //40*25ms =1000ms
- { second=0;
-
- if(miao++>=60)
- { miao=0;
- fen++;
- if(fen>=60)
- fen=0;
- }
- }
- }
- if(INTE&&INTF) ////外部中斷
- {
- while(RA2==1)
- {
-
- KEY_Scan();
-
- }
- INTF=0;
- }
- if(ADIE && ADIF)
- {
- ADIF=0; // A/D標(biāo)志位清零
- adval=ADRESH;//00000000 00000011
- adval=adval<<8|ADRESL;//00000011 11111111
- if(adval>x1) yy1=1;
- else yy1=0;
- GODONE=1;
- }
- }
- void main()
- {
- TRISC=0x00;
- TRISC|=0x0e;
- TRISA=0x00;
- TRISA|=0x34;
- ANSEL=0x80;
- RC0=0; //電源指示
- RC4=0; //繼電器
- RC5=0; //PWM
- RA0=0; //手動(dòng)自動(dòng)指示
- RA1=0; //警告音
- ledstate();
- init();
- GODONE=1;
- delayms(100);
- while(1)
- {
- if(key==0)
- {
- switch(mode)
- {
- case 0:pwm_out();
- break;
- case 1:pwm_out1();
- break;
- }
- }
- else stopstate();
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
xyd.rar
(52.5 KB, 下載次數(shù): 70)
2018-8-25 12:12 上傳
點(diǎn)擊文件名下載附件
程序源碼 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|