📄 dth.lst
字号:
1: #include <pic.h>
2: #define XTAL_FREQ 4MHZ //pic12f675
3: #include "delay.c"
4: #include <delay.h>
5:
6:
7: #define delay_ms DelayMs
8: #define delay_us DelayUs
9: #define key GPIO3
10: #define blue_led GPIO2
11: #define green_led GPIO4
12: #define red_led GPIO5
13: //#define set_low_value 0x4c //20-1.04-b0-130-4c
14: //#define set_mid_value 0x3c //28-.821-f0-3c
15: //#define set_high_value 0x2e //35-.642-bb-2e
16: /*次为按客户要求更改为35-45-55度 2007-2-28*/
17: //#define set_low_value 0x2d //35-32.83k-0xb7-0x2d
18: //#define set_mid_value 0x20 //45-21.89k-0x82-0x20
19: //#define set_high_value 0x17 //55-14.94k-0x5c-0x17
20:
21: //#define set_low_value 0x36 //30-40.7k-0xda-0x36
22: //#define set_mid_value 0x27 //40-26.6k-0x9a-0x26
23: //#define set_high_value 0x1c //50-17.7k-0x6c-0x1b
24:
25: /*2008-5-12按客户要求更改为40-50-60度*/
26: #define set_low_value 0x27 //40-26.6k-0x9a-0x26
27: #define set_mid_value 0x1c //50-17.7k-0x6c-0x1b
28: #define set_high_value 0x13 //60-12.4k-0x4e-0x13
29:
30: #define pwm_out GPIO1
31:
32:
33: static unsigned char time,state,have_key,key_open;
34: static unsigned char temperature,temp_data,pwm;
35:
36: /*
37: void delayus(unsigned int xx) {
38:
39: unsigned char j,k;
40:
41: if(xx>0xfe){
42: k=xx/10;
43: for(j=0;j<10;j++)delay_us(k);
44:
45: }
46: else delay_us(xx);
47: };
48: */
49:
50: static void interrupt gpie(void){
51: INTCON=0;
52: GPIF=0;
53: if(TMR1IF==1)time++;
54: TMR1IF=0; //PIR1:0
55: INTCON=0xc0;
56: }
57:
58:
59: void ad_init(void){
60: ADCON0=0x01; //
61: ANSEL=0x11; //AD CLOCK FOCS/8 AN0 SELECE AD CONVER REF:VDD
62: ADON=1; //AD Module on
63: }
64:
65: unsigned char ad_read(unsigned char channel){
66: channel&=0x03;
67: ADCON0&=0xc3;
68: ADCON0|=(channel<<2);
69: GODONE=1;
70: while(GODONE)continue;
71: return(ADRESH);
72: }
73:
74:
75: void sleep_sub(void){
76: blue_led=1;green_led=1;red_led=1;
77: ADON=0;
78: INTCON=0x88; //GIE=1;GPIE=1;
79: IOCB=0x08; //GP3 CHANGE INTERRUPT
80: OPTION = 0x8f; // WDT prescaled by 1 - about 17 ms
81: CLRWDT();
82: asm("sleep");
83: CLRWDT();
84: // asm("nop"); //jump main
85: //CLRWDT();
86: OPTION = 0x88; // WDT prescaled by 1 - about 17 ms
87: asm("goto $");
88: asm("nop");
89: INTCON=0xc0;
90: CMCON=0x07;
91:
92: }
93:
94: void led(void){
95: blue_led=1;green_led=1;red_led=1;
96: if(state==1)blue_led=0;
97: if(state==2)green_led=0;
98: if(state==3)red_led=0;
99: }
100: void key_function(void){
101: have_key=0;
102: key_open=0;
103: if(key!=0)return;
104: led();
105: TMR1L=0;
106: TMR1H=0;
107: time=0;
108: GIE=1;
109: TMR1ON=1;
110: for(;;){
111: CLRWDT();
112: if(time>4)sleep_sub();
113: if(key!=0)break;
114: }
115: TMR1L=0;
116: TMR1H=0;
117: time=0;
118: while(1){
119: CLRWDT();
120: for(;;){
121: CLRWDT();
122: if(key==0){
123: delay_ms(10);
124: if(key==0){have_key=1;break;}
125: }
126: if(time>8){
127: blue_led=1;
128: green_led=1;
129: red_led=1;
130: TMR1L=0;
131: TMR1H=200;
132: time=0;
133: return;
134: }
135: }
136: TMR1L=0;
137: TMR1H=0;
138: time=0;
139: state++;
140: if(state>3)state=1;
141: if(state==0)state=1;
142: led();
143: if(state==1)temperature=set_low_value;
144: if(state==2)temperature=set_mid_value;
145: if(state==3)temperature=set_high_value;
146: for(;;){
147: CLRWDT();
148: if(key!=0)break;
149: if(time>4)sleep_sub();
150: }
151: }
152: }
153: //////////////////////////////////////
154: void pwm_function(void){
155: unsigned int pwm_high,pwm_low,h,l;
156: TMR1L=0;
157: TMR1H=200; //about 100 ms check a time
158: time=0;
159: GIE=1;
160: TMR1ON=1;
161: h=2*pwm*10/10;
162: l=2*(100-pwm)*10/10;
163: for(;;){
164: CLRWDT();
165: pwm_high=h;
166: pwm_out=1;
167: if(time>0)break;
168: while(pwm_high--);
169: //delayus(pwm_high);
170: pwm_low=l;
171: pwm_out=0;
172: while(pwm_low--);
173: //delayus(pwm_low);
174:
175: key_function();
176: }
177: }
178:
179: //////////////////////main////////////////////////
180:
181: main(){
182: unsigned char i,temp;
183: i=0;
184: temp_data=0;
185: GPIO=0x34;
186: CMCON=0x07;
187: TRISIO=0b00001001;
188: //as pic16f676
189: asm("movlw 0x01");
190: asm("movwf 0x91");
191: ANSEL=0x11; // same pic12f675 ANSEL=0X11;
192:
193: OPTION = 0x0D; // WDT prescaled by 64 - about 1200 ms
194: GPIO=0x34; 0b00110100; //led of
195: TRIS2=1; /////////////
196: WPU2=1;
197: ad_init();
198: PEIE=0x01; //enable INTCON:6
199: T1CON=0x30; //timer1 1:8
200: PIE1=0x01; //enable timer1 intterupt TMR1IE;
201: TMR1ON=0; //T1CON:0 TMR1 STOP
202: //WPU0=1; //gpio0 weak pull-up enable
203:
204:
205: i=0;
206: i=0;
207: CLRWDT();
208: if((GPIO2==0)&&(key==0)){
209: pwm_out=1;
210: delay_ms(200);
211: temp_data=ad_read(0);
212: if((temp_data>0x3a)&&(temp_data<0x40)){GPIO4=0;GPIO5=0;};
213: test: CLRWDT();
214: if(GPIO2==0)goto test;
215: pwm_out=0;
216: }
217: TRIS2=0; //////////
218: GPIO=0x34; 0b00110100; //led of
219: GPPU=1;
220:
221: if(key==1)sleep_sub(); //no key press
222: TMR1L=0;
223: TMR1H=0;
224: TMR1ON=1; //START TMR1 ON
225: GIE=1; //enable globe inttrupt
226: time=0;
227:
228: for(;;){
229: CLRWDT();
230: if((key!=0)&&(time<5))sleep_sub();
231: if((key!=0)&&(time>4)){blue_led=0;break;}
232: if(time>4)blue_led=0;
233: }
234: state=1;
235: //locate_convert:
236: for(;;){
237: CLRWDT();
238: TMR1L=0;
239: TMR1H=0;
240: time=0;
241: GIE=1;
242: TMR1ON=1;
243: led();
244: have_key=0;
245: temp=0;
246: for(;;){
247: CLRWDT();
248: if((key!=0)&&(time>8)){have_key=0;break;}
249: if(key==0){
250: delay_ms(10);
251: if(key==0){have_key=1;temp=1;state++;break;}
252: }
253: }
254: if(state>3)state=1;
255: if(state==0)state=1;
256: if(have_key==1)led();
257: TMR1L=0;
258: TMR1H=0;
259: time=0;
260: GIE=1;
261: TMR1ON=1;
262: key_open=0;
263: while(temp){
264: CLRWDT();
265: if(time>4)sleep_sub();
266: if(key!=0){temp=0;key_open=1;};
267: }
268: // if(key_open==1)goto locate_convert;
269: if(key_open==0)break;
270: }
271: blue_led=1;green_led=1;red_led=1;
272: if(state==1)temperature=set_low_value;
273: if(state==2)temperature=set_mid_value;
274: if(state==3)temperature=set_high_value;
275:
276: while(1){
277: CLRWDT();
278: temp_data=ad_read(0);
279: if((temp_data>0xe0)||(temp_data<0x0f)){
280: if(state==1)pwm=1;
281: if(state==2)pwm=1;
282: if(state==3)pwm=1;
283: };
284:
285: if(temp_data>temperature)pwm++;
286: if(temp_data<temperature)pwm--;
287: if(pwm<1)pwm=1;
288: if(pwm>100)pwm=100;
289: pwm_function();
290: }
291:
292: }
293:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -