|
新手求助,剛開(kāi)始接觸單片機(jī),需要用pic16f1828實(shí)現(xiàn)PWM呼吸燈的功能,并可以通過(guò)一個(gè)按鍵以及一個(gè)光敏電阻來(lái)控制呼吸燈的亮滅;當(dāng)光敏電阻感應(yīng)到光照時(shí)燈帶熄滅,同時(shí)可用按鍵點(diǎn)亮。我寫(xiě)了按鍵和光敏電阻的使用程序,分開(kāi)來(lái)可以實(shí)現(xiàn)功能,但是不懂的該怎么把分立功能的程序整合在一起,請(qǐng)大神幫幫忙,謝謝
電路原理圖如下:
QQ圖片20180806114411.png (24.88 KB, 下載次數(shù): 34)
下載附件
Q為按鍵的輸入
2018-8-6 11:51 上傳
單片機(jī)源程序:
- #include <pic16f1828.h>
- #define ADC_NUM 8//轉(zhuǎn)換次數(shù)
- #define LED LATC0
- void init_GPIO(void)
- {
- TRISC=0x04;
- ANSELC=0x04;
- PORTC=0x00;
- LATC=0x00;
- }
- void init_fosc(void)
- {
- OSCCON=0xF0;
- }
- void init_AD(void)
- {
- ADCON1=0XA0;//右對(duì)齊,32時(shí)鐘,參考電源電壓
- ADCON0=0x18;//AN6通道
- ADCON0bits.ADON=1;
- }
- unsigned int ADC_BAT_ONE(void)
- {
- unsigned int value;
- value=0;
- ADCON0bits.CHS=6;
- ADCON0bits.ADGO=1;
- while(ADCON0bits.GO==1);
- value=(unsigned int)ADRESH;
- value=value<<8;
- value+=ADRESL;
- return value;
- }
- unsigned int ADC_BAT_contiue(void)
- {
- unsigned int ADV_MCU[ADC_NUM],ADV_CNT,ADV_ALL;
- ADV_ALL=0;
- for(ADV_CNT=0;ADV_CNT<ADC_NUM;ADV_CNT++)
- {
- ADV_MCU[ADV_CNT]=ADC_BAT_ONE();
- }
- for(ADV_CNT=0;ADV_CNT<ADC_NUM;ADV_CNT++)
- {
- ADV_ALL+=ADV_MCU[ADV_CNT];
- }
- ADV_ALL=ADV_ALL/ADC_NUM;
- return ADV_ALL;
- }
- void main()
- {
- init_fosc();
- init_GPIO();
- init_AD();
- while(1)
- {
- if(ADC_BAT_contiue()>400)//1.2V
- {
- LED=1;
- }
- else
- {
- LED=0;
- }
- }
- }
- #include<pic16f1828.h>
- void IO_init()
- {
- ANSELC=0;
- PORTCbits.RC0=1;
- TRISCbits.TRISC0=0;
- TRISCbits.TRISC3=1;
- WPUCbits.WPUC3=1;
- }
- void delay(unsigned int x)
- {
- unsigned int y,z;
- for(y=x;y>0;y--)
- for(z=25;z>0;z--);
- }
- void main(void)
- {
- static bit temp=0;
- IO_init();
- delay(1000);
- while(RC3);
- while(1)
- if(RC3==1)
- {
- while(RC3);
- {
- temp=~temp;
- PORTCbits.RC0=temp;
- }
- }
- }
復(fù)制代碼
|
|