PDA

View Full Version : ai sủa cho em cai code này cái em dang cần gấp


vibaongoc
04-12-2012, 12:45 AM
code:
#include<16f877A.h>
#device *=16 ADC=8
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include<def_877a.h>
#include<lcd.c>


int16 analogvalue, digitalvalue;
int8 j;

void main()
{
byte value;
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_4, 255, 16);
// giá tr? b? chia t?n s? timer 2 là 4.
// Th?i gian m?t chu k?: (255+1)*4*4/20 = 204.8 (us)
setup_port_a(ALL_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel( 0 );

while( TRUE )
{
value=read_adc(); //??c giá tr? t? chi?t áp ?i?u ch?nh t?c ??
set_pwm1_duty(value); // Thi?t l?p ?? r?ng xung
} // Th?i gian ?? r?ng xung = value*4/20 (us)
}


void hienthi()
{

//Hien thi gia tri analog
lcd_gotoxy(1,1);
lcd_putc(" Analog value: ");
lcd_putc(analogvalue/100+0x30);
lcd_putc(".");
lcd_putc((analogvalue/10)%10+0x30);
lcd_putc(analogvalue%10+0x30);

//Hien thi gia tri digital:
lcd_gotoxy(1,2);
lcd_putc(" Digital value:");
lcd_putc(digitalvalue/100+0x30);
lcd_putc((digitalvalue%100)/10+0x30);
lcd_putc(digitalvalue%10+0x30);
}
void main()
{
set_tris_D(0x00);


setup_adc_ports( ALL_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);

lcd_init();
//Khoi tao gia tri cac bien trung gian
portd=0;
//Bat dau vong lap chuong chinh
while(true)
{
digitalvalue = read_adc();
analogvalue= ((digitalvalue*100)/256)*5;
hienthi();
}
}
code dùng hiển thị điện áp và điều chỉnh độ sáng của đèn
thank ca nha

huankhi
04-12-2012, 10:00 AM
theo mình thấy chương trình của bạn có 1 lỗi dễ nhận thấy là: bạn có 2 hàm main tương ứng là 2 vòng while(true). như vậy chương trình nếu vào 1 vòng thì sẽ ko vào vòng thứ 2
mình đã sửa code của bạn như thế này và chạy đc. bạn thử xem sao


//#include<16f877A.h>
#include <def_16f877a.h>
#device *=16 ADC=8
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd.c>

int16 analogvalue, digitalvalue;
void hienthi()
{

//Hien thi gia tri analog
lcd_gotoxy(1,1);
lcd_putc(" Analog value: ");
lcd_putc(analogvalue/100+0x30);
lcd_putc(".");
lcd_putc((analogvalue/10)%10+0x30);
lcd_putc(analogvalue%10+0x30);

//Hien thi gia tri digital:
lcd_gotoxy(1,2);
lcd_putc(" Digital value:");
lcd_putc(digitalvalue/100+0x30);
lcd_putc((digitalvalue%100)/10+0x30);
lcd_putc(digitalvalue%10+0x30);
}
void main()
{
set_tris_D(0x00);

setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_4, 255, 16);
// giá tr? b? chia t?n s? timer 2 là 4.
// Th?i gian m?t chu k?: (255+1)*4*4/20 = 204.8 (us)
setup_port_a(ALL_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel( 0 );
lcd_init();
//Khoi tao gia tri cac bien trung gian
portd=0;
//Bat dau vong lap chuong chinh
while(true)
{
digitalvalue=read_adc(); //??c giá tr? t? chi?t áp ?i?u ch?nh t?c ??
analogvalue= ((digitalvalue*100)/256)*5;
set_pwm1_duty(analogvalue*2); // Thi?t l?p ?? r?ng xung
hienthi();
}
}