1. Xin chào Khách ! Ban quản trị sẽ tiến hành nâng cấp diễn đàn từ ngày 11/8/2017 Mọi truy cập có thể bị dán đoạn, mong bạn thông cảm!
    Dismiss Notice

Thảo luận Lập trình led nháy theo nhạc dùng AN6884 + 89C51

Thảo luận trong 'Họ 8051'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,054
    Đã được thích:
    1,288
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    Chip xem mấy clip led vumeter nháy theo nhạc trên youtube hay hay, tìm hiểu thấy mạch của họ là sự kết hợp 2 con AN6884 và 89xx tín hiệu âm thanh sau khi qua MIC đến AN6884 tín hiệu out của AN6884 có 5 mức âm thay vào đó sẽ trở thành nút bấm thành tín hiệu vào của 89xx và tín hiệu ra của 89xx sẽ kích để mở tranzitor mở nhiểu led..Chip về quê nghỉ đợt tết hì hục lập trình hiệu ứng thì không khó..khó chỗ nút bấm..Nếu nhấn 1 nút thì nháy hiệu ứng..nhưng nếu nhấn cùng lúc 2 nút thì hiệu ứng 1 của nút 1 vẫn chạy trước..hoắc là chạy chỉ hiệu ứng đó..Chip lập trình 2 nút ngắt thì được..nhưng không ổn..
    mach-led-nhay-theo-nhac-dung-8051_512.
    Mong các bạn góp ý cho chip để chip hoàn thành sản phẩm test..Quan trọng chỗ nút nhấn nhất..hic.Code và file mô phỏng chip gửi hết lên đó.

    Mã:
    #include <REGX51.H>
    #include <stdio.h>
    #include <intrins.h>
    sbit K1 = P1^0;
    sbit K2 = P1^1;
    sbit K3 = P1^2;
    sbit K4 = P1^3;
    sbit K5 = P1^4;
    /*********************************************8***/
    unsigned char i,j,k,x;
    void delay (unsigned char n)
    {
    for (i=0;i<n;i++)
    {
    for (j=0;j<255;j++);
    }
    }
    /**********************sang dan***************************/
    void hieu_ung1(void) //sang dan
    {
        /* P2=0x01;
        delay(200);
        for (k =0;k<8;k++)
            {
           
            P2=P2<<1;  //dich bit sang trai
            delay(500);   
     
            }  */
        P0=0x01;
        delay(50);
        P0=0x03;
        delay(50);
        P0=0x07;
        delay(50);
        P0=0x0f;
        delay(50);
        P0=0x1f;
        delay(100);
        P0=0x3f;
        delay(50);
        P0=0x7f;
        delay(50);
        P0=0xff;
        delay(50);
     
        P0=0xff;
        P2=0x01;
        delay(50);
        P0=0xff;
        P2=0x03;
        delay(50);
        P0=0xff;
        P2=0x07;
        delay(50);
        P0=0xff;
        P2=0x0f;
        delay(50);
        P0=0xff;
        P2=0x1f;
        delay(50);
     
    }
    /**********************sang dan***************************/
    void hieu_ung2(void)  //sang dan
    {
        x=0x01;
        for(k=0;k<8;k++)
            {
            P2=x;
            delay(500);
            x=_crol_(x,1);//quay trai 1 don vi
            }
    }
    /*********************sang dan vao giua****************************/
    void hieu_ung3(void)
    {
    /*unsigned char M[]={0x00,0x01,0x03,0x05,0x07,0x08,0x09,0x10};
    unsigned char N[]={ 0x00,0x01,0x03,0x05,0x07,0x08,0x09,0x10};
    P2=0x0ff;
    delay(500);*/
        P0=0x01;
        P2=0x80;
        delay(50);
        P0=0x03;
        P2=0xc0;
        delay(50);
        P0=0x07;
        P2=0xe0;
        delay(50);
        P0=0x0f;
        P2=0xf0;
        delay(50);
        P0=0x1f;
        P2=0xf8;
        delay(50);
        P0=0x3f;
        P2=0xfc;
        delay(50);
        P0=0x7f;
        P2=0xfe;
        delay(50);
        P0=0xff;
        P2=0xff;
        delay(50);
    }
    ////////////////////////////////////////////////////////
    hieu_ung4()
    {
        P0=0x01;
        delay(50);
        P0=0x03;
        delay(50);
        P0=0x07;
        delay(50);
        P0=0x0f;
        delay(50);
        P0=0x1f;
        delay(100);
        P0=0x3f;
        delay(50);
        P0=0x7f;
        delay(50);
        P0=0xff;
        delay(50);
      //////////
        P0=0xff;
        P2=0x01;
        delay(50);
        P0=0xff;
        P2=0x02;
        delay(50);
        P0=0xff;
        P2=0x04;
        delay(50);
        P0=0xff;
        P2=0x08;
        delay(50);
        P0=0xff;
        P2=0x10;
        delay(50);
        //////P2 sang duoi lui + p0 sang dan giam////
        P2=0x10;
        P0=0x7f;
        delay(50);
        P2=0x08;
        P0=0x3f;
        delay(50);
        P2=0x04;
        P0=0x1f;
        delay(50);
        P2=0x02;
        P0=0x0f;
        delay(50);
        P2=0x01;
        P0=0x07;
        delay(50);
     
        P0=0x03;
        delay(50);
        P0=0x01;
        delay(50);
        P0=0x00;
       
     
     
     
     
    }
    /////////////////////////////////////////////////
    void EXT0_Init(void)
     
    {
     
              EX0=1;      //Kich hoat ngat ngoai 0
     
              IT0=1;  //Chon ngat theo suon xuong
     
    }
    ////////////////////////////////////////////
    void EXT1_Init(void)
     
    {
     
              EX1=1;      //Kich hoat ngat ngoai 0
     
              IT1=1;  // Chon ngat theo suon xuong
     
    }
     
    ////////////////////sang dan vao giua///////////////////////
    void Ngat_Ngoai_0(void) interrupt 0
     
    {
    //Chuong trinh con phuc vu ngat ngoai 0
     
        hieu_ung3();
     
    }
    ////////////////////////////////////////////////
    void Ngat_Ngoai_1(void) interrupt 2
     
    {
    //Chuong trinh con phuc vu ngat ngoai 0
    hieu_ung4();
    }
    ////////////////////////////////////////////////////
    void button(void)
    {
        if(K1==0)
        {
        hieu_ung1();
        }
        else if ((K1=0)&&(K2=0))
            {
            hieu_ung4();
            }   
            /*while(K1=0)
            {
            if(K2==0)
            {
            hieu_ung4();
            }
            } */
    }
     
    void main()
    {
    EXT1_Init();
    EXT0_Init();
    EA=1;
        P2=P3=P0=0x00;
        button();
    }
     

    Các file đính kèm:

    • Code.rar
      Kích thước:
      38.5 KB
      Đọc:
      966
    fetel, changtraihd, vipyeu_191914 others thích bài này.
  2. dovanhieu

    dovanhieu Nong dan can thi Staff Member

    Tham gia ngày:
    25/10/12
    Bài viết:
    1,357
    Đã được thích:
    1,902
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư
    Nơi ở:
    Văn Quán, Hà Đông, Hà Nội
    Cố gắng xong trước mùng 8/3 anh nhá, để các bạn làm mạch tặng người yêu :))
     
  3. NgoHungCuong

    NgoHungCuong http://ngohungcuong.com

    Tham gia ngày:
    19/8/12
    Bài viết:
    4,004
    Đã được thích:
    9,107
    Điểm thành tích:
    69
    Giới tính:
    Nam
    Nghề nghiệp:
    Thất nghiệp
    Nơi ở:
    Lâm Thao - Phú Thọ
    Vậy tóm lại bạn ChipKool cần yêu cầu như thế nào với mấy cái nút để mình giúp cho :)
    Ngay ban đầu chương trình đã có vấn đề rồi.
    Chưa thấy cái chỗ while(1) đâu cả à nha :)
     
    dovanhieu thích bài này.
  4. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,054
    Đã được thích:
    1,288
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    ^^" hay quá Có anh KIDTEAM giúp cho em..em chỉ có vấn đề về chỗ nút bấm thôi..còn hiệu ứng em tự tạo được..

    -Có 5 nút bấm nếu nhấn nút 1 thì hiệu ứng 1 sáng nhưng nếu nút 1 đã nhấn lại nhấn thêm nút 2 nghĩa là có 2 nút bấm thì hiển thị hiệu ứng 3..lại tăng lên 3 nút bấm thì hiển thị hiệu ứng 4....và tăng lên 5 nút cùng nhấn hiệu ứng 5...

    - 2 nút mà cùng bấm rồi thì ngắt ngay hiệu úng 1 bỏ đi..chạy hiệu ứng của 2 nút cùng bấm..và 3 nút cùng bấm ngắt ngay hiệu ứng của 2 nút..chạy hiệu ưng của 3 nút cùng bấm..^^ Help em hết số na..cháy bugi na..^^ em còn thi công

    - While(1) trong main em đang thử bỏ đi ấy mà..có gì anh KID viết nhé..em đợi tối nay.
     
  5. chúng

    chúng Kỹ sư

    Tham gia ngày:
    7/9/12
    Bài viết:
    345
    Đã được thích:
    349
    Điểm thành tích:
    63
    Giới tính:
    Nam
    5 cái nút bạn nói là 5 ngõ ra của AN6884 chứ gì, ý bạn là khi ngỏ ra của AN thay đổi thì 89 phải đáp ứng tức thì sự thay đổi đó phải ko. Bạn mắc ở chỗ là khi bạn đang chạy hiệu ứng riêng thì 89 ko thể biết đc AN đã thay đổi ngỏ ra phải ko.
     
    sgesvnChipKool thích bài này.
  6. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,054
    Đã được thích:
    1,288
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    Gần như bạn Chung nói..Chip lập trình đủ kiểu rồi nút bấm rồi..khi nhấn 1 nút nó chạy..nhưng nếu nhấn 2 nút nó chạy hiệu ứng 1 trước rồi chạy hiệu ứng 2..tớ ngồi nghĩ làm cách nào đây..khi tín hiệu đáp ứng thay đổi liên tục lên xuống..
    (_ _) help tớ nhé..
     
  7. demon52

    demon52 Kỹ sư Staff Member

    Tham gia ngày:
    17/8/12
    Bài viết:
    873
    Đã được thích:
    1,209
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Director
    Nơi ở:
    Home
    Setup 1 timer mà quét input state.
     
    ChipKool thích bài này.
  8. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,054
    Đã được thích:
    1,288
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    Bạn demon52 help 1 chút nhé..^^
     
  9. ChipKool

    ChipKool Thạc sỹ

    Tham gia ngày:
    4/9/12
    Bài viết:
    1,054
    Đã được thích:
    1,288
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên UNETI
    Nơi ở:
    Điện Tử | Tin Học - echipkool.com
    Chip vẫn chưa làm được..hic..Giúp chip hoàn thành món này với..meo meo~X(:-s
     
  10. demon52

    demon52 Kỹ sư Staff Member

    Tham gia ngày:
    17/8/12
    Bài viết:
    873
    Đã được thích:
    1,209
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Director
    Nơi ở:
    Home
    Trong timer quét input state,
    PHP:
     if (state 1==1effect=1;
    Còn trong hàm main thì viết 1 hàm switch case,
    PHP:
    switch (effect)
    {
    case 
    1call effect_1_function(); break;
    case 
    2call effect_2_function(); break;
    ...
    case 
    netc...
    }
    hoặc viết 1 hàm unsigned int8 effect_function (unsigned int8 effect) và cho vào trong hàm while (1){};
     
    tienhoang, vuong_1984ChipKool thích bài này.

Chia sẻ trang này