📄 bn-led.lst
字号:
1: #include <pic.h>
2: #define XTAL_FREQ 4MHZ
3: #include "delay.c"
4: #include <delay.h>
5:
6:
7: #define delay_ms DelayMs
8: #define delay_us DelayUs
9: #define key_sw GPIO0
10: #define blue_led GPIO2
11: #define green_led GPIO4
12: #define red_led GPIO5
13:
14:
15: static unsigned char time,key_val;
16: void sleep_sub(void);
17:
18: key1(){
19: delay_ms(10);
20: return(0);
21: };
22:
23:
24: static void interrupt gpie(void){
25: INTCON=0;
26: GPIF=0;
27: if(TMR1IF==1)time++;
28: TMR1IF=0; //PIR1:0
29: INTCON=0xc0;
30: }
31:
32: void ad_init(void){
33: ADCON0=0x01; //
34: ANSEL=0x11; //AD CLOCK FOCS/8 AN0 SELECE AD CONVER REF:VDD
35: ADON=1; //AD Module on
36: }
37:
38: void sleep_sub(void){
39: blue_led=0;green_led=0;red_led=0;
40: ADON=0;
41: INTCON=0x88; //GIE=1;GPIE=1;
42: IOCB=0x08; //GP3 CHANGE INTERRUPT
43: OPTION = 0x8f; // WDT prescaled by 1 - about 17 ms
44: CLRWDT();
45: asm("sleep");
46:
47: // asm("nop"); //jump main
48: //CLRWDT();
49: blue_led=0;green_led=0;red_led=0;
50: CLRWDT();
51: OPTION = 0x88; // WDT prescaled by 1 - about 17 ms
52: asm("goto $");
53: asm("nop");
54: INTCON=0xc0;
55: CMCON=0x07;
56:
57: }
58:
59: void led_off(void){
60: blue_led=0;
61: green_led=0;
62: red_led=0;
63: }
64:
65: void led_on(void){
66: blue_led=1;
67: green_led=1;
68: red_led=1;
69: }
70:
71: //////////////////////main////////////////////////
72:
73: main(){
74: unsigned char i,temp,on_time,off_time,j;
75: i=0;
76: j=0;
77: //delay_ms(1);
78: GPIO=0x0;
79: TRISIO=0b00001001;
80: CMCON=0x07;
81: //TRISIO=0b00001001;
82: //as pic16f676
83: asm("movlw 0x00");
84: asm("movwf 0x91");
85: ANSEL=0x10; // same pic12f675 ANSEL=0X11;
86:
87: OPTION = 0x0D; // WDT prescaled by 64 - about 1200 ms
88: TRISIO=0b00001001;
89: GPIO=0x0; //led of
90: //TRIS2=1; /////////////
91: //WPU2=1;
92: //ad_init();
93: PEIE=0x01; //enable INTCON:6
94: T1CON=0x30; //timer1 1:8
95: PIE1=0x01; //enable timer1 intterupt TMR1IE;
96: TMR1ON=0; //T1CON:0 TMR1 STOP
97: //WPU0=1; //gpio0 weak pull-up enable
98:
99:
100:
101: GPIO=0x0; ; //led of
102: GPPU=1;
103:
104: if(key_sw==1)sleep_sub(); //no key press
105: TMR1L=0;
106: TMR1H=0;
107: TMR1ON=1; //START TMR1 ON
108: GIE=1; //enable globe inttrupt
109: time=0;
110:
111: for(;;){
112: CLRWDT();
113: if((key_sw!=0)&&(time<3))sleep_sub();
114: if((key_sw!=0)&&(time>2)){blue_led=0;break;}
115: if(time>2)led_on();
116: }
117: on_time=50;
118: off_time=300;
119: for(;;){
120: j++;
121: if(j>30){
122: j=0;
123: on_time=50;
124: off_time=300;
125: }
126: key_val=1;
127: CLRWDT();
128: for(i=0;i<15;i++){
129: CLRWDT();
130: led_on();
131: on_time=on_time+15;
132: delay_ms(on_time);
133: key_val=key_sw;
134: if(key_val==0)goto exit;
135: CLRWDT();
136: led_off();
137: off_time=off_time-15;
138: delay_ms(off_time);
139: }
140: /*
141: led_on();
142: delay_ms(100);
143: key_val=key_sw;
144: if(key_val==0)goto exit;
145: CLRWDT();
146: led_off();
147:
148: delay_ms(200);
149: led_on();
150: delay_ms(200);
151: key_val=key_sw;
152: if(key_val==0)goto exit;
153: CLRWDT();
154: led_off();
155:
156: delay_ms(100);
157: led_on();
158: delay_ms(250);
159: key_val=key_sw;
160: if(key_val==0)goto exit;
161: CLRWDT();
162: led_off();
163:
164: delay_ms(300);
165: led_on();
166: delay_ms(50);
167: key_val=key_sw;
168: if(key_val==0)goto exit;
169: */
170: CLRWDT();
171: led_off();
172: for(i=0;i<40;i++){
173: CLRWDT();
174: delay_ms(100);
175: key_val=key_sw;
176: if(key_val==0)break;
177: }
178: exit:
179: if(key_val==0){
180: delay_ms(100);
181: if(key_sw==0){
182: led_on();
183: delay_ms(200);
184: CLRWDT();
185: delay_ms(200);
186: led_off();
187: for(;;){
188: if(key_sw==1)break;
189: CLRWDT();
190: }
191: sleep_sub();
192: }
193: }
194:
195: }
196: }
197:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -