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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • vibaongoc
    Nhập môn đệ tử
    • Nov 2012
    • 2

    #1

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

    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
    Attached Files
  • huankhi
    Nhập môn đệ tử
    • May 2010
    • 7

    #2
    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();
    }
    }
    Last edited by huankhi; 04-12-2012, 09:33 AM. Lý do: sửa code

    Comment

    Working...