Thông báo

Collapse
No announcement yet.

Giúp mình về lập trình đồng hồ thời gian sử dụng DS1307 hiển thi LCD (Pic 16f877a)

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

  • lambaotrung
    replied
    phần trong này là cách đọc giá trị từ DS_1307
    Code:
    void GET_ds1307()
    {
    
          sec=read_ds1307(0);   // read second gan vao bien sec
          sec=bcdtodec(sec);
         
         if(sec==0)
         {
          min=read_ds1307(1);   // read minute gan vao bien min
          min=bcdtodec(min);
         }
         if(min==0&&sec==0)
         {
          hours=read_ds1307(2);   // read hour gan vao bien hour 
          hours=bcdtodec(hours);
         }
         if(hours==0&&min==0&&sec==0)
         {
          day=read_ds1307(3);   // read day
          day=bcdtodec(day);
    
          date=read_ds1307(4);  // read date gan vao bien date
          date=bcdtodec(date);
         }
         if(day==1&&hours==0&&min==0&&sec==0)
         {
          month=read_ds1307(5); // read month gan vao bien month
          month=bcdtodec(month);
         }
         if(month==1&&day==1&&hours==0&&min==0&&sec==0)
         {
          year=read_ds1307(6);  // read year gan vao bien year 
          year=bcdtodec(year);
         }
              
    
    
    }
    Còn đây là phần hiển thị của bạn
    có 2 dòng
    hh:mm:ss
    dd:MM:yy

    Code:
    void Hienthi()
    {
                lcd_putcmd(0x80);     
                printf(lcd_putchar,"TIME: %02U:%02U:%02U ",hours,min,sec);                 
                lcd_putcmd(0xc0);
                printf(lcd_putchar,"DATE: %02U/%02U/%02U ",date,month,year);
    }
    như vậy trong đoạn code cơ bản nhất của bạn


    Code:
    //============================
    khia báo ban đầu
    //====================
    
    void main()
    {
    //======= Khai báo ban đầu về tiền sử lý ============//
    
    bạn viết các phần khai báo, ngắt, định dạng biến.....
    
    //====( cái này là bất buộc )============//
    
    sec=dectobcd(30);                 // enable oscillator(bit 7 =0) cho phép dao dong o Bit 7 =0.
    write_ds1307(0,sec);              // nhầm tạo giao động ban đầu cho DS_1307
    
    //==========================================//
    //=============== đọc giá trị lần đầu tiên =========//
          sec=read_ds1307(0);   // read second gan vao bien sec
          sec=bcdtodec(sec);
    
          min=read_ds1307(1);   // read minute gan vao bien min
          min=bcdtodec(min);
    
          hours=read_ds1307(2);   // read hour gan vao bien hour 
          hours=bcdtodec(hours);
    
          day=read_ds1307(3);   // read day
          day=bcdtodec(day);
    
          date=read_ds1307(4);  // read date gan vao bien date
          date=bcdtodec(date);
    
          month=read_ds1307(5); // read month gan vao bien month
          month=bcdtodec(month);
    
    
          year=read_ds1307(6);  // read year gan vao bien year 
          year=bcdtodec(year);
    
    //=========================================//
    
    //============= vào vòng Whlie ===============// 
    
    whlie(true)
    {
    GET_ds1307();
    delay_ms(5);
    Hienthi();
    delay_ms(10);
    }
    
    }
    do may tính của mình ko đính kèm dc file mo phỏng, bạn cứ tập vào nghiên cứ, học viết từng dòng lệnh, đừng chỉnh sửa của người khác mà hảy tạo ra phong cách riêng của mình.
    vấn đề về lịch vạn niên, tui thấy rất củ rồi, mà mọi người cử hỏi hoài. tìm vấn đề gì mới hơn nhé.

    chúc bạn thành công
    lambaotrungdt@gmail.com

    Leave a comment:


  • phuocdaica
    replied
    DAMH2.rar thứ bạn đang cần đây
    email: nguyentrungphuocspk@gmail.com

    Leave a comment:


  • emperordx
    replied
    bạn cứ viết từng lệnh 1, thử giao tiếp với DS1307 coi có vấn đề gì ko, đọc từng giá trị rồi xuất ra thử, sau đó hiệu chỉnh lại, mình cũng đã làm mấy cái đồng hồ LCD rồi, đang xài máy của đứa bạn, bạn rãnh thì PM Y!M pndx89, mình sẽ chỉ cho.

    Leave a comment:


  • huutien
    replied
    đồng hồ số hiện thị lcd (DS1307=PIC8F4620)

    mình cũng đang làm bài đó nhưng giờ nó vẩn chưa chạy, giúp mình sử bài này với, cảm ơn các bạn đã giúp đỡ, đây là chương trình sử dung MPLAB
    Attached Files

    Leave a comment:


  • super_noob
    replied
    minh nghi là pic không lấy được hoặc ghi được vào DS1307...?! co cách nào giúp mình với?!

    Leave a comment:


  • minh_cly
    replied
    Nguyên văn bởi super_noob Xem bài viết
    bạn minh cly noi rõ hơn được không?! mình mới tiếp xúc với pic nên không hiểu
    Bạn có thể chèn các hàm tắt mở led ở các điểm khác nhau để xem lệnh nào đc thực hiện và ở đâu bị lặp vô hạn (Giống kiểu checkpoint đó). Từ đó mình biết đc vị trí của mã lỗi thôi.

    Leave a comment:


  • super_noob
    replied
    bạn minh cly noi rõ hơn được không?! mình mới tiếp xúc với pic nên không hiểu

    Leave a comment:


  • minh_cly
    replied
    Nguyên văn bởi super_noob Xem bài viết
    không up được ban ơi. nó ghi là invalid!? mà có khi nào thạch anh 4MHZ anh hưởng không nhỉ
    Debug bằng LED là phường pháp đơn giản để giải quyết các lỗi khi ko có debugger (Nếu có thì xài càng tốt)...

    Leave a comment:


  • super_noob
    replied
    không up được ban ơi. nó ghi là invalid!? mà có khi nào thạch anh 4MHZ anh hưởng không nhỉ

    Leave a comment:


  • sang_dientu
    replied
    bạn up cả file.c lên luôn đi cho dể đọc

    Leave a comment:


  • super_noob
    replied
    chương trình chắc chưa chạy được đến chỗ tính toán đâu bạn ạ. Mình nghĩ nó bị dính lại ngay dòng lệnh nhập ngày tháng vào DS1037. Mình dùng thạch anh 4Mhz cho Pic để lập trình không biết có ảnh hưởng gì không?

    Leave a comment:


  • sang_dientu
    replied
    mình đọc sơ qua. vì bạn để ngoài vậy khó đọc quá.với lại mình dùng HTC. có mấy chỗ mà hàm tính toán nó giống nhau bạn nên cho vào 1 chương trình con hoặc tính toán trong hàm readRTC luôn.

    Leave a comment:


  • Giúp mình về lập trình đồng hồ thời gian sử dụng DS1307 hiển thi LCD (Pic 16f877a)

    Mình đang làm một đề tài viết chương trình đồng hồ hiển thị lên LCD dùng DS1307. mình đã viết code nhưng khi nạp vào thì LCD chỉ hiện lên màn hình trắng mà không hoạt động gì nữa! Mình nghi ngờ chương trình bị rơi vào vòng lặp vô hạn nhưng mình tìm mãi cũng chưa biết lý do. Các bạn làm ơn giúp mình xem mình sai chõ nào. Cảm ơn nhiều.
    Đây là chương trình

    //////////////////////////////////////////////////////////////////
    #include <16f877a.h>
    #include <def_877a.h>
    #device *=16 ADC=8
    #fuses NOWDT,PUT,XT,NOPROTECT
    #use delay(clock=4000000)
    #include <DS1307.c>
    #include <LCD420.c>

    //====================Global variable declaration===============================
    int8 second, minute, hour;/*, date, day, mon, year,limit,limit1;
    int16 year1;
    int8 mode=-1;*/
    //====================================MAIN========== ============================
    void main(){
    TRISB = 0x00;
    PORTB = 0x00;

    lcd_init();
    delay_ms(10);
    //================Hien Thi Ban Dau===================
    init_DS1307();
    // Set date : 12-4-2012
    // Set time : thu 5 - 12 gio, 59 phút 10 giây
    setDateDs1307(12,4,12,5,12,59,10);
    delay_ms(10);

    while(1)
    { Printf(lcd_putc,"\f"); //=========Clear LCD=========================
    lcd_gotoxy( 1,1);
    Printf(lcd_putc,"TIME: ");
    second =read_DS1307(0x0);
    lcd_gotoxy( 7,1);
    Printf(lcd_putc,second/16 + 0x30);
    Printf(lcd_putc,second%16 + 0x30);
    lcd_gotoxy( 8,1);
    Printf(lcd_putc,":");

    minute =read_DS1307(0x01);
    lcd_gotoxy( 9,1);
    Printf(lcd_putc,minute/16 + 0x30);
    Printf(lcd_putc,minute%16 + 0x30);
    lcd_gotoxy( 10,1);
    Printf(lcd_putc,":");

    hour = read_DS1307(0x02);
    lcd_gotoxy( 11,1);
    Printf(lcd_putc,hour/16 + 0x30);
    Printf(lcd_putc,hour%16 + 0x30);
    }
    }

    /*
    LCD_putcmd(0xC0);//=========Put Cursor on line 2: thu ngay thang nam ============
    //thu
    day =read_DS1307(0x03);
    switch (day) {
    case 1: Printf(LCD_putchar," SUN"); break;
    case 2: Printf(LCD_putchar," MON"); break;
    case 3: Printf(LCD_putchar," TUE"); break;
    case 4: Printf(LCD_putchar," WEN"); break;
    case 5: Printf(LCD_putchar," THU"); break;
    case 6: Printf(LCD_putchar," FRI"); break;
    case 7: Printf(LCD_putchar," SAT"); break;
    }
    Printf(LCD_putchar," ");
    //ngay
    date =read_DS1307(0x04);
    LCD_putchar(day/16 + 0x30);
    LCD_putchar(day%16 + 0x30);
    Printf(LCD_putchar,"/");
    //thang
    mon=read_DS1307(0x05);
    LCD_putchar(mon/16 + 0x30);
    LCD_putchar(mon%16 + 0x30);
    Printf(LCD_putchar,"/");
    // nam
    year=read_DS1307(0x06);
    year=bcdToDec(year);
    year1 = 2000 + year;
    printf(lcd_putchar,"%ld",year1);
    }
    }
    }
    }
    */
    /////////////////////////////////////////////////////////////////////////


    Mình vừa từ 89c51 chuyển qua Pic nên lập trình còn có nhiều chỗ chưa biết....

Về tác giả

Collapse

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

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

Collapse

Đang tải...
X