Thông báo

Collapse
No announcement yet.

Xin giúp đỡ-Mạch và code(C) quét led 7 đoạn đếm từ 00->99!

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

  • Xin giúp đỡ-Mạch và code(C) quét led 7 đoạn đếm từ 00->99!

    Em mới bắt đầu học vi xử lý với 8051! em làm cái mạch đếm từ 00->99 trên protus và code em viết như sau, thuật toán tự nghĩ nên chắc cùi bắp ! mọi người load về xem và sửa dùng em cho nó hiện bình thường được 2 con số(giống ở cột đèn giao thông í)! em cảm ơn mọi người trước!
    đây là project của em
    sửa thành đuôi rar nhé mọi người, 4rum ko cho load file RAR
    HienthiLED_7SEG.doc

  • #2
    spam 1 phát cho mọi người thấy!

    Comment


    • #3
      bạn có thể dùng 1 ngắt timer0 chẳng hạn! ví dụ 2ms ngắt 1 lần thì ++i;
      i=500; -> ++j; j=10; -> j=0; ++k; k=10; -> k=0;
      hàm main thì bạn cho hiển thị số j và k đó ra led7 bằng phương pháp quét!

      Comment


      • #4
        Nguyên văn bởi mr.ngoc Xem bài viết
        bạn có thể dùng 1 ngắt timer0 chẳng hạn! ví dụ 2ms ngắt 1 lần thì ++i;
        i=500; -> ++j; j=10; -> j=0; ++k; k=10; -> k=0;
        hàm main thì bạn cho hiển thị số j và k đó ra led7 bằng phương pháp quét!
        cảm ơn pro nhưng em mới học thôi, chưa nghiên cứu đến ngắt!
        pro có thể chỉ rõ hơn cho em được ko!

        Comment


        • #5
          Em cũng bỗng dưng đâm đầu vào điện tử đây. Chắc bác cũng giống em toàn phải tự tìm hiểu thui. Trên này người tốt thì nhiều nhưng mà chả có time T__T.
          led 7 đoạn dùng 8051 thì có sẵn nhiều lắm. Bác tham khảo trên net nhiều vô kể. Tuy nhiên em đề nghị bác kiếm 2 quyển này. Đọc vài đoạn là bác làm dc ngay.
          1> Vi Điều khiển với lập trình C
          2> Vi Điều Khiển - Cấu trúc, lập trình, ứng dụng
          bác chỉ cần đọc đoạn về timer. và led. Trong đấy có ví dụ y bóc của bác!

          Comment


          • #6
            vậy viết hàm quét ra! rồi dùng 1 biến lặp lại hàm quét đó! sau đó tăng biến đếm lên!
            ví dụ!
            void main(void){
            unsigned int i,j,k;
            while(1){

            for (i=0;i<30;i++){
            hienthi();
            }
            j++;
            if(j==10){
            j=0; k++;}
            như vậy đó bạn!

            Comment


            • #7
              Nguyên văn bởi nghienkiev Xem bài viết
              Em cũng bỗng dưng đâm đầu vào điện tử đây. Chắc bác cũng giống em toàn phải tự tìm hiểu thui. Trên này người tốt thì nhiều nhưng mà chả có time T__T.
              led 7 đoạn dùng 8051 thì có sẵn nhiều lắm. Bác tham khảo trên net nhiều vô kể. Tuy nhiên em đề nghị bác kiếm 2 quyển này. Đọc vài đoạn là bác làm dc ngay.
              1> Vi Điều khiển với lập trình C
              2> Vi Điều Khiển - Cấu trúc, lập trình, ứng dụng
              bác chỉ cần đọc đoạn về timer. và led. Trong đấy có ví dụ y bóc của bác!
              bạn có 2 quyển đó ko up lên giùm mọi người đi!!!

              Comment


              • #8
                Nguyên văn bởi mr.ngoc Xem bài viết
                bạn có 2 quyển đó ko up lên giùm mọi người đi!!!
                2 quyển này ra cổng trường DCN thì bán đầy, còn nơi khác mình ko biết, nói chung là bản giấy chứ ko phải trên máy, hj`, ai ở gần đó có thể mua được, 2 quyển này chủ yếu nói về cơ chế và thuật toán đơn giản và có hướng dẫn mở rộng code, nhưng mà code mẫu trong quyển 2 ko phải đúng hoàn toàn, nhưng chỉ cần sửa chút là ngon
                Website chính thức đổi địa chỉ website thành
                Mời các bạn ghé thăm !!!

                Comment


                • #9
                  ai có 2 quyển đó upload lên cho ae đi! thanks

                  Comment


                  • #10
                    chao ban mjh co the lm dc mot chuong trinh dem cho 1led tu 0-9 thoi.mkh ko ko biet cach dinh kem file len day
                    co ji ban hay ll voi mjnh qua mail truonggiangqn90@yahoo.com

                    Comment


                    • #11
                      Mình có mạch đếm lùi 99-00.Mach từ 00-99 cũng tương tư vậy thôi!
                      Code:
                      include  8051.mc
                      
                      
                      
                      TG_DAT   EQU 99
                      CS1   BIT P0.0
                      CS2   BIT P0.1
                      CS3   BIT P0.2
                      CS4   BIT P0.3
                      ORG 00H
                      MAIN: 
                            SETB CS1
                            SETB CS2
                            SETB CS3
                            SETB CS4
                            MOV  14H,#TG_DAT
                            CALL  HEXTOBCD
                            CALL HIENTHI1
                      JMP MAIN
                      
                      ; cac chuong trinh con ho tro.
                      ; chuong trinh con giai ma hex sang ma bcd & su dung 7447 de giai ma cho LED 7 thanh
                      HEXTOBCD:
                        MOV A,14H;GIAI MA SO THU 1
                        MOV B,#10
                        DIV AB
                        MOV 20H,A
                        MOV 21H,B
                        
                      ; chuong trinh con hien thi LED 7 thanh
                      HIENTHI1:
                            MOV  A,20H
                      	MOV  DPTR,#TABLE1
                      	MOVC A,@A+DPTR
                      	MOV  R0,A
                      	SWAP A
                      	MOV  R5,A
                      	CALL HIENTHI2
                      	DEC  R0
                      LOOP1:
                      	MOV  DPTR,#TABLE1
                      	MOV  A,R0
                      	MOVC A,@A+DPTR
                      	MOV  R0,A
                      	SWAP A
                      	MOV  R5,A
                      	CALL HIENTHI3
                      	DEC  R0
                      	CJNE R0,#0FFH,LOOP1
                      	RET
                      
                      HIENTHI2:
                      	MOV  A,21H
                      	MOV  DPTR,#TABLE2
                      	MOV  R1,A
                      LOOP2:
                      	MOV  A,R1
                      	MOVC A,@A+DPTR
                      	ADD  A,R5
                      	MOV  P1,A
                      	DEC  R1
                      	CALL DELAY1S
                      	CJNE R1,#0FFH,LOOP2
                      	RET
                      
                      HIENTHI3:
                      	MOV  A,#9
                      	MOV  DPTR,#TABLE2
                      	MOV  R1,A
                      	LOOP3:
                      	MOV  A,R1
                      	MOVC A,@A+DPTR
                      	ADD  A,R5
                      	MOV  P1,A
                      	DEC  R1
                      	CALL DELAY1S
                      	CJNE R1,#0FFH,LOOP3
                      	RET
                      ; chuong trinh delay 1s
                      DELAY1S:
                        	 MOV  R7,#20
                      LOOPDELAY1S:
                        	 MOV TMOD,#01H
                        	 MOV TH0,#3CH
                           	 MOV TL0,#B0H
                             SETB TR0
                        	 JNB TF0,$
                        	 CLR TF0
                        	 DJNZ R7,LOOPDELAY1S
                        	 RET
                      TABLE1: DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H
                      TABLE2: DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H
                      
                      END
                      File mô phỏng bằng proteus:
                      http://www.mediafire.com/?j0jwa0c302zdd
                      Last edited by dee07_bk; 12-11-2010, 17:57.
                      Đối thủ mà ta khó chiến thắng nhất chính là bản thân !!!

                      Comment


                      • #12
                        Code:
                        #include<reg52.h>
                        sbit led1=P0^0;
                        sbit led2=P0^1;
                        int k,dem;
                        unsigned char led_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                        void delay_ms(int t)
                        {    int m,n;
                            for(m=0;m<=100;m++)
                            for(n=0;n<=t;n++);
                        }
                        void hienthi()
                        {
                            led2=1;
                            P2=led_data[k%10];delay_ms(10);led2=0;
                            led1=1;
                            P2=led_data[k/10];delay_ms(10);led1=0;
                        }
                        void main()
                        {    
                            while(1)
                            {
                            TMOD=0x10;
                            IE=0x88;EA=1;
                            IP=0;
                            TH1=-25000/256;
                            TL1=-25000%256;
                            TR1=1;TF1=0;
                            hienthi();
                            }
                        }
                        void ngat_T1() interrupt 3
                        {    
                            TH1=-25000/256;
                            TL1=-25000%256;
                             dem++;
                            if(dem>10) {dem=0;k++;};
                            if(k>99) k=0;
                        }
                        Bạn tham khảo nhé
                        mô phổng bạn nối giống hình dưới

                        Comment


                        • #13
                          mình viết luôn chương trình đếm từ 0000 đến 9999 nhé



                          code


                          #include<REG52.h>
                          unsigned int i,x;
                          unsigned char maled[]={64,121,36,48,25,18,2,120,0,16};
                          #define z 15000
                          void main (void)
                          {
                          while(1)
                          {
                          for(x=0;x<=9999;x++)
                          {
                          P0=maled[(x/1000)];
                          P1=maled[((x%1000)/100)];
                          P2=maled[(((x%1000)%100)/10)];
                          P3=maled[(x%10)];
                          for(i=0;i<z;i++);
                          }
                          }
                          }
                          van hung pro

                          Comment


                          • #14
                            các a ơi cho e hỏi tý nhé.đối với lệnh
                            movc a,@a+pc
                            thì e phải lấy giá trị địa chỉ của PC là bao nhiêu để thực hiện phép cộng vậy

                            Tel:0973968101

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X