Welcome & Happy Holidays!
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Jan 2016
    Bài viết
    0

    Giúp tạo thêm hiệu ứng cho LCD 20X4 hiển thị giờ-phút-giây

    chào mọi người.mình có viết đoạn code lập trình cho LCD 20X4 hiển thị giờhút:giây và có phím bấm chỉnh giờ như sau:MOD-chọn chế độ chỉnh giây,phút hay giờ..phím UP-tăng thời gian.Phím DW-giảm thời gian..về phần này mình viết dc rồi nhưng mình muốn có thêm điều kiện là khi nhấn MOD (bất kỳ ở chế độ chỉnh nào) thì nếu ko nhấn khoản 10s thì tự động MOD=0 và đồng hồ lại tự động đếm như chưa nhấn MOD.
    Trong đoạn code mình không liệt kê các hàm mình tạo sẵng vì sẽ rất dài.Ý tưởng của mình là dùng timer0 để đếm.khi timer0 đếm thì timer1 dừng đếm nhưng không biết đặt vào dòng lệnh ntn cả!Xin các bạn góp ý.
    dưới đây là đoạn code của mình!
    #include <TV_P89V51RD2_SHIFT.C>
    #include <TV_P89V51RD2_LCD.C>
    const unsigned char code HANG1[20]={"*SU PHAM KY THUAT"};
    const unsigned char code HANG2[20]={"DONG HO: "};
    unsigned char j,GIAY=0,PHUT=0,BDN=0,GIO=0,GT_MOD=0;
    void timer1_interrupt() interrupt 3 using 0
    {
    BDN++;TH1=0X4B;TL1=0XB0;
    }
    void HIENTHI_CLOCK()
    {
    LCD_COMMAND(ADDR_LINE2+10);
    LCD_DATA(GT_MOD+0X30);

    LCD_DATA(':');
    LCD_DATA(GIO/10+0X30);
    LCD_DATA(GIO%10+0X30);

    LCD_DATA(':');
    LCD_DATA(PHUT/10+0X30);
    LCD_DATA(PHUT%10+0X30);

    LCD_DATA(':');
    LCD_DATA(GIAY/10+0X30);
    LCD_DATA(GIAY%10+0X30);
    }
    //******************************

    void PHIM_UP()
    {
    if(!UP)
    {
    DELAY_MS(20);
    if(!UP)
    {
    switch(GT_MOD)
    {
    case 1: if(GIAY==59)GIAY=0;
    else GIAY++;
    break;
    case 2: if(PHUT==59)PHUT=0;
    else PHUT++;
    break;
    case 3: if(GIO==23)GIO=0;
    else GIO++;
    break;
    default:break;
    }
    HIENTHI_CLOCK();
    DELAY_MS(100);
    }
    }
    }
    //***************************X

    void PHIM_DW()
    {
    if(!DW)
    {
    DELAY_MS(20);
    if(!DW)
    {
    switch(GT_MOD)
    {
    case 1: if(GIAY==0) GIAY=59;
    else GIAY--;
    break;
    case 2: if(PHUT==0) PHUT=59;
    else PHUT--;
    break;
    case 3: if(GIO==0) GIO=23;
    else GIO--;
    break;
    default: break;
    }
    HIENTHI_CLOCK();
    DELAY_MS(100);
    }
    }
    }
    //*********************

    void PHIM_MOD()
    {
    if(!MOD)
    {
    DELAY_MS(20);
    if(!MOD)
    {
    GT_MOD++;
    if(GT_MOD>=4) GT_MOD=0;
    HIENTHI_CLOCK();
    do{}while(!MOD);
    }
    }
    }
    //*********************************XX
    void CHINH_CLOCK()
    {
    PHIM_MOD();
    if(GT_MOD!=0)
    {
    TR1=1;
    do
    {
    PHIM_UP();
    PHIM_DW();
    PHIM_MOD();
    }
    while(GT_MOD!=0);
    TR1=1;
    }
    }

    void main()
    {
    SETUP_LCD();
    TMOD=0X15; TR1=1;
    EA=1;ET1=1;
    LCD_COMMAND(ADDR_LINE1);
    for(j=0;j<20;j++){LCD_DATA(HANG1[j]);}
    LCD_COMMAND(ADDR_LINE2);
    for(j=0;j<20;j++){LCD_DATA(HANG2[j]);}
    HIENTHI_CLOCK();
    while(1)
    {
    if(BDN==40)
    {
    if(GIAY==59)
    {
    GIAY=0;
    if(PHUT==59)
    {
    PHUT=0;
    if(GIO==24) GIO=0;
    else GIO++;
    }
    else PHUT++;
    }
    else GIAY++;
    BDN=0;
    HIENTHI_CLOCK();
    }
    else
    { CHINH_CLOCK();

    }
    }

    }

  2. #2
    Ngày tham gia
    Jan 2016
    Bài viết
    0
    đoạn code mình gửi dưới đây để các bạn dễ nhìn hơn!Xin cảm ơn các bạn!

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    HIC..Cao thủ đâu hết rồi..ra tay tương trợ với..fight)fight)

  4. #4
    Ngày tham gia
    Apr 2016
    Bài viết
    0
    Trích dẫn Gửi bởi Kiếm Định
    HIC..Cao thủ đâu hết rồi..ra tay tương trợ với..fight)fight)
    THỬ XEM SAO:


    Mã:
    #include <TV_P89V51RD2_SHIFT.C>
    #include <TV_P89V51RD2_LCD.C>
    const unsigned char code HANG1[20]={"*DAI HOC SU PHAM KY"};
    const unsigned char code HANG2[20]={"DONG HO:           "};
    unsigned char j,GIAY=0,PHUT=0,BDN=0,GIO=0,GT_MOD=0;
    unsigned long TIMER_OUT=0;
    void timer1_interrupt() interrupt 3 using 0
    {
        BDN++;TH1=0X4B;TL1=0XB0;
            TIMER_OUT++;IF(TIMER_OUT>500)TIMER_OUT=501;//TINH LAI O DAY CHO DU 10S
    }
    void HIENTHI_CLOCK()
    {
        LCD_COMMAND(ADDR_LINE2+10);
        LCD_DATA(GT_MOD+0X30);
       
        LCD_DATA(':');
        LCD_DATA(GIO/10+0X30);
        LCD_DATA(GIO%10+0X30);
       
        LCD_DATA(':');
        LCD_DATA(PHUT/10+0X30);
        LCD_DATA(PHUT%10+0X30);
       
        LCD_DATA(':');
        LCD_DATA(GIAY/10+0X30);
        LCD_DATA(GIAY%10+0X30);
    }
    //******************************
    
    void PHIM_UP()
    {
        if(!UP)
        {
            DELAY_MS(20);
            if(!UP)
            {
            switch(GT_MOD)
            {
                case 1:     if(GIAY==59)GIAY=0;
                        else GIAY++;
                        break;
                case 2:  if(PHUT==59)PHUT=0;
                        else PHUT++;
                        break;
                case 3:  if(GIO==23)GIO=0;
                        else GIO++;
                        break;
                default:break;
            } 
        HIENTHI_CLOCK();
        DELAY_MS(100);
    }
    }
    }
    //***************************X
                               
    void PHIM_DW()
    {
        if(!DW)
        {
            DELAY_MS(20);
            if(!DW)
            {
                switch(GT_MOD)
                {
                    case 1: if(GIAY==0) GIAY=59;
                    else GIAY--;
                    break;
                    case 2: if(PHUT==0) PHUT=59;
                    else PHUT--;
                    break;
                    case 3: if(GIO==0) GIO=23;
                    else GIO--;
                    break;
                    default: break;
                }
                HIENTHI_CLOCK();
                DELAY_MS(100);
            }
        }
    }
    //*********************
    
     void PHIM_MOD()
     {
        if(!MOD)
        {
            DELAY_MS(20);
            if(!MOD)
            {
            GT_MOD++;
                if(GT_MOD>=4) GT_MOD=0;
                    HIENTHI_CLOCK();
                    do{}while(!MOD);
            }
        }
     }
     //*********************************XX
     void CHINH_CLOCK()
     {
     PHIM_MOD();
        if(GT_MOD!=0)
        {
            TR1=1;
            do
            {
                PHIM_UP();
                PHIM_DW();
                PHIM_MOD();
            }
            while(GT_MOD!=0);
            TR1=1;
        }
     }
    
    void main()
    {
        SETUP_LCD();
        TMOD=0X15;  TR1=1;
        EA=1;ET1=1;
        LCD_COMMAND(ADDR_LINE1);
        for(j=0;j<20;j++){LCD_DATA(HANG1[j]);}
        LCD_COMMAND(ADDR_LINE2);
        for(j=0;j<20;j++){LCD_DATA(HANG2[j]);}
        HIENTHI_CLOCK();
    while(1)
    {
          IF(GT_MOD==0)TIMER_OUT=0;
          ELSE {IF(TIMER_OUT>500){TIMER_OUT=0;GT_MOD=0;}}
         if(BDN==40)
         {
            if(GIAY==59) 
            {
             GIAY=0;
             if(PHUT==59)  
             {
             PHUT=0;
             if(GIO==24)  GIO=0;
             else         GIO++;
             }
             else       PHUT++;
             }
             else      GIAY++;
             BDN=0;
              HIENTHI_CLOCK();
             }
             else
             { CHINH_CLOCK();
             
    }
     }
    
    }

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    vẫn không dc bạn à..mình nhấn MOD là nó đứng hình luôn..lúc này nhấn MOD nó ko tự tăng giá trị nữa mà nó ko đếm tg như trước khi chưa bấm..giống như bị treo vậy....

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 02:56 AM. Diễn đàn sử dụng vBulletin® Phiên bản 4.2.5.
Bản quyền của 2025 vBulletin Solutions, Inc. Tất cả quyền được bảo lưu.
Ban quản trị không chịu trách nhiệm về nội dung do thành viên đăng.