Thông báo

Collapse
No announcement yet.

vấn đề quyét led 7 đoạn

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

  • vấn đề quyét led 7 đoạn

    mình có đoạn code này sao không quét được led mà led cứ nhấp nháy. Có ai giúp mình sửa đôaạn code này lại cho hoàn chỉnh được không vậy?
    #include <REGX51.H>
    #define led1 P2_0
    #define led2 P2_1
    int k,dem;
    unsigned char Font[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
    void delay(int t)
    { int m,n;
    for(m=0;m<=100;m++)
    for(n=0;n<=t;n++);
    }


    void hien_so(void) //quyet led 7doan
    {
    led1=1;
    P1=Font[k/10];

    delay(60);
    led1=0;
    led2=1;
    P1=Font[k%10];

    delay(60);
    led2=0;
    }
    void ngat_timer1() interrupt 3
    {
    TR1=0;
    TH1=-25000/256;
    TL1=-25000%256;
    TR1=1;
    dem++;
    if(dem>10) {dem=0;k++;};
    if(k>59) k=0;
    }
    void main(void)
    {

    while (1)
    {
    TMOD=0x11;
    ET1=1;
    EA=1;
    TF1=1;
    TH1=-25000/256;
    TL1=-25000%256;
    hien_so();
    }
    }

  • #2
    bạn phải đưa cả phần cứng và giải thuật ra thì mọi người mới giúp dc chứ. đâu ai rảnh mà ngồi mò mẫm đoán ý của bạn!!!
    Đạo khả đạo phi thường đạo
    Danh khả danh phi thường danh

    Comment


    • #3
      cho tất chỗ quét led vào trong 1 timer là ok

      //Ham ngat timer1 dung de quet
      void T1_ISR(void) interrupt 3
      { TR1=0;
      TH1=0xEC; //5000us
      TL1=0x77;
      count2++;
      LED1=1;
      LED2=1;
      LED3=1;
      LED4=1;
      if(count2==1)
      { LED_DATA=bang_ma[h1];
      LED1=0;
      }
      if(count2==2)
      { LED_DATA=bang_ma[h2];
      LED2=0;
      }
      if(count2==3)
      { LED_DATA=bang_ma[m1];
      LED3=0;
      }
      if(count2==4)
      { LED_DATA=bang_ma[m2];
      LED4=0;
      count2=0; //Khoi dong lai bien dem
      }
      TF1=0;
      TR1=1;
      }
      Nhận làm mạch vi điều khiển, ghép nối máy tính, mạch xung số
      mail:
      dd: 0973423905

      Thương trường là chiến trường. tiến lên để kiếm tiền

      Comment


      • #4
        bạn có thể sửa trực tiếp trên file cua mình đang làm được không? thanks

        Comment


        • #5
          đây là sơ đồ của mình
          Attached Files

          Comment


          • #6
            Thử làm mạch thật đi
            Cắm test bo cũng được.
            Lúc đó sẽ chạy ầm ầm.
            Còn vấn đề nhấp nháy có thể do protues ko thực hiện được.
            Tôi gặp hoài về mạch đèn giao thông.
            Lúc mô phỏng không chạy nhưng mạch thật thì chạy good.

            Email:
            Tel: 0983.497.310

            Comment


            • #7
              bạn tienhuypro noi đúng đấy,khi mô phỏng trên protues thường ko được chính xác cho lắm,tốt nhất bạn nên cắm testbo thử cho chắc..

              Comment


              • #8
                Nguyên văn bởi khachgianlai Xem bài viết
                mình có đoạn code này sao không quét được led mà led cứ nhấp nháy. Có ai giúp mình sửa đôaạn code này lại cho hoàn chỉnh được không vậy?
                #include <REGX51.H>
                #define led1 P2_0
                #define led2 P2_1
                int k,dem;
                unsigned char Font[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
                void delay(int t)
                { int m,n;
                for(m=0;m<=100;m++)
                for(n=0;n<=t;n++);
                }


                void hien_so(void) //quyet led 7doan
                {
                led1=1;
                P1=Font[k/10];

                delay(60);
                led1=0;
                led2=1;
                P1=Font[k%10];

                delay(60);
                led2=0;
                }
                void ngat_timer1() interrupt 3
                {
                TR1=0;
                TH1=-25000/256;
                TL1=-25000%256;
                TR1=1;
                dem++;
                if(dem>10) {dem=0;k++;};
                if(k>59) k=0;
                }
                void main(void)
                {

                while (1)
                {
                TMOD=0x11;
                ET1=1;
                EA=1;
                TF1=1;
                TH1=-25000/256;
                TL1=-25000%256;
                hien_so();
                }
                }
                Mình trước cũng học 8051 bjo thì chuyển sang dùng avr nên nhiều kiến thức về 8051 không được chắc chắn lắm.Theo mình thì bạn nên sửa lại CTC sắp sếp như ct bên dưới mới đúng, vì mình khởi tạo ngắt timer 1 ngay lúc đầu, khi bắt đầu có ngắt thì giá trị thanh ghi (TH1=-25000/256;TL1=-25000%256 được reset và thiết lập mới lại. Còn bạn để trong vòng while(1){} thì giá trị thanh ghi đó luôn luôn mang giá tri như vậy nên ngắt của bạn sẽ không được thực hiện. do vậy hiện thị của bạn sẽ không đúng. ( còn bạn bảo led bạn bị nháy nháy , bạn thử thay đổi giá trị delay cho phù hợp để chương trình quét led ok nhé hoặc có thể do tran PNP trong mô phỏng có vấn đê, minh cũng đã gặp lỗi này rồi, còn tran PNP hay gặp lỗi là khi có tín hiệu 0 hay 1 thì nó đều mở nên sảy ra hiện tượng nháy nháy và làm cho hiện thị không như mong muốn )

                CTC mình sửa như dưới đây: bạn thử test lại xem ok chưa?
                void main(void)
                {

                TMOD=0x11;
                ET1=1;
                EA=1;
                TF1=1;
                TH1=-25000/256;
                TL1=-25000%256;
                while (1)
                {
                hien_so();
                }
                }
                Last edited by thiennv0109; 01-01-2011, 23:54.
                Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
                Gmail: -Mobile: 0989.194.472

                Comment


                • #9
                  minh đã sửa lại rồi nhưng vẫn không chạy đúng. ai có thể giúp mình với.

                  Comment


                  • #10
                    Nguyên văn bởi khachgianlai Xem bài viết
                    minh đã sửa lại rồi nhưng vẫn không chạy đúng. ai có thể giúp mình với.
                    Bạn gửi sơ đồ mô phỏng của bạn lên đi,có gi mọi người test sửa giúp bạn, ok
                    Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
                    Gmail: -Mobile: 0989.194.472

                    Comment


                    • #11
                      Ko có thời gian kiểm tra cho bạn nhưng có mấy kinh nghiệm thế này.
                      1, về hàm delay nếu chạy thật thì phải delay = timer mới chính xác.
                      2, khi quét phải xóa dữ liệu cũ rồi mới nạp mới. chẳng hạn khi Led1=1, nạp giá trị, xóa giá trị, xóa Led1=0, chuyển Led2=1, nạp giá trị, xóa giá trị , xóa Led2=0, ...
                      3, Hiệu chỉnh thời gian quét đạt được khoảng > 24 lần / 1s.
                      Nhà phân phối, đại lý bán biến tần,PLC,HMI,AC Servo... Delta

                      Mr.Quỳnh 0978706839

                      Comment


                      • #12
                        Nguyên văn bởi quynhnb Xem bài viết
                        Ko có thời gian kiểm tra cho bạn nhưng có mấy kinh nghiệm thế này.
                        1, về hàm delay nếu chạy thật thì phải delay = timer mới chính xác.
                        2, khi quét phải xóa dữ liệu cũ rồi mới nạp mới. chẳng hạn khi Led1=1, nạp giá trị, xóa giá trị, xóa Led1=0, chuyển Led2=1, nạp giá trị, xóa giá trị , xóa Led2=0, ...
                        3, Hiệu chỉnh thời gian quét đạt được khoảng > 24 lần / 1s.
                        Bác nói chuẩn không phải chỉnh... Nhưng mà bạn ấy đang mắc ở code của bạn đó tự viết,, >>@khachgianlai: Bạn cần đưa sơ đồ mô phỏng lên ( bạn mới gửi sơ đồ .bmp mọi người ngại vẽ lại khi test lắm ^^) thì mọi người test sẽ nhận ra lỗi giúp bạn nhanh hơn chứ nhìn vào code nhiều khi cảm thấy rất đúng đấy, nhưng lúc sửa được mới biết mình gặp một lỗi nào đó rất cơ bản thui ( mình gặp trường hợp như bạn rồi loay hoay mãi cũng nhận ra lỗi và thấy mình thật là ngớ ngẩn vì lỗi đó rất đơn giản mà mãi mới phát hiện ra,>> nhiều khi cũng do "bù đầu" nhìn không ra, những Lúc đầu óc đã căng thẳng rùi Khuyến cáo đừng cố, của cố chưa chắc đã được đâu nha ... . Hãy để lúc nào thật thoải mái rồi xem lại code rồi sẽ dần nhận ra thui. Chúc bạn nhanh tìm được lỗi
                        Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
                        Gmail: -Mobile: 0989.194.472

                        Comment


                        • #13
                          đồng hồ điện tử

                          Các cao thủ giúp em sửa đoạn code này với,em chưa có thư viện ds 1307.c ,mong các cao thủ khai báo hộ em
                          // Mach thoi gian thuc 89S52-DS1307
                          // Thach anh 12Mhz
                          // Hien thi tren 6 LED 7 seg.

                          #include <at89x52.h>
                          #include <stdio.h>
                          #include <ds1307.c>

                          sbit SET = P3^3;
                          sbit DOWN = P3^2;
                          sbit UP = P3^1;
                          sbit MODE = P3^0;

                          sbit LED1 = P1^0;
                          sbit LED4 = P1^1;
                          sbit LED3 = P1^2;
                          sbit LED2 = P1^3;
                          sbit LED5 = P1^4;
                          sbit LED6 = P1^5;

                          unsigned char ma_bcd[14] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 ,0x40,0x79}; // Common Anode
                          unsigned char hour, min, sec, day, date, mon, year;
                          char chedo, mode, run, et1;
                          bit bit_nhay;
                          unsigned char ledData[7];
                          unsigned char ledPort[7] = {0xFF,0xFE,0xF7,0xFB,0xFD,0xEF,0xDF};

                          void delay(unsigned int d);
                          void quetLed(void);
                          void scanKey(void);
                          void chonCheDo(void);

                          // tao tre
                          void delay(unsigned int d)
                          {
                          while(d--);
                          }
                          // Quet LED
                          void quetLed(void)
                          {
                          int i,j;
                          for(j=0; j<20; j++)
                          {
                          for(i=1;i<7;i++)
                          {
                          P1 = ledPort[i]; // Cho phep led1
                          P0 = ledData[i]; // Hien thi chuc gio
                          delay(10); // Tre 10 chu ki

                          P1 = 0xFF; // tat Led
                          P0 = 0XFF; // tat led
                          }
                          }
                          }
                          // chon che do -- dua du lieu ra bo dem hien thi
                          void chonCheDo(void)
                          {
                          if(run == 1)
                          {
                          rtcReadTime(&hour,&min,&sec);
                          rtcReadDate(&date,&mon,&year);
                          }
                          if(chedo==1)
                          {
                          ledData[1] = ma_bcd[hour/10];
                          ledData[2] = ma_bcd[hour%10];
                          ledData[3] = ma_bcd[min/10];
                          ledData[4] = ma_bcd[min%10];
                          ledData[5] = ma_bcd[sec/10];
                          ledData[6] = ma_bcd[sec%10];
                          }
                          if(chedo==2)
                          {
                          ledData[1] = ma_bcd[date/10];
                          ledData[2] = ma_bcd[date%10];
                          ledData[3] = ma_bcd[mon/10];
                          ledData[4] = ma_bcd[mon%10];
                          ledData[5] = ma_bcd[year/10];
                          ledData[6] = ma_bcd[year%10];
                          }
                          }
                          // quet phim
                          void scanKey(void)
                          {
                          if (MODE == 0) // Nhan phim MODE
                          {
                          while(!MODE)quetLed(); // Cho nha phim
                          mode++;
                          run = 0;
                          chedo = 1;
                          if(mode>3)chedo = 2;
                          if (mode > 6)
                          {
                          mode = 0;
                          run = 1;
                          chedo = 1;
                          rtcWriteTime(hour,min,sec);
                          rtcWriteDate(date,mon,year);
                          }
                          }

                          if (mode != 0)
                          {
                          if(UP == 0) // Nhan phim UP
                          {
                          while(!UP)quetLed(); // Cho nha phim
                          switch (mode)
                          {
                          case 1: hour++; if (hour > 23)hour = 0; break;
                          case 2: min++; if (min > 59)min = 0; break;
                          case 3: sec++; if (sec > 59)sec = 0; break;
                          case 4: date++; if (date > 31)date = 0; break;
                          case 5: mon++; if (mon > 12)mon = 0; break;
                          case 6: year++; if (year > 99)year = 0; break;
                          }
                          }
                          if(DOWN == 0) // Nhan phim Down
                          {
                          while(!DOWN)quetLed(); // Cho nha phim
                          switch (mode)
                          {
                          case 1: if (hour == 0)hour = 23; else hour --; break;
                          case 2: if (min == 0)min = 59; else min --; break;
                          case 3: if (sec == 0)sec = 59; else sec--; break;
                          case 4: if (date == 0)date = 23; else date --; break;
                          case 5: if (mon == 0)mon = 59; else mon --; break;
                          case 6: if (year == 0)year = 59; else year--; break;
                          }
                          }
                          chonCheDo();
                          if (bit_nhay == 1)
                          {
                          switch (mode)
                          {
                          case 1: ledData[1] = ledData[2] = 0xFF; break;
                          case 2: ledData[3] = ledData[4] = 0xFF; break;
                          case 3: ledData[5] = ledData[6] = 0xFF; break;
                          case 4: ledData[1] = ledData[2] = 0xFF; break;
                          case 5: ledData[3] = ledData[4] = 0xFF; break;
                          case 6: ledData[5] = ledData[6] = 0xFF; break;
                          }
                          }
                          }
                          if((UP == 0)&(mode==0))
                          {
                          while(!UP)quetLed(); // Cho nha phim
                          chedo++;
                          if(chedo>2) chedo = 1;
                          }

                          if (SET == 0)
                          { // Nhan phim set
                          while(!SET)quetLed(); // Cho nha phim
                          mode = 0; // Thoat che do dat thoi gian
                          rtcWriteTime(hour,min,sec);
                          rtcWriteDate(date,mon,year);
                          run = 1;
                          }
                          }

                          void Ngat_T1(void) interrupt 3
                          {
                          TR1 = 0;
                          TF1 = 0;
                          TH1 = -10000/256;
                          TL1 = -10000%256;

                          et1 ++;
                          if (mode != 0)
                          {
                          if (et1 >= 20)
                          {
                          et1 = 0;
                          bit_nhay = ~bit_nhay;
                          }
                          }
                          TR1 = 1;
                          }

                          // Chuong trinh chinh
                          void main()
                          {
                          TMOD = 0x11; // Dat Timer1 che do 1
                          TH1 = TL1 = 0;
                          ET1 = 1; // Cho phep ngat Timer1
                          EA = 1; // Cho phep ngat toan bo
                          TR1 = 1; // Cho phep Timer1 hoat dong

                          mode = 0; // Cam che do dieu khien
                          run = 1; // Kich hoat che do cho

                          rtcInit();
                          chedo = 1; // Chon che do hien thi gio

                          while(1)
                          {
                          if(run)chonCheDo();
                          scanKey();
                          quetLed();
                          }
                          }

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X