Thông báo

Collapse
No announcement yet.

Giúp mình phần code chạy led 7 thanh tăng giảm có 2 nút bấm với

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

  • Giúp mình phần code chạy led 7 thanh tăng giảm có 2 nút bấm với

    phần code này mình đã viết và test rồi nhưng vẫn không chạy đúng. Bạn nào sửa giúp mình với nhé. Cảm ơn nhiều.
    Yêu cầu đề bài như sau:
    gồm 4 led 7 thanh thứ tư hang nghìn, tram, chục, đơn vị, là 0,1,2,3
    phần cứng là mặc định rồi ko sửa được
    Viết chương trình ấn nút tăng thì số tăng, ấn nút giảm thì số giảm.
    Khởi tạo ban đầu là 0000.
    nếu giảm dưới 0 sẽ có dấu (-).
    các bạn giúp mình với nhé.
    mình khổ sở vì bài này nhiều lắm rồi.
    cần thiết lien hệ vs mình qua hòm thư nhé: rikilo1234@gmail.com
    Cảm ơn nhiều

    #include <AT89x52.h>

    #define data_7 P1_0
    #define clock_7 P1_1
    #define latch_7 P1_2
    #define Led_R P1_3
    #define Led_G P1_4
    #define Led_B P1_5

    #define nut_tang P0_4
    #define nut_giam P0_5
    int dem;
    unsigned int j,k;
    unsigned char data_ht[4];
    unsigned char ma_ht[] = {0x18, 0xde, 0x34, 0x94, 0xd2, 0x91, 0x11, 0xdc, 0x10,0x90,0xf7};// mã led từ 0-9, 0xf7 là led g
    unsigned char mat_na[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};// mã này dung để tách bit
    bit nhapnhay = 0;

    void delay_us(unsigned int delay_us)
    {
    unsigned int i;
    for(i=0;i<=delay_us;i++);
    }
    void delay_ms(unsigned int delay_ms)
    {
    unsigned int i;
    for(i=0;i<delay_ms;i++) delay_us(120);
    }// chương trình trễ phần này mình test rồi

    void dau_tru(void) // chương trình con hiện dấu trừ
    {
    if (dem<10) data_ht[2]=10; // led số 2 có dấu (-)
    if((dem>=10)&(dem<100))data_ht[1]=10;// led số 1 có dấu (-)
    if((dem>=100)&(dem<1000))data_ht[0]=10;//led số 0 có dấu (-)
    }// cái này phần cứng thầy mình cho sẵn tương ưng với led đơn vị, chục, tram, nghìn là : 3,2,1,0.
    void bam_nut(void)
    {
    if ((nut_tang==0)|(nut_giam==0)) // ban đầu kiểm tra có nút bấm hay ko
    {
    while(nut_tang==0) //bấm nút tang
    {
    delay_ms(100);
    if(data_ht[3-k]!=10)dem++; // nếu đèn led ngay phía trước không sáng dấu (-) 0xf7 thanh g không sáng thì dem tang, mình dang ko chắc chắn ở dòng lệnh kiểm tra dấu âm này nhưng cũng ko biết sửa sao cho đúng.
    else dem--; // nếu thanh g sáng tức là có dấu (-) thì dem sẽ giảm
    }
    while((nut_giam==0)&(dem!=0)) // trong trường hợp bấm nút giảm mà đếm khác 0
    {
    delay_ms(100);
    dem--; // giảm đếm( nghĩa là lúc này đếm đang dương)
    }
    while((nut_giam==0)) // trong trường hợp bấm nút giảm mà đếm =0
    {
    delay_ms(100);
    dem++;// tang đếm trong TH này đếm đang âm
    dau_tru();// và chạy chương trình dấu trừ
    } // mình biết vòng while này bị lỗi vì nếu tang đếm thì đếm sẽ khác 0 và out ra mất, nhưng vẫn chưa sửa được hic. Các bạn giúp với nhé
    }
    } // chủ yếu ở chương trình nút bấm này. Mình đã làm nhiều nhưng chương trình không hiển thị được dấu (-) và chạy vẫn ko đúng yêu cầu mặc dù phần (+) đúng
    void main (void)
    {
    P0 = 0xff;
    P1 = 0x00;
    dem = 0;
    while (1) {


    Led_G = nhapnhay;
    data_ht[3] = dem%10;// led hang đơn vị
    data_ht[2] = (dem/10)%10;// led hang chục
    data_ht[1] = (dem/100)%10;// led hang trăm
    data_ht[0] = (dem/1000)%10;// led hang nghìn
    for (k=0;k<4;k++)
    {
    for (j=0;j<8;j++)
    {
    data_7 = ma_ht[data_ht[k]] & mat_na[j];// tách bit
    clock_7 = 1;
    delay_us(10);
    clock_7 = 0;
    }// hai dòng for này để chuyển bit vào, các bạn ko cần để ý đâu mình test rồi
    bam_nut();
    dau_tru();

    }

    latch_7 = 1;
    delay_us(10);
    latch_7 = 0;
    nhapnhay = ~nhapnhay;

    }//of while (1)
    }// of main

  • #2
    Cái bài này nghe qua thấy khá đơn giản mà, có gì khó đâu? như yêu cầu thì chỉ cần 1 biến (signed int) khi bạn nhấn phim + thì tăng nó 1 đơn vị nếu nhấn - thì giảm 1 đơn vị, nếu là giá trị + thì bạn khống chế không cho lớn quá 9999, nếu là giá trị âm thì khống chế cho không quá -999 là được, nếu cảm thấy việc quét LED theo kiểu thông thường khó thì bạn dùng timer để quét cứ tính cho nó quét 24fps thì được ngay chứ có vấn đề gì đâu nhỉ? mà do dùng timer để quét led nên cũng có thể để luôn chương trình kiểm tra phím ở timer, cái này có gì khó đâu? Code ở trên bạn tự viết hay lấy của ai? bạn nhớ dùng thẻ [code] chứ để code kiểu đó thì chịu chả muốn đọc.

    Comment


    • #3
      uhm bài code này là mình tự viết bài tập về nhà mà. Viết code cho phần cứng đã có sẵn rồi. Mình làm theo kiểu nếu biến đếm âm và dương thì chạy ok rồi. Mình muốn nó chạy được trên nền code mới này nghĩa là biến đếm sẽ luôn dương ^^ .Cảm ơn đã góp ý nhé. do mình mới gia nhập nên chưa biết thẻ code. Xem giúp mình phần code nhé.

      Comment


      • #4
        tiện thể hướng dẫn mình dung thẻ code nhé. tks nhiều

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X