📄 bn-led.c
字号:
#include <pic.h>
#define XTAL_FREQ 4MHZ
#include "delay.c"
#include <delay.h>
#define delay_ms DelayMs
#define delay_us DelayUs
#define key_sw GPIO0
#define blue_led GPIO2
#define green_led GPIO4
#define red_led GPIO5
static unsigned char time,key_val;
void sleep_sub(void);
key1(){
delay_ms(10);
return(0);
};
static void interrupt gpie(void){
INTCON=0;
GPIF=0;
if(TMR1IF==1)time++;
TMR1IF=0; //PIR1:0
INTCON=0xc0;
}
void ad_init(void){
ADCON0=0x01; //
ANSEL=0x11; //AD CLOCK FOCS/8 AN0 SELECE AD CONVER REF:VDD
ADON=1; //AD Module on
}
void sleep_sub(void){
blue_led=0;green_led=0;red_led=0;
ADON=0;
INTCON=0x88; //GIE=1;GPIE=1;
IOCB=0x08; //GP3 CHANGE INTERRUPT
OPTION = 0x8f; // WDT prescaled by 1 - about 17 ms
CLRWDT();
asm("sleep");
// asm("nop"); //jump main
//CLRWDT();
blue_led=0;green_led=0;red_led=0;
CLRWDT();
OPTION = 0x88; // WDT prescaled by 1 - about 17 ms
asm("goto $");
asm("nop");
INTCON=0xc0;
CMCON=0x07;
}
void led_off(void){
blue_led=0;
green_led=0;
red_led=0;
}
void led_on(void){
blue_led=1;
green_led=1;
red_led=1;
}
//////////////////////main////////////////////////
main(){
unsigned char i,temp,on_time,off_time,j;
i=0;
j=0;
//delay_ms(1);
GPIO=0x0;
TRISIO=0b00001001;
CMCON=0x07;
//TRISIO=0b00001001;
//as pic16f676
asm("movlw 0x00");
asm("movwf 0x91");
ANSEL=0x10; // same pic12f675 ANSEL=0X11;
OPTION = 0x0D; // WDT prescaled by 64 - about 1200 ms
TRISIO=0b00001001;
GPIO=0x0; //led of
//TRIS2=1; /////////////
//WPU2=1;
//ad_init();
PEIE=0x01; //enable INTCON:6
T1CON=0x30; //timer1 1:8
PIE1=0x01; //enable timer1 intterupt TMR1IE;
TMR1ON=0; //T1CON:0 TMR1 STOP
//WPU0=1; //gpio0 weak pull-up enable
GPIO=0x0; ; //led of
GPPU=1;
if(key_sw==1)sleep_sub(); //no key press
TMR1L=0;
TMR1H=0;
TMR1ON=1; //START TMR1 ON
GIE=1; //enable globe inttrupt
time=0;
for(;;){
CLRWDT();
if((key_sw!=0)&&(time<3))sleep_sub();
if((key_sw!=0)&&(time>2)){blue_led=0;break;}
if(time>2)led_on();
}
on_time=50;
off_time=300;
for(;;){
j++;
if(j>30){
j=0;
on_time=50;
off_time=300;
}
key_val=1;
CLRWDT();
for(i=0;i<15;i++){
CLRWDT();
led_on();
on_time=on_time+15;
delay_ms(on_time);
key_val=key_sw;
if(key_val==0)goto exit;
CLRWDT();
led_off();
off_time=off_time-15;
delay_ms(off_time);
}
/*
led_on();
delay_ms(100);
key_val=key_sw;
if(key_val==0)goto exit;
CLRWDT();
led_off();
delay_ms(200);
led_on();
delay_ms(200);
key_val=key_sw;
if(key_val==0)goto exit;
CLRWDT();
led_off();
delay_ms(100);
led_on();
delay_ms(250);
key_val=key_sw;
if(key_val==0)goto exit;
CLRWDT();
led_off();
delay_ms(300);
led_on();
delay_ms(50);
key_val=key_sw;
if(key_val==0)goto exit;
*/
CLRWDT();
led_off();
for(i=0;i<40;i++){
CLRWDT();
delay_ms(100);
key_val=key_sw;
if(key_val==0)break;
}
exit:
if(key_val==0){
delay_ms(100);
if(key_sw==0){
led_on();
delay_ms(200);
CLRWDT();
delay_ms(200);
led_off();
for(;;){
if(key_sw==1)break;
CLRWDT();
}
sleep_sub();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -