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
    code ne
    Code:
     #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é :laychua:
             }
     }       // 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
     ************

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