Chào mừng các bạn đến với forum lớp DTVT_K7A CNTT Thái Nguyên
Bạn hãy "Đăng nhập" để tham gia cùng chúng tôi

Join the forum, it's quick and easy

Chào mừng các bạn đến với forum lớp DTVT_K7A CNTT Thái Nguyên
Bạn hãy "Đăng nhập" để tham gia cùng chúng tôi

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Top posters

banmun08 (721)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
Toanlt_GP (368)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
tiendientu343 (344)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
hany_mitu (281)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
TranTuyen_BG (275)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
Capkama (271)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
VDuy_NĐ (260)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
Minh (257)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
tieuthantien_3t (173)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 
Hangvt_gc (171)
Mạch hẹn giờ Bar_leftMạch hẹn giờ BarMạch hẹn giờ Bar_right 

Latest topics

» Game dân gian thuần việt 2014 ra mắt phiên bả
by banmun08 Fri May 02, 2014 5:38 pm

» Ứng dụng Bóng đá trực tuyến - Chia sẻ mới dàn
by meocontt89 Fri May 02, 2014 3:44 pm

» Bài bào cáo mạch bấm chuông trò chơi
by tuyenbk2009 Sun Apr 27, 2014 10:48 pm

» Tư vấn học công nghệ thông tin - lập trình
by wyuru Thu Apr 24, 2014 5:17 pm

» Hero Chibi - Khai mở máy chủ S10 - SonGoKu
by Poligon121 Wed Apr 16, 2014 2:15 pm

» mạch đông hồ vạn niên sư dụng DS1307
by ttd2506 Mon Apr 14, 2014 9:45 pm

» Game8 phát 1000 GiftCode mừng máy chủ mới của
by Poligon121 Mon Apr 14, 2014 3:07 pm

» HIỆP KHÁCH 4U.COM OPEN GAME HỒI 10H00 SÁNG
by anata Fri Apr 11, 2014 1:34 pm

» Đua tốp Mu Thần Tài nhận iphone iphone 5s
by muthantai Sun Apr 06, 2014 12:26 pm

» Hiệp khách 4u.com OPEN game hồi 10h00 chủ nh
by anata Sat Apr 05, 2014 7:48 am


