Thông báo

Collapse
No announcement yet.

help moi nguoi giup minh ve dong ho thoi gian thuc ds1307 voi a

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

  • help moi nguoi giup minh ve dong ho thoi gian thuc ds1307 voi a

    mình đang dùng atmega16, ds1307 và 47hc4094 truyền thông SPI va i2c của ds1307 hiển thị thời gian lên led 7 nhưng chương trình mình k biết mình viết sai ở đâu mà thời gian chạy không đúng với thực tế và led 7 của mình lại hay nhấp nháy liên tục, mình không muốn sử dụng ngắt, mong mọi người chỉ giáo dùm với ạ code của mình đây :


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

    #asm
    .equ __i2c_port=0x15 ;PORTC
    .equ __sda_bit=1
    .equ __scl_bit=0
    #endasm
    #include <i2c.h>
    #include <ds1307.h>
    #include <spi.h>

    #define MENU PIND.0
    #define UP PIND.1
    #define DOWN PIND.2
    #define OK PIND.3

    unsigned int A;
    unsigned char h,m,s,mode=0; //led7 catot chung 0a 1b 2c 3d 4e 5f 6g dot/tat
    unsigned char So[10]=
    {
    //GFEDCBA
    0b00111111, //so 0 0x3F tat G
    0b00000110, //so 1 0x06 tat A,D,E,F,G
    0b01011011, //so 2 0x5B tat C,F
    0b01001111, //so 3 0x4F tat E,F
    0b01100110, //so 4 0x66 tat A,D,E
    0b01101101, //so 5 0x6D tat B,E
    0b01111101, //so 6 0x7D tat B
    0b00000111, //so 7 0x07 tat D,E,F,G
    0b01111111, //so 8 0x7F hien 7 thanh
    0b01101111, //so 9 0x6F tat E
    };

    void hiengio (unsigned int number)
    {
    unsigned char ng,tr,ch,dv;
    ng=number/1000;
    tr=(number-ng*1000)/100;
    ch=(number-ng*1000-tr*100)/10;
    dv=(number-ng*1000-tr*100-ch*10);
    //truyen du lieu slave cuoi den dau
    spi(So[dv]); //don vi slave 4
    spi(So[ch]); //chuc slave 3
    spi(So[tr]); //tram slave 2
    spi(So[ng]); //nghin slave 1
    PORTB.4=0; // du lieu chan SS xuong muc thap, bat dau truyen du lieu qua SPI
    delay_us(1);
    PORTB.4=1; //chan du lieu SS len muc cao, ngung truyen du lieu qua SPI
    };

    void main(void)
    {

    PORTA=0x00;
    DDRA=0x00;

    PORTB=0x10; //khoi tao PORTB.4=5V PORTB.0=5V
    DDRB=0xFF; //PORTB OUTPUT

    PORTC=0x00;
    DDRC=0x00;

    PORTD=0xFF;
    DDRD=0x00;

    //CAU HINH SPI
    SPCR=0x50; // TAO THANH GHI SPCR
    //bit SPE=1 cho phep SPI hoat dong
    //BIT MSTR=1 CHE DO MATER
    //BIT SPE=1 CHO PHEP SPI HOAT DONG
    //BIT CPHA=0
    SPSR=0x00;

    i2c_init();

    rtc_init(0,0,0);
    rtc_set_time(14,05,00);
    while (1)
    {
    rtc_get_time(&h,&m,&s);
    A=(h*100)+m;
    hiengio(A);
    delay_ms(300);
    if(!MENU)
    {
    delay_ms(400);
    while(OK)
    {
    if(!MENU)
    {
    delay_ms(300);
    mode++;
    if(mode>2)mode=0;
    }
    if(mode==0)
    {
    hiengio(h);
    if(!UP)
    {
    delay_ms(300);
    h++;
    if(h==24)h=0;
    }
    else
    if(!DOWN)
    {
    delay_ms(300);
    if(h>0)h--;
    else h=23;
    }
    else
    if(mode==1)
    {
    hiengio(m);
    if(!UP)
    {
    delay_ms(300);
    m++;
    if(m==60)m=0;
    }
    else
    if(!DOWN)
    {
    delay_ms(300);
    if(m>0)m--;
    else m=59;
    }
    }
    else
    if(mode==2)
    {
    hiengio(s);
    if(!UP)
    {
    delay_ms(300);
    s++;
    if(s==60)s=0;
    }
    else
    if(!DOWN)
    {
    delay_ms(300);
    if(s>0)s--;
    else s=59;
    }
    }
    }
    };
    }
    };
    }
    Click image for larger version

Name:	Capture.PNG
Views:	2
Size:	27.5 KB
ID:	1422259

Về tác giả

Collapse

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

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

Collapse

  • nguyendinhvan
    Trả lời cho Vấn đề về tốc độ quay
    bởi nguyendinhvan
    Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
    Hôm qua, 19:50
  • Andrea14
    Vấn đề về tốc độ quay
    bởi Andrea14
    Chào mọi người,

    Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
    12-12-2025, 12:42
  • bqviet
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi bqviet
    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
    06-12-2025, 17:17
Đang tải...
X