![]() |
|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Aug 2009
Bài gửi: 16
: |
Điều chỉnh độ sáng LED
Em đang làm đề tài điều chỉnh độ sáng đèn led bằng PWM thông qua cảm biến quang đưa tín hiệu vào kênh AN0. Mong các bác góp ý dùm.
[code] #include <16F877a.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #device 16F877a*=16 ADC=8 #include <def_877A.h> #use delay(clock=4000000) #include <def_877a.h> int8 mode=0,somode; int8 value,aa; int8 duty; int8 const a[11] = {192,249,164, 176,153,146,130,248,128,144,136}; #INT_EXT //khai bao ngat ngoai EXT_ISR() {//KHAI BAO NGAT mode++; if (mode==11) mode = 0; } // End of INT void pro1(); void main() { set_tris_b(0x01); set_tris_d(0x00); set_tris_c(0x00); setup_port_a(ALL_ANALOG);//Đọc giá trị ánh sáng môi trường từ //cảm biến quang trở setup_adc(adc_clock_internal); set_adc_channel( 0 ); setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_4, 249, 4); enable_interrupts(int_EXT);//ngắt ngoài dùng để đặt mức sáng ext_int_edge(L_TO_H); // enable_interrupts(GLOBAL); portd=192;set_pwm1_duty(0); while(1) { switch(mode) { CASE 0: portd=a[mode];set_pwm1_duty(0);BREAK; default: pro1() ; break; } } } void pro1() { portd=a[mode]; value=(float)read_adc(); delay_us(10); somode=(mode*25.5);//22.5=0.5V*255/5V // 5V/0.5V=10 muc if (value<somode) { duty=(somode-value); set_pwm1_duty(duty); } else set_pwm1_duty(0); } thay đổi nội dung bởi: zonnamtao, 19-10-2009 lúc 02:08 AM. |
![]() |
![]() |
|
|