4 posters

    Mạch hẹn giờ

    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Mạch hẹn giờ

    Bài gửi by langtu_htd5 Mon Oct 10, 2011 6:15 am

    Bọn em làm bt lớn môn *** bài này. Đây là bài do em tự thiết kế, các anh thấy chỗ nào chưa hợp lý thì sửa giúp em với nha

    Code:

    #include<reg51.h>
    #include<stdio.h>
    #include<intrins.h>
    // khai bao cac led de quet
    sbit led1 = P1^3;
    sbit led2 = P1^2;
    sbit led3 = P1^1;
    sbit led4  = P1^0;

    sbit inc_hour = P2^0;   //tang gio                            
    sbit dec_hour = P2^1;   //giam gio
    sbit inc_min=P2^2;      //tang phut
    sbit dec_min=P2^3;      //giam phut
    sbit start = P2^4;      //bat dau *** lui
    sbit sec = P2^5;      //chan can dieu khien bat/tat
    sbit role = P2^6;      //nhap nhay theo giay

    int hour=0,min=0,s;

    // khai bao ma led 7 doan ktot chung
    unsigned char num[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//hien so khong co dau cham (led 1,3,4)
    unsigned char num2[10]= {0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF}; //hien so co dau cham (led2)

    // chuong trinhd delay
    void delay()
    {
       {
            TMOD=0x01;
            TH0=0xFC;
            TL0=0x18;
            TR0=1;
            while(!TF0);
            TF0=0;
            TR0=0;
         }
    }

    //-------------quet led----------------

    void quet()
    {
        led1=0;
        P3=num[hour/10];// led1
        delay();
        led1=1;
        P3=0x00;
        led2=0;
        P3=num2[hour%10];    //led 2
        delay();
        led2=1;
        P3=0x00;
        led3=0;
        P3=num[min/10];  // led3
        delay();
        led3=1;
        P3=0x00;
        led4=0;
        P3=num[min%10];  // led4
        delay();
        led4=1;
        P3=0x00;
    }
     
    void delay2(m)
    {
       int i;
       for (i=0;i<m;i++)
       {
          quet();
       }
    }
    // chuong trinh xuat dong thoi ra 4 led
    void main(void)
    {
    //----------hen gio----------------
       inc_hour=dec_hour=0;
       inc_min=dec_min=0;
       role=start=hour=min=0;

       while (start==0)
       {
          if (inc_min==1)
          {
             min++;
             if (min==60)
             {
                min=0;
                hour++;
             }
             inc_min=0;
             delay2(50);
          }
          quet();
          if (dec_min==1)
          {
             min--;
             if (min<0)
             {
                min=59;
                if (hour>0) hour--;
             }
             dec_min=0;
             delay2(50);
          }
          if (inc_hour==1)
          {
             hour++;
             if (hour>99) hour=0;
             inc_hour=0;
             delay2(50);
          }
          if (dec_hour==1)
          {
             hour--;
             if (hour<0) hour=99;
             dec_hour=0;
             delay2(50);
          }
       }

       while (1)
       {
          role=1;
          for (s=0;s<60;s++)
          {
             sec=1;
             delay2(105);
             sec=0;
             delay2(105);
             quet();
          }
          min--;
          if (min<0 && hour > 0)
          {
             min=59;
             hour--;
          }
          if (min==0 && hour==0) break;
       }
       while(1)
       {role=0;}
    }
     

    Mạch hẹn giờ 4e922bd6ce390_Capture

    còn đây là mạch mô phỏng và nguyên lý:
    [You must be registered and logged in to see this link.]
    tiendientu343
    tiendientu343
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 344
    Birthday : 03/01/1990
    Họ và tên : Bùi Duy Tiến Đến từ : Hải Dương
    Ước mơ : CEO
    Status : Biết lái máy bay ! Biết lái xe tăng.

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by tiendientu343 Mon Oct 10, 2011 10:27 am

    Thế chương trình chỉ nhấn đc một nhấn xong là dừng à?
    Có chương trình kiểm tra nút bấm đâu?
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Mon Oct 10, 2011 1:39 pm

    em không hiểu ý anh là gì. Mạch này của e có thể đặt được giờ từ 00h00 tới 99h59 phút. nếu là 0h0' thì chạy liên tục, không tắt (hoặt tới khi tắt nguồn hoặc reset). Nhấn nút start ở giữa để bắt đầu đếm lùi. Anh chạy thử mạch mô phỏng chưa

    Anh xem hộ em phần mạch nguyên lý (thêm bớt gì không), code có gì chưa hợp lý để em sửa lại
    huutoan_ss
    huutoan_ss
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 166
    Birthday : 24/05/1990
    Họ và tên : Nghiêm Hữu Toàn Đến từ : Sóc Sơn - Hà Nội
    Ước mơ : .v.v.v.v.v.v......
    Status : ĐTVT-K7A

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by huutoan_ss Mon Oct 10, 2011 11:41 pm

    Em nên dung ngắt time cho bai nay để đc độ chính xác hơn. tinh toán cung thuận tiện e ah.
    Đây e dùng quét kết hợp vs delay vong trễ nên khó trong việc tính toán.
    Với lại mới chỉ mô phỏng trên proteus nên khi ra mạch chạy thưc tế nó có thể bị lỗi như led có thể bị nháy hơn khi đó lại fai tính "mò" giá trị đặt vào số vòng lặp lúc đó sẽ không khả thi cho lắm. Cool
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Tue Oct 25, 2011 9:15 am

    em vất vả lắm mới làm được như vậy. dùng ngắt time thế nào hả anh, anh hướng dẫn em với, cụ thể 1 chút anh nhé
    huutoan_ss
    huutoan_ss
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 166
    Birthday : 24/05/1990
    Họ và tên : Nghiêm Hữu Toàn Đến từ : Sóc Sơn - Hà Nội
    Ước mơ : .v.v.v.v.v.v......
    Status : ĐTVT-K7A

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by huutoan_ss Thu Oct 27, 2011 10:53 am

    E đặt time tao trễ đúng 1s. mỗi lầ ngắt đc 1s thì lúc đó ta tăng biến giấy của đong hồ lên 1 đơn vị là ok.
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Thu Oct 27, 2011 12:25 pm

    đó là khi đã có giá trị để cho biến bắt đầu đếm. Còn khi đặt giờ thì làm thế nào hả anh
    Capkama
    Capkama
    Admin
    Admin


    Gender : Nam Số bài : 271
    Birthday : 14/05/1989
    Họ và tên : Dương Vũ Kiên Đến từ : DTVT K7A
    Ước mơ : We are one family
    Status : It only takes a second to say I love you, but it will take a lifetime to show you how much...

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by Capkama Thu Oct 27, 2011 6:54 pm

    Đặt giờ thì khó hơn 1 chút. Em cần làm chuẩn tg 60s là 1p, 60p là 1h. Sau đó set tg để mạch chạy đếm dần lên. Có 1 nút set tiếp đến thời điểm nào mạch sẽ đổ chuông. Đấy là cách đơn giản nhất. Còn ko thì làm theo thời gian thực, ghép nối 8051 với DS1307. cái này em hỏi anh Toàn ấy Laughing .
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Fri Oct 28, 2011 8:28 pm

    em không hiểu lắm. anh giúp em bài này đc ko
    huutoan_ss
    huutoan_ss
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 166
    Birthday : 24/05/1990
    Họ và tên : Nghiêm Hữu Toàn Đến từ : Sóc Sơn - Hà Nội
    Ước mơ : .v.v.v.v.v.v......
    Status : ĐTVT-K7A

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by huutoan_ss Sun Oct 30, 2011 3:22 am

    E đã biết cách sử dụng timer trong 8051 chưa? và biết dùng ngắt timer chưa?
    Nếu e biết rồi thì anh hương dẫn nó dễ hơn. 1 chut la ok. Cool
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Sun Oct 30, 2011 8:51 am

    timer thì em biết sơ sơ chú, còn ngắt thì chưa dùng bao giờ, để e đọc lại bài hướng dẫn của anh là ok ngay. Anh hướng dẫn em làm với nha
    huutoan_ss
    huutoan_ss
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 166
    Birthday : 24/05/1990
    Họ và tên : Nghiêm Hữu Toàn Đến từ : Sóc Sơn - Hà Nội
    Ước mơ : .v.v.v.v.v.v......
    Status : ĐTVT-K7A

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by huutoan_ss Tue Nov 01, 2011 8:02 pm

    E sử dụng ngôn ngữ lập trình nào thành thạo nhất. Nói chung nếu e dung C lập trình cho VĐK thì sẽ đơn giản và dễ hiểu hơn.
    Chung quy lại thì lập trình băng ngôn ngữ gì cung vậy VĐK đều xử lý sự kiện ngắt như nhau mà thôi chỉ khác ở cách biểu diễn của mỗi ngôn ngữ la khac nhau.

    E hiểu như thế này VĐK sẽ luôn xử lý lần lượt các công việc ở chương trình chính nếu ko có ngắt và tại bất kỳ thời điểm nào trong khi nó đag xử lý đó nếu có tín hiệu ngắt xảy ra thì nó sẽ dừng việc xử lý đó lại để đi xử lý chương trình phục vụ ngắt cho xong việc nó mới quay lại xử lý tiếp tục các công việc tiếp theo của chương trình chính từ thời điểm nó dừng lúc trước.

    8051 thì nó có các sự kiện gây ra ngắt là:
    - ngắt ngoài 0: sự thay đổi mức hay sườn trên chân INT0
    - ngắt ngoài 1: sự thay đổi mức hay sườn trên chân INT1
    - ngắt timer 0 : xảy ra tại thời điểm tràn timer 0
    - ngắt timer 1 : xảy ra tại thời điểm tràn timer 1
    - ngắt truyền thông nối tiếp : xảy ra tại thời điểm nếu nhận hay truyền thành công 1 byte.
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Wed Nov 02, 2011 7:15 am

    thanks anh. về lý thuyết thì em cũng biết vậy nhưng ko biết áp dụng vào bài cụ thể bài của e như thế nào
    huutoan_ss
    huutoan_ss
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 166
    Birthday : 24/05/1990
    Họ và tên : Nghiêm Hữu Toàn Đến từ : Sóc Sơn - Hà Nội
    Ước mơ : .v.v.v.v.v.v......
    Status : ĐTVT-K7A

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by huutoan_ss Thu Nov 03, 2011 12:27 am

    ok. Anh có cái thuật toán cho bài của em như thế này:
    - Em cài đặt timer sao cho nó chạy đúng 50000 lần tức được 50000uS (đối vs thạch anh 12MHz) thì nó bị tràn
    - mỗi lần tràn thì tăng biến đếm lên 1 và kiem tra bien *** xem: nêu băng 20 thi tức la dc 1 phut (50000us*20)=1000000us=1s
    - Đc 1s ta bắt đầu xử lý tăng biến giây lên ==> nếu giây=60 ==> phút++ ==> h++
    - Kiểm tra xem thời gian đếm đã băng thời gian đặt trước chưa nếu băng thi xử lý relay đóng ngắt bóng đèn chăng hạn. Cool
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Fri Nov 04, 2011 8:47 am

    Em có 2 vấn đề muốn hỏi anh thế này:
    1: làm sao để đặt giờ và hiển thị ra led 7seg x4?
    2. làm sao để vừa chạy timer vừa quet led đếm ngược về 0?
    tiendientu343
    tiendientu343
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 344
    Birthday : 03/01/1990
    Họ và tên : Bùi Duy Tiến Đến từ : Hải Dương
    Ước mơ : CEO
    Status : Biết lái máy bay ! Biết lái xe tăng.

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by tiendientu343 Fri Nov 04, 2011 12:18 pm

    langtu_htd5 viet:

    Em có 2 vấn đề muốn hỏi anh thế này:
    1: làm sao để đặt giờ và hiển thị ra led 7seg x4?
    2. làm sao để vừa chạy timer vừa quet led đếm ngược về 0?

    vấn đề thứ nhất " Đặt giờ" em phải giao tiếp với IC thời gian thực DS1307 qua giao thức I2C . khi lấy được giờ rồi. em so sánh với giờ em đặt trước.
    Vấn đề thứ 2: chạy được, thời gian rất nhanh . Con người ko phân biệt đc đâu em nhé!
    huutoan_ss
    huutoan_ss
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 166
    Birthday : 24/05/1990
    Họ và tên : Nghiêm Hữu Toàn Đến từ : Sóc Sơn - Hà Nội
    Ước mơ : .v.v.v.v.v.v......
    Status : ĐTVT-K7A

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by huutoan_ss Sat Nov 05, 2011 12:45 am

    Như thế nay. Bài của em là đặt thời gian và đếm ngược rồi sau đó điều khiển 1 chức năng nào đó như tắt bật một thiết bị điện chặng hạn đung ko?
    A thì hay dung phương pháp quét led.
    Để có thể thực hiện vùa quét led vừa đếm ngược về 0 và đồng thời có thể cài đặt được thời gian đếm thì em có thể lập trình cho VĐK như sau:
    - Để timer đếm thời gian như cách anh đã chỉ ra ở bài trước.
    - Để chương trình chính cùng chạy để quét led để hiện thị và kiểm tra phím bấm.
    - Nếu có phím bấm thì nhảy đến đoạn chương trình cài đắt và quét hiển thị giá trị đag cài dặt. ok. vậy la xong. hjhj. Cool

    Chúc vui!
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Sat Nov 05, 2011 12:55 pm

    anh cho em hỏi chút là có phải timer hoạt động độc lập với với các lệnh khác không? Tức là trong khi timer chạy thì các lệnh khác vẫn chạy đồng thời với nó. Bình thường thì các lệnh chạy theo thứ tự
    huutoan_ss
    huutoan_ss
    Đại Tướng
    Đại Tướng


    Gender : Nam Số bài : 166
    Birthday : 24/05/1990
    Họ và tên : Nghiêm Hữu Toàn Đến từ : Sóc Sơn - Hà Nội
    Ước mơ : .v.v.v.v.v.v......
    Status : ĐTVT-K7A

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by huutoan_ss Wed Nov 09, 2011 5:20 pm

    uhm. đúng rồi. timer chạy song song vs chương trình đến khi nào xay ra hiện tương tràn timer thi xay ra ngắt, lúc này ta mới tiến hành dưng timer va xư lý ngắt của nó.

    chúc vui!
    langtu_htd5
    langtu_htd5
    Thượng Sĩ
    Thượng Sĩ


    Gender : Nam Số bài : 87
    Birthday : 10/01/1991
    Họ và tên : Hoàng Thế Nam Đến từ : Hà Tây
    Ước mơ : Học đã, tính sau!
    Status : ĐTVT K8D

    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by langtu_htd5 Fri Nov 18, 2011 11:34 pm

    huutoan_ss đã viết:ok. Anh có cái thuật toán cho bài của em như thế này:
    - Em cài đặt timer sao cho nó chạy đúng 50000 lần tức được 50000uS (đối vs thạch anh 12MHz) thì nó bị tràn
    - mỗi lần tràn thì tăng biến đếm lên 1 và kiem tra bien *** xem: nêu băng 20 thi tức la dc 1 phut (50000us*20)=1000000us=1s
    - Đc 1s ta bắt đầu xử lý tăng biến giây lên ==> nếu giây=60 ==> phút++ ==> h++
    - Kiểm tra xem thời gian đếm đã băng thời gian đặt trước chưa nếu băng thi xử lý relay đóng ngắt bóng đèn chăng hạn. Cool

    các anh xem hộ em với, em làm theo thuật toán này, dùng ngắt timer nhưng nó chạy lung tung hết cả lên, ko đặt được giơ. Anh xem sai chỗ nào rồi chỉnh sửa cho em với, 22/11 là e phải báo cáo rồi

    Code:

                    
    #include<reg51.h>
    #include<stdio.h>
    #include<intrins.h>
    // khai bao cac led de quet
    sbit led1 = P2^7;
    sbit led2 = P2^6;
    sbit led3 = P2^5;
    sbit led4  = P2^4;

    sbit inc_hour = P3^0;   //tang gio                            
    sbit dec_hour = P3^1;   //giam gio
    sbit inc_min=P3^2;      //tang phut
    sbit dec_min=P3^3;      //giam phut
    sbit start = P3^4;      //bat dau *** lui
    sbit sec = P3^5;      //nhap nhay theo giay
    sbit role = P2^0;      //chan can dieu khien bat/tat

    int hour=0,min=0,s;
    int i=0,j=60,k;

    // khai bao ma led 7 doan ktot chung
    unsigned char num[10]= {0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};//hien so khong co dau cham (led 1,3,4)
    unsigned char num2[10]= {0x80,0x9b,0x42,0x0a,0x19,0x0c,0x04,0x9a,0x00,0x08}; //hien so co dau cham (led2)

    // chuong trinh delay
    void delay_ms(unsigned char time)
    {
       for (k=1;k<=time;k++)
       {
            TMOD=0x01;
            TH0=0xFC;
            TL0=0x18;
            TR0=1;
            while(!TF0);
            TF0=0;
            TR0=0;
         }
    }

    //-------------quet led----------------

    void quet()
    {
        led1=1;
        P0=num[hour/10];// led1
        delay_ms(1);
        led1=0;
        P0=0x00;
        led2=1;
        P0=num2[hour%10];    //led 2
        delay_ms(1);
        led2=0;
        P0=0x00;
        led3=1;
        P0=num[min/10];  // led3
        delay_ms(1);
        led3=0;
        P0=0x00;
        led4=1;
        P0=num[min%10];  // led4
        delay_ms(1);
        led4=0;
        P0=0x00;
    }
     
    void main(void)
    {
       role=start=hour=min=0;          
       inc_hour=dec_hour=0;
       inc_min=dec_min=0;
       while(start==0) {quet();}
       
       TMOD=0x11;//TIMER 0,timer 1 mode 1
       IE=0x8f;//ngat timer 0, ngat timer 1
       TH0=0x3c;//delay 50000us
       TL0=0xb0;
       
       TH1=-5/256;
       TL1=-5%256;
       TR1=1;
       while(start==0)
       {
          if (inc_min==1)
          {
             min++;
             if (min==60)
             {
                min=0;
                hour++;
             }
             inc_min=0;
             delay_ms(200);
          }

          if (dec_min==1)
          {
             min--;
             if (min<0)
             {
                min=59;
                if (hour>0) hour--;
             }
             dec_min=0;
             delay_ms(200);
          }
          if (inc_hour==1)
          {
             hour++;
             if (hour>99) hour=0;
             inc_hour=0;
             delay_ms(200);
          }
          if (dec_hour==1)
          {
             hour--;
             if (hour<0) hour=99;
             dec_hour=0;
             delay_ms(200);
          }
       }
       min=hour=2;
       TR0=1;
       while(1)
       {   role=1;
          quet();
           if (i==20)
          {
             i=0;
             j--;
          }
          if (j==0)//j=60->0 thi dc 1 phut va giam phut
          {
             min--;
             j=60;
             if (min < 0 && hour > 0)
             {
                min=59;
                hour--;
             }
          }
          if (min==0 && hour==0)
          {
             IE=0;
             break;
          }   
       }
       while(1) {role=0;}
    }
     
      void countdown() interrupt 1//ngat timer 0
    {
       TF0=0;
       TH0=0x3c;//dat lai gia tri timer
       TL0=0xb0;
       TR0=1;
       i++;  //50ms thi tang i len 1 dv, i=20 thi dc 1s
       if (i%10==0) sec=~sec;//led nhay theo tung giay
    }

    void set_time() interrupt 3//ngat timer 1
    {
          TH1=-5/256;
          TL1=-5%256;
          TR1=1;
          quet();
    }

    P/s: ở đây em giải mã lại led 7 thanh x4 cho dễ vẽ mạch
    Lúc chạy mạch thật thì con 7805 rất nóng, có ai biết vì sao không vậy?


    mạch mô phỏng: [You must be registered and logged in to see this link.]

    Sponsored content


    Mạch hẹn giờ Empty Re: Mạch hẹn giờ

    Bài gửi by Sponsored content


      Hôm nay: Tue Oct 22, 2024 3:27 pm