Thông báo

Collapse
No announcement yet.

Các bác giúp em về DS1307 với 89S52 với ạ

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

  • Các bác giúp em về DS1307 với 89S52 với ạ

    Em lập trình được hiển thị thời gian rồi nhưng khi mô phỏng nó lại hiển thị không liên tục lắm mặc dù em đã điều chỉnh thời gian quét led. Các bác xem hộ em với ạ. Cảm ơn các bác và xin hậu tạ 20k thẻ điện thoại cho bác nào giúp được em (các bác thông cảm em là sinh viên ạ).
    Dưới đây là toàn bộ code cũng như project của em.
    PHP Code:
    #include<AT89X52.H>

    #define MODE P1_0
    #define UP    P1_1
    #define DOWN    P1_2
    #define SDA P3_1    
    #define SCL P3_0    
    #define DS1307_ID 0xD0    
    #define SEC 0x00
    #define    MIN 0x01    
    #define HOUR 0x02
    #define DAY 0x03
    #define DATE 0x04
    #define MONTH 0x05
    #define YEAR 0x06
    #define Date1        P2_0
    #define Date2        P2_1
    #define Mth1        P2_2
    #define Mth2        P2_3
    #define Year1        P2_4
    #define Year2        P2_5
    #define Year3        P2_6
    #define Year4        P2_7

    #define Day1            P1_4

    #define Hour1        P3_3
    #define Hour2        P3_4
    #define Min1        P3_5
    #define Min2        P3_6
    #define Sec1        P3_7
    #define Sec2        P1_3

    #define Display_Date_Chuc {\
    Date1 1;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Date_DV {\
    Date1 0;\
    Date2 1;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Month_Chuc {\
    Date1 0;\
    Date2 0;\
    Mth1 1;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }

    #define Display_Month_DV {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 1;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Year_Nghin {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  1;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Year_Tram {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  1;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Year_Chuc {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  1;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Year_DV {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  1;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Day {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 1;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Hour_Chuc {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 1;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Hour_DV {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 1;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }

    #define Display_Min_Chuc {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 1;\
    Min2 0;\
    Sec1 0;\
    Sec2 0;\
    }
    #define Display_Min_DV {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 1;\
    Sec1 0;\
    Sec2 0;\
    }

    #define Display_Sec_Chuc {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 1;\
    Sec2 0;\
    }
    #define Display_Sec_DV {\
    Date1 0;\
    Date2 0;\
    Mth1 0;\
    Mth2 0;\
    Year1  0;\
    Year2  0;\
    Year3  0;\
    Year4  0;\
    Day1 0;\
    Hour1 0;\
    Hour2 0;\
    Min1 0;\
    Min2 0;\
    Sec1 0;\
    Sec2 1;\
    }

    unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 } ;
    unsigned char t_view,time,index,F_set,B_nhay,get_t ;
    unsigned char hour,sec,min,day,date,month,year;
    /************KHAI BAO HAM, CHUONG TRINH CON*********************************************** ********/
    void set_main(void);     // Chuong trinh khoi tao main
    void setup_timer(void);     // Chuong trinh cai dat timer 1 va 0 
    void delay(unsigned int time); // Delay
    void Fix_time(void);     // Kiem tra va hieu chinh gia tri cua gio,phut,giay
    void Keypad(void);     // Kiem tra xu ly phim nhan.    
    void T1_ISR(void);     //ngat timer 1 phuc vu nhay led
    void T0_ISR(void); // Dung ngat timer 0 de quet led

    /************CAC CHUONG TRINH CON*********************************************** ******************/
    // FOR I2C
    /************************************************** *********************/

    void I2C_start(void)
    {
    SCL    1;    SCL 0;
    SDA 1;    SCL 1;
    delay(2);
    SDA 0delay(2);
    SCL 0delay(2);
    }
    void I2C_stop(void)
    {
    SCL 1;    SCL 0;
    SDA 0;    delay(2);
    SCL 1;    delay(2);
    SDA 1;    
    }
    bit I2C_write(unsigned char dat)
    {
    unsigned char i;    
    for (
    i=0;i<8;i++)
    {
    SDA = (dat 0x80) ? 1:0;
    SCL=1;SCL=0;
    dat<<=1;
    }
    SCL 1;    delay(2);
    SCL 0;
    }
    unsigned char I2C_read(void)
    {
    bit rd_bit;    
    unsigned char idat;
    dat 0x00;    
    for(
    i=0;i<8;i++)     /* For loop read data 1 byte */
    {
    delay(2);
    SCL 1;     /* Set SCL */
    delay(2); 
    rd_bit SDA;     /* Keep for check acknowledge    */
    dat dat<<1;    
    dat dat rd_bit;    /* Keep bit data in dat */
    SCL 0;     /* Clear SCL */
    }
    return 
    dat;
    }
    /************************************************** *********************/
    // FOR DS1307
    /************************************************** *********************/

    unsigned char DS1307_get(unsigned char addr
    {
    unsigned int temp,ret;    
    I2C_start(); /* Start i2c bus */
    I2C_write(DS1307_ID); /* Connect to DS1307 */
    I2C_write(addr);     /* Request RAM address on DS1307 */    
    I2C_start();     /* Start i2c bus */
    I2C_write(DS1307_ID+1);    /* Connect to DS1307 for Read */
    ret I2C_read();     /* Receive data */
    I2C_stop();
    //*********************************************
    temp ret;     /*BCD to HEX*/
    ret = (((ret/16)*10)+ (temp 0x0f));     /*for Led 7seg*/
    //*********************************************    
    return ret;    
    }

    void DS1307_Write(unsigned char addr,unsigned char dat)
    {
    unsigned int temp;
    //**********************************************     /*HEX to BCD*/
    temp dat ;     /*for Led 7seg*/
    dat = (((dat/10)*16)|(temp %10));
    //**********************************************    
    I2C_start(); /* Start i2c bus */
    I2C_write(DS1307_ID); /* Connect to DS1307 */
    I2C_write(addr);     /* Request RAM address on DS1307 */    
    I2C_write(dat);    /* Connect to DS1307 for Read */
    I2C_stop();
    }
    /************************************************** *********************/

    void delay(unsigned int time)
    {    while(
    time--); }
    void set_main(void)     // Chuong trinh khoi tao main
    {
    P1=0x00;
    P0=0xff;
    P2=0x00;
    P3=0x00;
    }

    void setup_timer(void)    // Setup timer 0 va timer 1 
    {
    TMOD=0x11// timer0 & timer1 set che do 1
    TH0=0xfcTL0=0x18;
    TH1=0x3CTL1=0xAF;
    ET1=1ET0=1;    EA=1;
    TF0=0TF1=0;    TR0=1;    TR1=1;
    }
    void Fix_time(void)     // Kiem tra va hieu chinh gia tri cua gio,phut,giay
    {
    //Tang
    if(sec==60)    {sec=0;min++;    }
    if(
    min==60)    {min=0;hour++;    }
    if(
    hour==24hour=0;
    if(
    day==8day=1;
    if(
    month==2)
        {
            if((
    year%4!=0)&&(date==29))
            {
                
    date=1;
                
    month++;
            }
            else if(
    date==30)
            {
                
    date=1;
                
    month++;
            }
        }
    if(
    date==32)
        {
        
    date=1;
        
    month++;
        }
    if(
    month==13)
        {
        
    month=1;
        
    year++;
        }
    if(
    year==100)
        {
        
    year=0;
        }
    if(
    sec== -1) {sec=59;min--;}
    if(
    min== -1) {min=59;hour-- ;}
    if(
    hour== -1)hour23;
    }
    void Keypad(void)     // Kiem tra phim nhan.    

    if(!
    MODE){     //phim Set duoc nhan ?
    F_set++;     // Bien F_set co gia tri tu 0->2
    if(F_set==4) {F_set=0;
    DS1307_Write(0x02,hour);
    DS1307_Write(0x01,min);
    DS1307_Write(0x00,sec); }
    }
    if(
    F_set==1){     //Tang hoac giam phut neu F_set = 1
    if(!UPhour++;
    if(!
    DOWN)    hour--;
    }
    if(
    F_set==2){     //Tang hoac giam gio neu F_set = 2
    if(!UPmin++;
    if(!
    DOWNmin--;
    }
    if(
    F_set==3){     //Tang hoac giam gio neu F_set = 2
    if(!UPsec++;
    if(!
    DOWNsec--;
    }
    Fix_time();     //kiem tra tran so 
    delay(20000);
    }
    void T1_ISR(voidinterrupt 3 //ngat timer 1 chay dong ho

    TR1=0;
    TF1=0;
    TH1=0x3C// nap lai gia tri cho thanh ghi 
    TL1=0xAF;
    time++;    
    if(
    time==10)
    {
    time=0B_nhay++; get_t=1;
    if(
    B_nhay==2)
    B_nhay=0;
    }
    TR1=1;
    }    
    /*************************************/
    void T0_ISR(voidinterrupt 1     // Dung ngat timer 0 de quet led
    {
    TR0=0;
    TF0=0;
    TH0=0xfc;//-1000/256; // Nap lai gia tri cho thanh ghi 
    TL0=0x18;//-1000%256;
    index++;
    //giay
    switch(index)    
    {
    case 
    1:
        
        if(
    F_set==&& B_nhay==1)
            {
    index++;    index++;}
        else
        {
        
    t_view=sec;
        
    P0=0xff;
        
    Display_Sec_DV;
        
    P0=led7_data[t_view%10];
        }
        break;

    case 
    2:
     
        
    P0=0xff;
        
    Display_Sec_Chuc;
        
    P0=led7_data[t_view/10]; 
        break;

    case 
    3:
        
        if(
    F_set==&& B_nhay==1)
            {
                
    index++;
                
    index++;
            }
        else
        {    
        
    t_view=min;
        
    P0=0xff;
        
    Display_Min_DV;
        
    P0=led7_data[t_view%10];
        }
        break;
    case 
    4:
     
    P0=0xff;
    Display_Min_Chuc;
    P0=led7_data[t_view/10];    
    break; 
    case 
    5:
        if(
    F_set==&& B_nhay==1){index++;index++;}
        else
        { 
        
    t_view=hour;
        
    P0=0xff;
        
    Display_Hour_DV;
        
    P0=led7_data[t_view%10];    
        }
        break;
    case 
    6:

    P0=0xff;
    Display_Hour_Chuc;//00000001
    P0=led7_data[t_view/10]; 
    break;

    case 
    7:
     
        if(
    F_set==&& B_nhay==1){index=index+4;}
        else
        {
        
    t_view=year;
        
    P0=0xff;
        
    Display_Year_DV;//00000001
        
    P0=led7_data[t_view%10]; 
        }
        break;
    case 
    8

        
    P0=0xff;
        
    Display_Year_Chuc;//00000001
        
    P0=led7_data[t_view/10]; 
         break;
    case 
    9:

    P0=0xff;
    Display_Year_Tram;//00000001
    P0=led7_data[0]; 
    break;

    case 
    10:
     
    P0=0xff;
    Display_Year_Nghin;//00000001
    P0=led7_data[2]; 
    break;
         
    case 
    11:

    if(
    F_set==&& B_nhay==1)
        {
    index++; index++;}
    else
    {
    t_view=month;
    P0=0xff;
    Display_Month_DV;//00000001
    P0=led7_data[t_view%10]; 
    }
    break;
         
    case 
    12:

    P0=0xff
    Display_Month_Chuc;
    P0=led7_data[t_view/10]; 
    break;    
    case 
    13:

    if (
    F_set==&& B_nhay==1)
        {
    index++;
         
    index++;
        } 
    else
    {
    t_view=date;
    P0=0xff;
    Display_Date_DV;//00000001
    P0=led7_data[t_view%10]; 
    }
    break;    
    case 
    14:
     
        
    P0=0xff;
        
    Display_Date_Chuc;//00000001
        
    P0=led7_data[t_view/10]; 
    break;
    case 
    15:
        
    t_view=day;
        
    P0=0xff;
        
    Display_Day;//00000001
        
    P0=led7_data[t_view%10];
        
    index=0;     
         break;
        }
         
    TR0=1;
        }
    void main()
    {    
        
    time=index=0;
        
    hour=0;
        
    min=0;
        
    sec=0;
        
    F_set=0;
        
    get_t=0;
        
    setup_timer();
    while(
    1)

        
    Keypad();

        if(
    F_set==0)

        if(
    get_t == 1)
    {    
        
    get_t 0;
        
    sec DS1307_get(SEC);
        
    min DS1307_get(MIN);    
        
    hour DS1307_get(HOUR);
        
    day DS1307_get(DAY);
        
    date DS1307_get(DATE);    
        
    month DS1307_get(MONTH);
        
    year DS1307_get(YEAR);
    }
    }
    }

    project: thoi gian

  • #2
    thứ 1 : đọc data thời gian từ ds1307 nên đọc 1 lần cả 6 byte ngày tháng năm giờ phút giây, vì viết như bạn thì mất đến 6 lần để khởi tạo lại bus I2C.
    thứ 2 : mình thấy nên để hàm quét led trong chuơng trình chính lun đâu cần phải dùng ngắt timer để quét.
    thứ 3 : mỗi lần ngắt timer0 bạn mới quét 1 led như vậy mỗi thời gian chỉ có 1 led sáng, sao bạn không quét tất cả led chung 1 lần như vậy sẽ sáng đều hơn.

    Comment


    • #3
      Nguyên văn bởi trimen Xem bài viết
      thứ 1 : đọc data thời gian từ ds1307 nên đọc 1 lần cả 6 byte ngày tháng năm giờ phút giây, vì viết như bạn thì mất đến 6 lần để khởi tạo lại bus I2C.
      thứ 2 : mình thấy nên để hàm quét led trong chuơng trình chính lun đâu cần phải dùng ngắt timer để quét.
      thứ 3 : mỗi lần ngắt timer0 bạn mới quét 1 led như vậy mỗi thời gian chỉ có 1 led sáng, sao bạn không quét tất cả led chung 1 lần như vậy sẽ sáng đều hơn.
      hic. Thank bác nhé! Nhưng bác có thể sửa luôn trong code cho em sao cho nó hiển thị đúng 1 chút đc ko ạ?

      Comment


      • #4
        Bài này khó hiểu quá. Nhưng mình vẫn thử sửa theo cách nghĩ của mình không biết có đựoc không. Nhưng tốt nhất bạn nên đưa mô phỏng lên đây thì hơn.
        PHP Code:
        #include<AT89X52.H>
        #include<intrins.h>

        /*
            1: Tần số lấy giờ trên 1307 là 20Hz có nghĩa là trong 1 giây tiến hành lấy giờ 20 lần
            trường hợp xấu nhất thời gian hiển thị trên đồng hồ sẽ chậm hơn so với 1307 là khoảng 5ms (mini giây).
            2: Tần số quét led là 60(fps) đảm bảo không rung giật mà tốn ít tài nguyên nhất.
            3:  Sau khi mọi thứ đã thực hiện xong nên để VSL idle có nghĩa là ngủ đợi ngắt chứ đừng quay lại chương trình chính ngay.
        */


        #define MODE P1_0
        #define UP    P1_1
        #define DOWN    P1_2
        #define SDA P3_1
        #define sda P3_1
        #define SCL P3_0
        #define scl P3_0
        #define DS1307_ID 0xD0    
        #define SEC 0x00
        #define MIN 0x01    
        #define HOUR 0x02
        #define DAY 0x03
        #define DATE 0x04
        #define MONTH 0x05
        #define YEAR 0x06
        #define Date1        P2_0
        #define Date2        P2_1
        #define Mth1        P2_2
        #define Mth2        P2_3
        #define Year1        P2_4
        #define Year2        P2_5
        #define Year3        P2_6
        #define Year4        P2_7

        #define Day1            P1_4

        #define Hour1        P3_3
        #define Hour2        P3_4
        #define Min1        P3_5
        #define Min2        P3_6
        #define Sec1        P3_7
        #define Sec2        P1_3

        #define Display_Date_Chuc \
        {\
            
        Date1 1;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Date_DV \
        {\
            
        Date1 0;\
            
        Date2 1;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Month_Chuc \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 1;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Month_DV \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 1;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Year_Nghin \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  1;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Year_Tram \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  1;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Year_Chuc \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  1;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Year_DV \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  1;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Day \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 1;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Hour_Chuc \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 1;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Hour_DV \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 1;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Min_Chuc \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 1;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Min_DV \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 1;\
            
        Sec1 0;\
            
        Sec2 0;\
        }

        #define Display_Sec_Chuc \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 1;\
            
        Sec2 0;\
        }

        #define Display_Sec_DV \
        {\
            
        Date1 0;\
            
        Date2 0;\
            
        Mth1 0;\
            
        Mth2 0;\
            
        Year1  0;\
            
        Year2  0;\
            
        Year3  0;\
            
        Year4  0;\
            
        Day1 0;\
            
        Hour1 0;\
            
        Hour2 0;\
            
        Min1 0;\
            
        Min2 0;\
            
        Sec1 0;\
            
        Sec2 1;\
        }

        unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 } ;
        unsigned char t_view,time,index,F_set,B_nhay,get_t ;
        unsigned char hour,sec,min,day,date,month,year;
        /************KHAI BAO HAM, CHUONG TRINH CON*********************************************** ********/
        void set_main(void);     // Chuong trinh khoi tao main
        void setup_timer(void);     // Chuong trinh cai dat timer 1 va 0 
        void delay(unsigned int time); // Delay
        void Fix_time(void);     // Kiem tra va hieu chinh gia tri cua gio,phut,giay
        void Keypad(void);     // Kiem tra xu ly phim nhan.    
        void T1_ISR(void);     //ngat timer 1 phuc vu nhay led
        void T0_ISR(void); // Dung ngat timer 0 de quet led

        /************CAC CHUONG TRINH CON*********************************************** ******************/
        // FOR I2C
        /************************************************** *********************/
        void I2C_start(void//Khoi dong I2C
        {
            
        scl=1;
            
        sda=1;
            
        nop2();
            
        sda=0;
            
        scl=0;
        }

        void I2C_stop(void)//Dung I2C
        {
            
        sda=0;
            
        nop2();
            
        scl=1;
            
        nop2();
            
        sda=1;
            
        nop2();
        }
        void I2C_write(unsigned char b)//Ghi du lieu vao I2C
        {
            
        unsigned char i;
            ;
            for(
        i=0;i<8;i++)
            {
                
        b<<=1;
                
        sda=CY;
                
        scl=1;
                
        nop2();
                
        scl=0;
            }
            
        scl=1;
            
        nop2();
            
        scl=0;
        }

        unsigned char I2C_read(void//Doc du lieu tu I2C
        {
            
        unsigned char ib;
            ;
            
        0x00;
            for(
        i=0;i<8;i++)
            {
                
        scl=1;
                
        b<<=1;
                
        b|=sda;
                
        scl=0;
            }
            
        nop2();
            
        sda=1;//NAck
            
        scl=1;
            
        nop2();
            
        scl=0;
            ;
            return(
        b);
        }
        /************************************************** *********************/
        // FOR DS1307
        /************************************************** *********************/

        unsigned char DS1307_get(unsigned char addr
        {
            
        unsigned int tempret;
            ;
            
        I2C_start(); /* Start i2c bus */
            
        I2C_write(DS1307_ID); /* Connect to DS1307 */
            
        I2C_write(addr);     /* Request RAM address on DS1307 */    
            
        I2C_start();     /* Start i2c bus */
            
        I2C_write(DS1307_ID+1);    /* Connect to DS1307 for Read */
            
        ret I2C_read();     /* Receive data */
            
        I2C_stop();
            
        //*********************************************
            
        temp ret;     /*BCD to HEX*/
            
        ret = (((ret/16)*10)+ (temp 0x0f));     /*for Led 7seg*/
            //*********************************************
            
        ;
            return 
        ret;    
        }

        void DS1307_Write(unsigned char addr,unsigned char dat)
        {
            
        unsigned int temp;
            ;
            
        //**********************************************     /*HEX to BCD*/
            
        temp dat ;     /*for Led 7seg*/
            
        dat = (((dat/10)*16)|(temp %10));
            
        //**********************************************    
            
        I2C_start(); /* Start i2c bus */
            
        I2C_write(DS1307_ID); /* Connect to DS1307 */
            
        I2C_write(addr);     /* Request RAM address on DS1307 */    
            
        I2C_write(dat);    /* Connect to DS1307 for Read */
            
        I2C_stop();
        }
        /************************************************** *********************/

        void delay(unsigned int time)
        {    while(
        time--); }
        void set_main(void)     // Chuong trinh khoi tao main
        {
            
        P1=0x00;
            
        P0=0xff;
            
        P2=0x00;
            
        P3=0x00;
        }

        void setup_timer(void)    // Setup timer 0 va timer 1 
        {
            
        TMOD=0x11// timer0 & timer1 set che do 1
            
        TH0=0xbeTL0=0xe5;
            
        TH1=0x3cTL1=0xaf;
            
        ET1=1ET0=1;    EA=1;
            
        TF0=0TF1=0;    TR0=1;    TR1=1;
        }

        void Fix_time(void)     // Kiem tra va hieu chinh gia tri cua gio,phut,giay
        {
            
        //Tang
            
        if(sec==60)    {sec=0;min++;    }
            if(
        min==60)    {min=0;hour++;    }
            if(
        hour==24hour=0;
            if(
        day==8day=1;
            if(
        month==2)
            {
                if((
        year%4!=0)&&(date==29))
                {
                    
        date=1;
                    
        month++;
                }
                else if(
        date==30)
                {
                    
        date=1;
                    
        month++;
                }
            }
            if(
        date==32)
            {
                
        date=1;
                
        month++;
            }
            if(
        month==13)
            {
                
        month=1;
                
        year++;
            }
            if(
        year==100)
            {
                
        year=0;
            }
            if(
        sec== -1) {sec=59;min--;}
            if(
        min== -1) {min=59;hour-- ;}
            if(
        hour== -1)hour23;
        }

        void Keypad(void)     // Kiem tra phim nhan.    

            if(!
        MODE){     //phim Set duoc nhan ?
                
        F_set++;     // Bien F_set co gia tri tu 0->2
                
        if(F_set==4)
                {
                    
        F_set=0;
                    
        DS1307_Write(0x02,hour);
                    
        DS1307_Write(0x01,min);
                    
        DS1307_Write(0x00,sec);
                }
            }
            if(
        F_set==1){     //Tang hoac giam phut neu F_set = 1
                
        if(!UP)
                    
        hour++;
                if(!
        DOWN)
                    
        hour--;
            }
            if(
        F_set==2){     //Tang hoac giam gio neu F_set = 2
                
        if(!UP)
                    
        min++;
                if(!
        DOWN)
                    
        min--;
            }
            if(
        F_set==3){     //Tang hoac giam gio neu F_set = 2
                
        if(!UP)
                    
        sec++;
                if(!
        DOWN)
                    
        sec--;
            }
            
        Fix_time();     //kiem tra tran so 
            //delay(20000);
        }

        void T1_ISR(voidinterrupt 3 //ngat timer 1 chay dong ho

            
        //TR1=0;
            //TF1=0;
            
        TH1=0x3c// nap lai gia tri cho thanh ghi 
            
        TL1=0xaf;
            
        time++;    
            if(
        time==10)
            {
                
        time=0;
                
        B_nhay++;
                
        get_t=1;
                if(
        B_nhay==2)
                    
        B_nhay=0;
            }
            
        //TR1=1;
        }    
        /*************************************/
        void T0_ISR(voidinterrupt 1     // Dung ngat timer 0 de quet led
        {
            
        //TR0=0;
            //TF0=0;
            
        TH0=0xbe;//-1000/256; // Nap lai gia tri cho thanh ghi 
            
        TL0=0xe5;//-1000%256;
            //giay
            
        switch(index)    
            {
                case 
        0:
                    if(
        F_set==&& B_nhay==1)
                    {
                        
        index+=2;
                    }
                    else
                    {
                        
        t_view=sec;
                        
        P0=0xff;
                        
        Display_Sec_DV;
                        
        P0=led7_data[t_view%10];
                    }
                break;
               
                case 
        1:
                    
        P0=0xff;
                    
        Display_Sec_Chuc;
                    
        P0=led7_data[t_view/10]; 
                break;
               
                case 
        2:
                    if(
        F_set==&& B_nhay==1)
                    {
                        
        index+=2;
                    }
                    else
                    {    
                        
        t_view=min;
                        
        P0=0xff;
                        
        Display_Min_DV;
                        
        P0=led7_data[t_view%10];
                    }
                break;
               
                case 
        3:
                    
        P0=0xff;
                    
        Display_Min_Chuc;
                    
        P0=led7_data[t_view/10];    
                break;
               
                case 
        4:
                    if(
        F_set==&& B_nhay==1)
                    {
                        
        index+=2;
                    }
                    else
                    { 
                        
        t_view=hour;
                        
        P0=0xff;
                        
        Display_Hour_DV;
                        
        P0=led7_data[t_view%10];    
                    }
                break;
               
                case 
        5:
                    
        P0=0xff;
                    
        Display_Hour_Chuc;//00000001
                    
        P0=led7_data[t_view/10]; 
                break;
               
                case 
        6:
                    if(
        F_set==&& B_nhay==1)
                    {
                        
        index+=4;
                    }
                    else
                    {
                        
        t_view=year;
                        
        P0=0xff;
                        
        Display_Year_DV;//00000001
                        
        P0=led7_data[t_view%10]; 
                    }
                break;
               
                case 
        7
                    
        P0=0xff;
                    
        Display_Year_Chuc;//00000001
                    
        P0=led7_data[t_view/10]; 
                break;
               
                case 
        8:
                    
        P0=0xff;
                    
        Display_Year_Tram;//00000001
                    
        P0=led7_data[0]; 
                break;
               
                case 
        9:
                    
        P0=0xff;
                    
        Display_Year_Nghin;//00000001
                    
        P0=led7_data[2]; 
                break;
               
                case 
        10:
                    if(
        F_set==&& B_nhay==1)
                    {
                        
        index+=2;
                    }
                    else
                    {
                        
        t_view=month;
                        
        P0=0xff;
                        
        Display_Month_DV;//00000001
                        
        P0=led7_data[t_view%10]; 
                    }
                break;
               
                case 
        11:
                    
        P0=0xff
                    
        Display_Month_Chuc;
                    
        P0=led7_data[t_view/10]; 
                break;
                   
                case 
        12:
                    if (
        F_set==&& B_nhay==1)
                    {
                        
        index+=2;
                    } 
                    else
                    {
                        
        t_view=date;
                        
        P0=0xff;
                        
        Display_Date_DV;//00000001
                        
        P0=led7_data[t_view%10]; 
                    }
                break;
               
                case 
        13:
                    
        P0=0xff;
                    
        Display_Date_Chuc;//00000001
                    
        P0=led7_data[t_view/10]; 
                break;
               
                case 
        14:
                    
        t_view=day;
                    
        P0=0xff;
                    
        Display_Day;//00000001
                    
        P0=led7_data[t_view%10];     
                break;
            }
            
        index++;
            if(
        index>14)
                
        index=0;
            
        //TR0=1;
        }
        void main()
        {    
            
        time=index=0;
            
        hour=0;
            
        min=0;
            
        sec=0;
            
        F_set=0;
            
        get_t=0;
            
        setup_timer();
            while(
        1)
            { 
                
        Keypad();
                if(
        F_set==0)
                {
                    if(
        get_t == 1)
                    {    
                        
        get_t 0;
                        
        sec DS1307_get(SEC);
                        
        min DS1307_get(MIN);    
                        
        hour DS1307_get(HOUR);
                        
        day DS1307_get(DAY);
                        
        date DS1307_get(DATE);    
                        
        month DS1307_get(MONTH);
                        
        year DS1307_get(YEAR);
                    }
                }
                
        PCON=IDL_;
            }

        Comment


        • #5
          Bài này khó hiểu quá. Nhưng mình vẫn thử sửa theo cách nghĩ của mình không biết có đựoc không. Nhưng tốt nhất bạn nên đưa mô phỏng lên đây thì hơn.
          PHP Code:
          #include<AT89X52.H>
          #include<intrins.h>

          /*
              1: Tần số lấy giờ trên 1307 là 20Hz có nghĩa là trong 1 giây tiến hành lấy giờ 20 lần
              trường hợp xấu nhất thời gian hiển thị trên đồng hồ sẽ chậm hơn so với 1307 là khoảng 5ms (mini giây).
              2:  Sau khi mọi thứ đã thực hiện xong nên để VSL idle có nghĩa là ngủ đợi ngắt chứ đừng quay lại chương trình chính ngay.
          */


          #define MODE P1_0
          #define UP    P1_1
          #define DOWN    P1_2
          #define SDA P3_1
          #define sda P3_1
          #define SCL P3_0
          #define scl P3_0
          #define DS1307_ID 0xD0    
          #define SEC 0x00
          #define MIN 0x01    
          #define HOUR 0x02
          #define DAY 0x03
          #define DATE 0x04
          #define MONTH 0x05
          #define YEAR 0x06
          #define Date1        P2_0
          #define Date2        P2_1
          #define Mth1        P2_2
          #define Mth2        P2_3
          #define Year1        P2_4
          #define Year2        P2_5
          #define Year3        P2_6
          #define Year4        P2_7

          #define Day1            P1_4

          #define Hour1        P3_3
          #define Hour2        P3_4
          #define Min1        P3_5
          #define Min2        P3_6
          #define Sec1        P3_7
          #define Sec2        P1_3

          #define Display_Date_Chuc \
          {\
              
          Date1 1;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Date_DV \
          {\
              
          Date1 0;\
              
          Date2 1;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Month_Chuc \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 1;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Month_DV \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 1;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Year_Nghin \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  1;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Year_Tram \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  1;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Year_Chuc \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  1;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Year_DV \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  1;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Day \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 1;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Hour_Chuc \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 1;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Hour_DV \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 1;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Min_Chuc \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 1;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Min_DV \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 1;\
              
          Sec1 0;\
              
          Sec2 0;\
          }

          #define Display_Sec_Chuc \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 1;\
              
          Sec2 0;\
          }

          #define Display_Sec_DV \
          {\
              
          Date1 0;\
              
          Date2 0;\
              
          Mth1 0;\
              
          Mth2 0;\
              
          Year1  0;\
              
          Year2  0;\
              
          Year3  0;\
              
          Year4  0;\
              
          Day1 0;\
              
          Hour1 0;\
              
          Hour2 0;\
              
          Min1 0;\
              
          Min2 0;\
              
          Sec1 0;\
              
          Sec2 1;\
          }

          unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 } ;
          unsigned char t_view,time,index,F_set,B_nhay,get_t ;
          unsigned char hour,sec,min,day,date,month,year;
          /************KHAI BAO HAM, CHUONG TRINH CON*********************************************** ********/
          void set_main(void);     // Chuong trinh khoi tao main
          void setup_timer(void);     // Chuong trinh cai dat timer 1 va 0 
          void delay(unsigned int time); // Delay
          void Fix_time(void);     // Kiem tra va hieu chinh gia tri cua gio,phut,giay
          void Keypad(void);     // Kiem tra xu ly phim nhan.    
          void T1_ISR(void);     //ngat timer 1 phuc vu nhay led
          void T0_ISR(void); // Dung ngat timer 0 de quet led

          /************CAC CHUONG TRINH CON*********************************************** ******************/
          // FOR I2C
          /************************************************** *********************/
          void I2C_start(void//Khoi dong I2C
          {
              
          scl=1;
              
          sda=1;
              
          nop2();
              
          sda=0;
              
          scl=0;
          }

          void I2C_stop(void)//Dung I2C
          {
              
          sda=0;
              
          nop2();
              
          scl=1;
              
          nop2();
              
          sda=1;
              
          nop2();
          }
          void I2C_write(unsigned char b)//Ghi du lieu vao I2C
          {
              
          unsigned char i;
              ;
              for(
          i=0;i<8;i++)
              {
                  
          b<<=1;
                  
          sda=CY;
                  
          scl=1;
                  
          nop2();
                  
          scl=0;
              }
              
          scl=1;
              
          nop2();
              
          scl=0;
          }

          unsigned char I2C_read(void//Doc du lieu tu I2C
          {
              
          unsigned char ib;
              ;
              
          0x00;
              for(
          i=0;i<8;i++)
              {
                  
          scl=1;
                  
          b<<=1;
                  
          b|=sda;
                  
          scl=0;
              }
              
          nop2();
              
          sda=1;//NAck
              
          scl=1;
              
          nop2();
              
          scl=0;
              ;
              return(
          b);
          }
          /************************************************** *********************/
          // FOR DS1307
          /************************************************** *********************/

          unsigned char DS1307_get(unsigned char addr
          {
              
          unsigned int tempret;
              ;
              
          I2C_start(); /* Start i2c bus */
              
          I2C_write(DS1307_ID); /* Connect to DS1307 */
              
          I2C_write(addr);     /* Request RAM address on DS1307 */    
              
          I2C_start();     /* Start i2c bus */
              
          I2C_write(DS1307_ID+1);    /* Connect to DS1307 for Read */
              
          ret I2C_read();     /* Receive data */
              
          I2C_stop();
              
          //*********************************************
              
          temp ret;     /*BCD to HEX*/
              
          ret = (((ret/16)*10)+ (temp 0x0f));     /*for Led 7seg*/
              //*********************************************
              
          ;
              return 
          ret;    
          }

          void DS1307_Write(unsigned char addr,unsigned char dat)
          {
              
          unsigned int temp;
              ;
              
          //**********************************************     /*HEX to BCD*/
              
          temp dat ;     /*for Led 7seg*/
              
          dat = (((dat/10)*16)|(temp %10));
              
          //**********************************************    
              
          I2C_start(); /* Start i2c bus */
              
          I2C_write(DS1307_ID); /* Connect to DS1307 */
              
          I2C_write(addr);     /* Request RAM address on DS1307 */    
              
          I2C_write(dat);    /* Connect to DS1307 for Read */
              
          I2C_stop();
          }
          /************************************************** *********************/

          void delay(unsigned int time)
          {    while(
          time--); }
          void set_main(void)     // Chuong trinh khoi tao main
          {
              
          P1=0x00;
              
          P0=0xff;
              
          P2=0x00;
              
          P3=0x00;
          }

          void setup_timer(void)    // Setup timer 0 va timer 1 
          {
              
          TMOD=0x11// timer0 & timer1 set che do 1
              
          TH0=0xfcTL0=0x18;
              
          TH1=0x3cTL1=0xaf;
              
          ET1=1ET0=1;    EA=1;
              
          TF0=0TF1=0;    TR0=1;    TR1=1;
          }

          void Fix_time(void)     // Kiem tra va hieu chinh gia tri cua gio,phut,giay
          {
              
          //Tang
              
          if(sec==60)    {sec=0;min++;    }
              if(
          min==60)    {min=0;hour++;    }
              if(
          hour==24hour=0;
              if(
          day==8day=1;
              if(
          month==2)
              {
                  if((
          year%4!=0)&&(date==29))
                  {
                      
          date=1;
                      
          month++;
                  }
                  else if(
          date==30)
                  {
                      
          date=1;
                      
          month++;
                  }
              }
              if(
          date==32)
              {
                  
          date=1;
                  
          month++;
              }
              if(
          month==13)
              {
                  
          month=1;
                  
          year++;
              }
              if(
          year==100)
              {
                  
          year=0;
              }
              if(
          sec== -1) {sec=59;min--;}
              if(
          min== -1) {min=59;hour-- ;}
              if(
          hour== -1)hour23;
          }

          void Keypad(void)     // Kiem tra phim nhan.    

              if(!
          MODE){     //phim Set duoc nhan ?
                  
          F_set++;     // Bien F_set co gia tri tu 0->2
                  
          if(F_set==4)
                  {
                      
          F_set=0;
                      
          DS1307_Write(0x02,hour);
                      
          DS1307_Write(0x01,min);
                      
          DS1307_Write(0x00,sec);
                  }
              }
              if(
          F_set==1){     //Tang hoac giam phut neu F_set = 1
                  
          if(!UP)
                      
          hour++;
                  if(!
          DOWN)
                      
          hour--;
              }
              if(
          F_set==2){     //Tang hoac giam gio neu F_set = 2
                  
          if(!UP)
                      
          min++;
                  if(!
          DOWN)
                      
          min--;
              }
              if(
          F_set==3){     //Tang hoac giam gio neu F_set = 2
                  
          if(!UP)
                      
          sec++;
                  if(!
          DOWN)
                      
          sec--;
              }
              
          Fix_time();     //kiem tra tran so 
              //delay(20000);
          }

          void T1_ISR(voidinterrupt 3 //ngat timer 1 chay dong ho

              
          //TR1=0;
              //TF1=0;
              
          TH1=0x3c// nap lai gia tri cho thanh ghi 
              
          TL1=0xaf;
              
          time++;    
              if(
          time==10)
              {
                  
          time=0;
                  
          B_nhay++;
                  
          get_t=1;
                  if(
          B_nhay==2)
                      
          B_nhay=0;
              }
              
          //TR1=1;
          }    
          /*************************************/
          void T0_ISR(voidinterrupt 1     // Dung ngat timer 0 de quet led
          {
              
          //TR0=0;
              //TF0=0;
              
          TH0=0xfc;//-1000/256; // Nap lai gia tri cho thanh ghi 
              
          TL0=0x18;//-1000%256;
              //giay
              
          switch(index)    
              {
                  case 
          0:
                      if(
          F_set==&& B_nhay==1)
                      {
                          
          index+=2;
                      }
                      else
                      {
                          
          t_view=sec;
                          
          P0=0xff;
                          
          Display_Sec_DV;
                          
          P0=led7_data[t_view%10];
                      }
                  break;
                 
                  case 
          1:
                      
          P0=0xff;
                      
          Display_Sec_Chuc;
                      
          P0=led7_data[t_view/10]; 
                  break;
                 
                  case 
          2:
                      if(
          F_set==&& B_nhay==1)
                      {
                          
          index+=2;
                      }
                      else
                      {    
                          
          t_view=min;
                          
          P0=0xff;
                          
          Display_Min_DV;
                          
          P0=led7_data[t_view%10];
                      }
                  break;
                 
                  case 
          3:
                      
          P0=0xff;
                      
          Display_Min_Chuc;
                      
          P0=led7_data[t_view/10];    
                  break;
                 
                  case 
          4:
                      if(
          F_set==&& B_nhay==1)
                      {
                          
          index+=2;
                      }
                      else
                      { 
                          
          t_view=hour;
                          
          P0=0xff;
                          
          Display_Hour_DV;
                          
          P0=led7_data[t_view%10];    
                      }
                  break;
                 
                  case 
          5:
                      
          P0=0xff;
                      
          Display_Hour_Chuc;//00000001
                      
          P0=led7_data[t_view/10]; 
                  break;
                 
                  case 
          6:
                      if(
          F_set==&& B_nhay==1)
                      {
                          
          index+=4;
                      }
                      else
                      {
                          
          t_view=year;
                          
          P0=0xff;
                          
          Display_Year_DV;//00000001
                          
          P0=led7_data[t_view%10]; 
                      }
                  break;
                 
                  case 
          7
                      
          P0=0xff;
                      
          Display_Year_Chuc;//00000001
                      
          P0=led7_data[t_view/10]; 
                  break;
                 
                  case 
          8:
                      
          P0=0xff;
                      
          Display_Year_Tram;//00000001
                      
          P0=led7_data[0]; 
                  break;
                 
                  case 
          9:
                      
          P0=0xff;
                      
          Display_Year_Nghin;//00000001
                      
          P0=led7_data[2]; 
                  break;
                 
                  case 
          10:
                      if(
          F_set==&& B_nhay==1)
                      {
                          
          index+=2;
                      }
                      else
                      {
                          
          t_view=month;
                          
          P0=0xff;
                          
          Display_Month_DV;//00000001
                          
          P0=led7_data[t_view%10]; 
                      }
                  break;
                 
                  case 
          11:
                      
          P0=0xff
                      
          Display_Month_Chuc;
                      
          P0=led7_data[t_view/10]; 
                  break;
                     
                  case 
          12:
                      if (
          F_set==&& B_nhay==1)
                      {
                          
          index+=2;
                      } 
                      else
                      {
                          
          t_view=date;
                          
          P0=0xff;
                          
          Display_Date_DV;//00000001
                          
          P0=led7_data[t_view%10]; 
                      }
                  break;
                 
                  case 
          13:
                      
          P0=0xff;
                      
          Display_Date_Chuc;//00000001
                      
          P0=led7_data[t_view/10]; 
                  break;
                 
                  case 
          14:
                      
          t_view=day;
                      
          P0=0xff;
                      
          Display_Day;//00000001
                      
          P0=led7_data[t_view%10];     
                  break;
              }
              
          index++;
              if(
          index>14)
                  
          index=0;
              
          //TR0=1;
          }
          void main()
          {    
              
          time=index=0;
              
          hour=0;
              
          min=0;
              
          sec=0;
              
          F_set=0;
              
          get_t=0;
              
          setup_timer();
              while(
          1)
              { 
                  
          Keypad();
                  if(
          F_set==0)
                  {
                      if(
          get_t == 1)
                      {    
                          
          get_t 0;
                          
          sec DS1307_get(SEC);
                          
          min DS1307_get(MIN);    
                          
          hour DS1307_get(HOUR);
                          
          day DS1307_get(DAY);
                          
          date DS1307_get(DATE);    
                          
          month DS1307_get(MONTH);
                          
          year DS1307_get(YEAR);
                      }
                  }
                  
          PCON=IDL_;
              }

          Comment


          • #6
            bác làm cái mạch thật cho real, mô phỏng chưa chính xác đâu bác à.

            Comment


            • #7
              Nguyên văn bởi myth-coder Xem bài viết
              Bài này khó hiểu quá. Nhưng mình vẫn thử sửa theo cách nghĩ của mình không biết có đựoc không. Nhưng tốt nhất bạn nên đưa mô phỏng lên đây thì hơn.
              Vẫn chưa được bác ạ. Bác xem thế nào sửa lại cho e phát nữa nhé, mô phỏng e đã gửi ở đầu rồi mà.
              Nếu bác không thấy thì đây, e gửi bác cả project luôn:
              http://www.mediafire.com/download/39.../thoi+gian.rar

              Comment


              • #8
                mình có cái mô sơ đồ mạch + code C chạy tốt trên mạch thật (trên kit của mình). code này mình tham khảo trên internet, nhưng không nhớ nguồn cụ thể.
                bạn tham khảo nhé:
                // Chuc nang cua chuong trinh: Dung DS1307 dem thoi gian va hien thi tren text LCD, chinh gio bang SW1, SW2 va SW3
                // Ket noi day:
                // LCD :
                // Port data cua LCD (D1-D7) ----> Port 2 cua 8051
                // RS cua LCD ----> P3.7 cua 8051
                // RW cua LCD ----> P3.6 cua 8051
                // EN cua LCD ----> P3.5 cua 8051
                // DS1307 :
                // SCL cua DS1307 ----> P1.0 cua 8051
                // SDA cua DS1307 ----> P1.1 cua 8051
                // Nut nhan don (khi nhấn thì output từ nút nhần chuyển từ 1 sang 0 nhé):
                // SW1 ----> P3.0 cua 8051: chinh giam
                // SW2 ----> P3.1 cua 8051: chinh tang
                // SW3 ----> P3.2 cua 8051: chinh mode
                #include <AT89X51.H>
                #include <INTRINS.H>


                #define sda P1_1
                #define scl P1_0
                #define rs P3_7
                #define rw P3_6
                #define en P3_5
                #define menu P3_2
                #define tang P3_1
                #define giam P3_0
                #define congLCD P2
                #define D7 P2_7

                unsigned char *rtc[]={"0","1","2","3","4","5","6","7","8","9"};
                unsigned char *day[]={"CNhat","Thu 2","Thu 3","Thu 4","Thu 5","Thu 6","Thu 7"};
                unsigned char giatrikhoitao_rtc[8];


                void busy()
                {
                D7=1;
                rs=0;
                rw=1;
                while(D7!=0)
                {
                en=0;
                en=1;
                }
                }

                void ghilenhLCD(unsigned char x)
                {
                busy();
                congLCD=x;
                rs=0;
                rw=0;
                en=1;
                en=0;
                }

                void khoitaoLCD(void)
                {
                ghilenhLCD(0X38);
                ghilenhLCD(0X0C);
                ghilenhLCD(0X01);
                ghilenhLCD(0X06);
                }

                void ghi_kytu(unsigned char value)
                {
                busy();
                congLCD=value;
                rs=1;
                rw=0;
                en=1;
                en=0;
                }

                void ghi_chuoi(unsigned char *string)
                {
                unsigned char i;
                for(i=0;string[i]!='\0';i++)
                ghi_kytu(string[i]);
                }


                void ghiso(unsigned char a)
                {
                unsigned char i;
                i=a/10;
                ghi_chuoi(rtc[i]);
                i=a%10;
                ghi_chuoi(rtc[i]);
                }

                void hienthi_dulieu_rtc(unsigned char x)
                {
                unsigned char temp;
                temp = x/16;
                ghi_chuoi(rtc[temp]);
                temp = x%16;
                ghi_chuoi(rtc[temp]);
                }



                void start_rtc(void)
                {
                scl=1;
                sda=1;
                _nop_();
                _nop_();
                sda=0;
                scl=0;
                }

                void stop_rtc(void)
                {
                sda=0;
                scl=1;
                _nop_();
                _nop_();
                sda=1;
                }

                void gui_rtc(unsigned char x)
                {
                unsigned char i;
                for(i=0;i<8;i++)
                {
                sda=(x&0x80)? 1:0;
                scl=1;
                _nop_();
                _nop_();
                scl=0;
                x<<=1;
                }
                scl=1;
                _nop_();
                _nop_();
                scl=0;
                }

                unsigned char nhan_rtc(void)
                {
                unsigned char Data,i;
                for(i=0;i<8;i++)
                {
                scl=1;
                Data<<=1;
                Data=Data|sda;
                scl=0;
                }
                sda=1;
                scl=1;
                _nop_();
                scl=0;
                _nop_();
                return Data;
                }

                char docdulieu(unsigned char diachi)
                {
                unsigned char Data;
                start_rtc();
                gui_rtc(0xd0);
                gui_rtc(diachi);
                start_rtc();
                gui_rtc(0xd1);
                Data=nhan_rtc();
                stop_rtc();
                return Data;
                }

                void ghivaoDS1307(void)
                {
                unsigned char t;
                for(t=0;t<9;t++)
                {
                start_rtc();
                gui_rtc(0xd0);
                gui_rtc(t);
                gui_rtc(giatrikhoitao_rtc[t]);
                stop_rtc();
                }

                }



                void hienthi_rtc(void)

                {
                ghilenhLCD(0xca);
                hienthi_dulieu_rtc(docdulieu(0));
                ghilenhLCD(0xc7);
                hienthi_dulieu_rtc(docdulieu(1));
                ghi_kytu(':');
                ghilenhLCD(0xc4);
                hienthi_dulieu_rtc(docdulieu(2));
                ghi_kytu(':');
                ghilenhLCD(0x80);
                ghi_chuoi(day[docdulieu(3)-1]);
                ghi_kytu(',');
                ghilenhLCD(0x86);
                hienthi_dulieu_rtc(docdulieu(4));
                ghi_kytu('-');
                hienthi_dulieu_rtc(docdulieu(5));
                ghi_chuoi("-20");
                hienthi_dulieu_rtc(docdulieu(6));
                }


                void delay(long time)
                {
                while(time--)
                {
                TMOD=0x01;
                TH0=0xFC;TL0=0x67;
                TR0=1;
                while(TF0!=1){};
                TF0=0;
                TR0=0;}
                }


                unsigned char bcd_dec(unsigned char bcd)
                {
                return((bcd/16)*10+(bcd%16));
                }

                unsigned char dec_bcd(unsigned char dec)
                {
                return((dec/10)*16+(dec%10));
                }

                void caidat_rtc()
                {
                unsigned char giay,phut,gio,thu,ngay,thang,nam;
                giay = bcd_dec(docdulieu(0)&0x7f);
                phut = bcd_dec(docdulieu(1));
                gio = bcd_dec(docdulieu(2)& 0x3f);
                thu = bcd_dec(docdulieu(3));
                ngay = bcd_dec(docdulieu(4));
                thang = bcd_dec(docdulieu(5));
                nam = bcd_dec(docdulieu(6));

                ghilenhLCD(1);
                ghi_chuoi("CHINH");
                ghi_chuoi(" GIO :");
                ghilenhLCD(0x0e);
                ghilenhLCD(0xc4);
                ghiso(gio);
                ghi_kytu(':');
                ghiso(phut);
                ghi_kytu(':');
                ghiso(giay);

                ghilenhLCD(0xC5);
                while(menu==0);
                caidatgio:while(tang!=0 && giam!=0 && menu!=0);
                if(tang==0)
                {
                gio++;
                if(gio==24) gio=0;
                ghilenhLCD(0xC4);
                ghiso(gio);
                ghilenhLCD(0xC5);
                delay(300);
                goto caidatgio; }
                if(giam==0)
                {
                gio--;
                if(gio==0xff) gio=23;
                ghilenhLCD(0xC4);
                ghiso(gio);
                ghilenhLCD(0xC5);
                delay(300);
                goto caidatgio;}


                while(menu==0);
                ghilenhLCD(0xC8);
                caidatphut: while(tang!=0 && giam!=0 && menu!=0);
                if(tang==0)
                {
                phut++;
                if(phut==60) phut=0;
                ghilenhLCD(0xC7);
                ghiso(phut);
                ghilenhLCD(0x10);
                delay(300);
                goto caidatphut;}
                if(giam==0)
                {
                phut--;
                if(phut==0xff) phut=59;
                ghilenhLCD(0xC7);
                ghiso(phut);
                ghilenhLCD(0x10);
                delay(300);
                goto caidatphut;
                }


                while(menu==0);
                ghilenhLCD(0xCB);
                caidatgiay: while(tang!=0 && giam!=0 && menu!=0);
                if(tang==0)
                {
                giay++;
                if(giay==60) giay=0;
                ghilenhLCD(0xCA);
                ghiso(giay);
                ghilenhLCD(0xCB);
                delay(100);
                goto caidatgiay;
                }
                if(giam==0)
                {
                giay--;
                if(giay==0xff) giay=59;
                ghilenhLCD(0xCA);
                ghiso(giay);
                ghilenhLCD(0xCB);
                delay(100);
                goto caidatgiay;
                }



                while(menu==0);
                ghilenhLCD(1);
                ghi_chuoi("CHINH NGAY :");
                ghilenhLCD(0xc4);
                ghiso(ngay);
                ghi_kytu('-');
                ghiso(thang);
                ghi_chuoi("-20");
                ghiso(nam);

                ghilenhLCD(0xc5);
                caidatngay:while (tang!=0 && giam!=0 && menu!=0);
                if(tang==0)
                {
                ngay++;
                if(ngay==32) ngay=1;
                ghilenhLCD(0xC4);
                ghiso(ngay);
                ghilenhLCD(0x10);
                delay(300);
                goto caidatngay;
                }

                if(giam==0)
                {
                ngay--;
                if(ngay==0) ngay=31;
                ghilenhLCD(0xC4);
                ghiso(ngay);
                ghilenhLCD(0x10);
                delay(300);
                goto caidatngay;
                }


                while(menu==0);
                ghilenhLCD(0xC8);
                caidatthang:while(tang!=0 && giam!=0 && menu!=0);
                if(tang==0)
                {
                thang++;
                if(thang==13) thang=1;
                ghilenhLCD(0xC7);
                ghiso(thang);
                ghilenhLCD(0x10);
                delay(300);
                goto caidatthang;
                }
                if(giam==0)
                {
                thang--;
                if(thang==0) thang=12;
                ghilenhLCD(0xC7);
                ghiso(thang);
                ghilenhLCD(0x10);
                delay(300);
                goto caidatthang;
                }


                while(menu==0);
                ghilenhLCD(0xCD);
                caidatnam:while(tang!=0 && giam!=0 && menu!=0);
                if(tang==0)
                {
                nam++;
                if(nam==100) nam=0;
                ghilenhLCD(0xCC);
                ghiso(nam);
                ghilenhLCD(0xCD);
                delay(300);
                goto caidatnam;
                }

                if(giam==0)
                {
                nam--;
                if(nam==0xff) nam=99;
                ghilenhLCD(0xCC);
                ghiso(nam);
                ghilenhLCD(0xCD);
                delay(300);
                goto caidatnam;
                }



                while(menu==0);
                ghilenhLCD(1);
                ghi_chuoi("CHINH THU :");
                ghilenhLCD(0xc4);
                ghi_chuoi(day[thu-1]);
                caidatthu:while(tang!=0 && giam!=0 && menu!=0);
                if(tang==0)
                { thu++;
                if(thu==8) thu=1;
                ghilenhLCD(0xC4);
                ghi_chuoi(day[thu-1]);
                delay(300);
                goto caidatthu;
                }

                if(giam==0)
                { thu--;
                if(thu==0) thu=7;
                ghilenhLCD(0xC4);
                ghi_chuoi(day[thu-1]);
                delay(300);
                goto caidatthu;
                }

                while(menu==0);
                ghilenhLCD(1);
                ghilenhLCD(0x0C);

                giatrikhoitao_rtc[0] = dec_bcd(giay);
                giatrikhoitao_rtc[1] = dec_bcd(phut);
                giatrikhoitao_rtc[2] = dec_bcd(gio);
                giatrikhoitao_rtc[3] = dec_bcd(thu);
                giatrikhoitao_rtc[4] = dec_bcd(ngay);
                giatrikhoitao_rtc[5] = dec_bcd(thang);
                giatrikhoitao_rtc[6] = dec_bcd(nam);
                giatrikhoitao_rtc[7] = 0x00;
                giatrikhoitao_rtc[8] = 'c';

                ghivaoDS1307();
                ghilenhLCD(1);


                }



                void kiemtra_rtc(void)
                {
                unsigned char temp;
                start_rtc();
                gui_rtc(0xd0);
                gui_rtc(0x08);
                start_rtc();
                gui_rtc(0xd1);
                temp=nhan_rtc();
                stop_rtc();
                if(temp!='c')
                {
                giatrikhoitao_rtc[0]=0x50;
                giatrikhoitao_rtc[1]=0x59;
                giatrikhoitao_rtc[2]=0x09;
                giatrikhoitao_rtc[3]=0x04;
                giatrikhoitao_rtc[4]=0x04;
                giatrikhoitao_rtc[5]=0x05;
                giatrikhoitao_rtc[6]=0x11;
                giatrikhoitao_rtc[7]=0x00;
                giatrikhoitao_rtc[8]='c';
                ghivaoDS1307();
                }
                }

                void doccacdulieu(void){ int i;
                for(i=0;i<=6;i++){docdulieu(i);} }


                bit co=0;
                void caidatco() interrupt 0
                {
                co=1;
                }
                void main()
                {
                khoitaoLCD();
                ghilenhLCD(0x80);
                ghi_chuoi("TEST RTC DS1307");
                ghilenhLCD(0xc0);
                ghi_chuoi("BY LEKTEKNIK COR");
                delay(4000);

                ghilenhLCD(1);
                kiemtra_rtc();
                IE=0x81;
                doccacdulieu();
                while(1)
                { doccacdulieu();
                hienthi_rtc();
                if(co==1)
                {
                caidat_rtc();
                co=0;
                }

                }
                }

                Comment


                • #9
                  Thank bác nhé nhưng e đang làm đồ án tốt nghiệp nên cần mô phỏng chạy bằng led 7seg các bác ạ, sắp phải bảo vệ rồi.

                  Comment


                  • #10
                    Bạn sắp xếp lại các chân quét led 7 đoạn mình code giúp phần hiển thị. Sắp xếp những chân quét cho nó tuần tự nhau ấy. Hoặc không thì mình sẽ demo cách quét của mình bạn sửa theo cũng được vậy. mình sẽ demo với 16 con led 7 đoạn tần số quét cho mỗi con là 25Hz.

                    Comment


                    • #11
                      Hoặc nếu chưa làm mạch in, bạn có thể sửa sơ đồ đó lại, chỉ cần dùng 8 chân chọn đoạn, 10 chân chọn led là có thể quét được max là 16 led 7 đoạn đấy, không nhất thiết phải quá nhiều chân đâu, linh kiện thì chỉ thêm 2 em tranzitor so với trước đó của bạn chứ không hơn bao nhiêu nhưng được cái là tiết kiệm chân vsl. với lại bạn nên hàn SQW/out của 1307 vào 1 trong 2 chân ngắt ngoài thì ổn hơn đấy, nếu làm đựoc thì mình sẽ hướng dẫn cách điều khiển.

                      Comment


                      • #12
                        Đây là cách quét và làm mạch hiển thị như mình nói, gọn nhẹ lắm, dễ dàng lắm, bạn tham khảo nhé, chứ nhìn cái code của bạn ngán quá. Vì mình dùng các quét theo bank nên có thể mô phỏng chạy chưa chuẩn nhưng ra mạch thực tế mình chắc chắn nó chạy được. Còn nếu không dùng quét theo bank thì bạn có thể để chân quét led nó tuần tự để quét thì code sẽ gọn nhẹ hơn và dễ hiểu hơn là quét dải rác.

                        Comment


                        • #13
                          Nguyên văn bởi myth-coder Xem bài viết
                          Đây là cách quét và làm mạch hiển thị như mình nói, gọn nhẹ lắm, dễ dàng lắm, bạn tham khảo nhé, chứ nhìn cái code của bạn ngán quá. Vì mình dùng các quét theo bank nên có thể mô phỏng chạy chưa chuẩn nhưng ra mạch thực tế mình chắc chắn nó chạy được. Còn nếu không dùng quét theo bank thì bạn có thể để chân quét led nó tuần tự để quét thì code sẽ gọn nhẹ hơn và dễ hiểu hơn là quét dải rác.
                          Nên làm thế nào bác giúp em với. Bác có facebook không ạ?

                          Comment


                          • #14
                            Nguyên văn bởi tranzitor91 Xem bài viết
                            Nên làm thế nào bác giúp em với. Bác có facebook không ạ?
                            ahready2shine
                            Bạn đã làm phần cứng chưa? nếu chưa là thì làm theo cách mình nói -> tiết kiệm $ cho khoản linh kiện và cũng tiết kiệm chân VSL. còn nếu làm rồi thì câu lại mahjc xíu, cho cái chân SQW/out vào chân ngắt ngoài nào đó lập trình cho dễ.

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X