Thông báo

Collapse
No announcement yet.

lap trinh thoi gian thuc

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • lap trinh thoi gian thuc

    Bác nào pro lập trình cho em hỏi về lập trình AVR sử dụng DS1307 giao tiếp I2C. Em co một cái code tham khảo nhưng không hiểu "char const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//Anode" chỗ này lắm. Tại sao phải có các giá trị đó khi lập trình hiển thị thời gian.
    Đây la code tham khảo của em

    #include <mega16.h>
    #include <delay.h>

    // I2C Bus functions
    #asm
    .equ __i2c_port=0x15 ;PORTC
    .equ __sda_bit=0
    .equ __scl_bit=1
    #endasm
    #include <i2c.h>

    // DS1307 Real Time Clock functions
    #include <ds1307.h>

    // Declare your global variables here
    unsigned char hour, min, sec;
    char const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//Anode
    char DIS1,DIS2,DIS3,DIS4,DIS5,DIS6;

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
    PORTA=0x00;
    DDRA=0xFF;

    // Port B initialization
    // Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
    PORTB=0x00;
    DDRB=0xFF;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // I2C Bus initialization
    i2c_init();

    // DS1307 Real Time Clock initialization
    // Square wave output on pin SQW/OUT: Off
    // SQW/OUT pin state: 0
    rtc_init(0,0,0);
    rtc_set_time(12,38,00);
    while (1)
    {

    // Place your code here
    rtc_get_time(&hour,&min,&sec);
    DIS6=(MAP[sec%10]);
    PORTA = DIS6;
    PORTB.5=0;
    delay_ms(1);
    PORTB.5=1;

    DIS5 =MAP[sec/10];
    PORTA = DIS5;
    PORTB.4=0;
    delay_ms(1);
    PORTB.4=1;

    DIS4=(MAP[min%10]);
    PORTA = DIS4;PORTA.7=0;
    PORTB.3=0;
    delay_ms(1);
    PORTB.3=1;

    DIS3 =MAP[min/10];
    PORTA = DIS3;
    PORTB.2=0;
    delay_ms(1);
    PORTB.2=1;

    DIS2=(MAP[hour%10]);
    PORTA = DIS2; PORTA.7=0;
    PORTB.1=0;
    delay_ms(1);
    PORTB.1=1;

    DIS1 =MAP[hour/10];
    PORTA = DIS1;
    PORTB.0=0;
    delay_ms(1);
    PORTB.0=1;

    };
    }

  • #2
    Trời!
    Cái đó dùng để hiển thị LED 7 đoạn bạn ạ. Mỗi một giá trị tương ứng với một chữ số, từ 0 đến 9. Lấy ví dụ, giá trị 0xC0 hay 0b11000000 có 6 bit 0. Và 6 bit 0 này thì tương đương với 6 đoạn vòng quanh chữ số 0 mà bạn thấy ở LED 7 đoạn đó. Thế nhé!

    Comment

    Về tác giả

    Collapse

    viethung_a1 Tìm hiểu thêm về viethung_a1

    Bài viết mới nhất

    Collapse

    Đang tải...
    X