Mạch Khóa Số Điện Tử Mạch Đếm Sản Phẩm Mạch Đèn giao thông Ngã Tư Mạch Trái Tim Final Mạch Trái Tim Final Mạch Trái Tim I Love U

November 14, 2013

Đồng hồ hẹn giờ 24h-59p-59s về 00000 dùng 8501

Làm đồng hồ diện tử led 7 vạch là một chuyên đề quá quen thuộc với các bạn là dân điện tử nhưng mạch điều khiển của nó có rất nhiều dạng nhưng chia ra hai dạng chính đó là đồng hồ mạch ic số (ĐHS) và đồng hồ Vi điều khiển (VĐK). Nhưng nếu làm bằng ic số thì mạch phức tạp và phải có xung 1Hz mà cái này thì khó kiếm khó làm. Nên mình quyết định chọn vi điều khiển.
Chiếc đồng hồ này thực ra chính là máy hẹn giờ do mình lập trình và thi công bản mạch PCB.

+ Mạch nguyên lý



+ Chương trình viết bằng C:
- Dòng vi xử lý : 89C51
- Ngôn ngữ : C
- Môi trường biên dịch : Keil C


#include<regx51.h>
sfr dulieu=0x80;
sbit nutmode=P3^0;
sbit nuton=P3^4;
sbit chuong=P3^1;
int on=0,a,r=0,giay=59,chucgiay=0,dvgiay=0,phut=59,chucphut=0,dvphut=0,gio=24,chucgio=0,dvgio=0,
dvgiay_bcd=0,chucgiay_bcd=0,dvphut_bcd=0,chucphut_bcd=0,dvgio_bcd=0,chucgio_bcd=0;
void delay(long time)
   {
         while(time--);
   }
void giaima_ht()
    { 
        switch(a)
          {
             case 0: a=0x40; break;
             case 1: a=0x79; break;
             case 2: a=0x24; break;
             case 3: a=0x30; break;
             case 4: a=0x19; break;
             case 5: a=0x12; break;
             case 6: a=0x02; break;
             case 7: a=0x78; break;
             case 8: a=0x00; break;
             case 9: a=0x10; break;
           }
}
void giaima_dec()
      {
          dvgiay=giay%10;
          chucgiay=giay/10;
          dvphut=phut%10;
          chucphut=phut/10;
          dvgio=gio%10;
          chucgio=gio/10;
       }
void giaima_bcd()
      {
         a=dvgiay;
         giaima_ht();
         dvgiay_bcd=a;
         a=chucgiay;
         giaima_ht();
         chucgiay_bcd=a;
         a=dvphut;
        giaima_ht();
        dvphut_bcd=a;
        a=chucphut;
        giaima_ht();
        chucphut_bcd=a;
        a=dvgio;
        giaima_ht();
        dvgio_bcd=a;
        a=chucgio;
        giaima_ht();
      chucgio_bcd=a;
   }
void hienthi()
    {
        P1=0xff;
       dulieu=0xff;
       dulieu=dvgiay_bcd;
       P1=0xfe;
       delay(1);
       P1=0xff;
       dulieu=0xff;
       dulieu=chucgiay_bcd;
       P1=0xfd;
       delay(1);
       P1=0xff;
       dulieu=0xff;
       dulieu=dvphut_bcd;
       P1=0xfb;
       delay(1);
       P1=0xff;
       dulieu=0xff;
       dulieu=chucphut_bcd;
       P1=0xf7;
       delay(1);
       P1=0xff;
       dulieu=0xff;
       dulieu=dvgio_bcd;
       P1=0xef;
       delay(1);
       P1=0xff;
      dulieu=0xff;
      dulieu=chucgio_bcd;
      P1=0xdf;
      delay(1);
  }
void main()
{
       EA=1;
       ET0=1;
       EX0=EX1=1;
       IT0=IT1=1;
       chuong=0;
      TMOD=0x01;
      TL0=0xf0;
      TH0=0xd8;
      TR0=1;
      while(1)
          {
               giaima_dec();
               giaima_bcd();
               hienthi();
               if(nuton==0)
                 {
                   delay(300);
                   while(nuton==0)
                           {;}
                    on=1;
                  }
           }
  }
void ngat_T0() interrupt 1
    {
           TF0=0;
            if(on==1)r++;
           while(r==16)
                 {
                      r=0;
                     if(giay>-1)
                         {
                             giay=giay-1;
                          }
                    if(gio==0&&giay==-1&&phut==0)
                         {
                               chuong=1;
                               on=0;
                               giay=0;
                        }
                    if(phut>-1&&giay==-1&&gio>=0)
                        {
                                phut=phut-1;
                                giay=59;
                         }
                   if(phut==-1)
                         {
                               gio=gio-1;
                               phut=59;
                          }  
                  TL0=0xf0;
                  TH0=0xd8;
                   TR0=1;
           }
    }
void ngat_ET0() interrupt 0
    {
          if(nutmode==1)
             {
                if(phut<59)
                   {
                       phut++;
                    }
             }
          else
             {
                if(gio<24)
                     {
                        gio++;
                     }
             }
    }
void ngat_ET1() interrupt 2
     {
         if(nutmode==1)
            {
               if(phut>0)
                  {
                      phut--;
                   }
            }
        else
             if(gio>0)
                  {
                         gio--;
                   }
          }

+ Hình ảnh về sản phẩm







+ Nguyên lý hoạt động
-Gồm 5 nút điều khiển:
+ Reset
+ run
+ INC
+ DEC
+ ADJ hour
1. Nút reset: reset đồng hồ đưa về giá trị 245959

2. Nút run: Nhấn nút này đồng hồ đếm lùi

3. INC: Tăng giá trị  đếm

4. DEC: Giảm giá trị đếm

5. ADJ hour: Nhấn nút này khi bấm INC, DEC thì sẽ điều chỉnh giờ

Khi giá trị lùi về 000000 thì relay đóng chuông báo.

Echipkool - Điện Tử | Tin Học - Chia sẻ kiến thức - Kết nối đam mê điện tử

0 comments:

Post a Comment

Bạn đọc hãy giúp chúng tôi xây dựng cộng đồng bằng cách để lại bình luận, chúng tôi luôn đón nhận mọi ý kiến của các bạn:
» Bình luận nghiêm túc và không chứa các liên kết quảng cáo.
» Vui lòng không Spam nhận xét với mọi hình thức.
» Rất mong bạn đề tên cho nhận xét của chính mình - Bằng cách chọn vào Tên/URL và điền tên bạn vào (Phần URL có thể bỏ trống ).

- Bạn có thể chèn Link nhạc (NCT), video(Youtube),Hình ảnh vào comment bằng cú pháp:
+ [youtube] Link video Youtube [/youtube].
+ [img] Link ảnh( định dạng PNG, JPG,GIF) [/img]
+Chèn link liên kết: <a href="LINK" rel="nofollow">Name</a>
-Bạn copy mã bên cạnh biểu tượng chèn vào nhận xét để bày tỏ cảm xúc!!

:) :( :)) :(( =)) =D> :D :P