Thông báo

Collapse
No announcement yet.

Xin giúp đỡ về vấn đề quét led 7 đoạn

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

  • Xin giúp đỡ về vấn đề quét led 7 đoạn

    mình vẽ mạch mô phỏng trên proteus và viết code một bài c hiện thị từ 0->20 trên 2 led. Nhưng sao trong mô phỏng nó chỉ hiện thị có một led. Mình dùng ngắt timer0 để quét led.
    Mạch và code đính kèm ở đây.
    Mong sự giúp đỡ của các pro.
    Thanks!
    Attached Files

  • #2
    bạn tícch cực sai do delay, phải tạo vòng lặp. 1 giây phải quét ít nhất 24 lầnmo711i thấy dc. bạn quét 80 lần rùi mới tăng giá trị thanh ghi, moi thấy dc
    không tiếp nhận cuộc gọi qua điện thoại vì đi làm toàn tập, tính khí thất thường, hay nóng võ công lại cao

    Comment


    • #3
      Bạn có thể viết lại code cho mình được ko? thanks!
      và mình thử cho nó hiện 4 số thì cũng chỉ hiện đúng 3 số , còn số thứ 4 ko thấy đâu

      Comment


      • #4
        Nguyên văn bởi quangtho_Go Xem bài viết
        Bạn có thể viết lại code cho mình được ko? thanks!
        và mình thử cho nó hiện 4 số thì cũng chỉ hiện đúng 3 số , còn số thứ 4 ko thấy đâu
        chuyên cái viTri ra sau switch
        Code:
        	//-----Dieu chinh bien vi tri
        	if (viTri >= 2 )
        		viTri = 0;
        
        	switch (viTri) {
        		case 0 :	 {hienThiDonVi(dem); break;} 
        		case 1 :	 {hienThiChuc(dem);  break;} 
        		default:	{ };
        		}
        			viTri++;

        Comment


        • #5
          Phiền pro build rồi chạy mô phỏng có được ko?
          Sao mình làm thế mà vẫn được có một số thôi. Mình cho hiện 3 số thì nó hiện được 2 số.
          Ko hiểu vì sao. làm đủ trò với cái biến viTri đó rồi mà vẫn ko có được như ý.
          Nhờ bạn vậy!

          Comment


          • #6
            Nguyên văn bởi quangtho_Go Xem bài viết
            Phiền pro build rồi chạy mô phỏng có được ko?
            Sao mình làm thế mà vẫn được có một số thôi. Mình cho hiện 3 số thì nó hiện được 2 số.
            Ko hiểu vì sao. làm đủ trò với cái biến viTri đó rồi mà vẫn ko có được như ý.
            Nhờ bạn vậy!
            Code:
            #include <REGX51.H>
            
            const unsigned char bangMa[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
            sbit ledDonVi	=	P0^0;
            sbit ledChuc	=	P0^1;
            char viTri = 0;
            #define	 portLed	P2
            //=============================
            // Khai bao bien toan cuc					 
            unsigned char dem = 0;  
            
            //-------------------------------------
            void hienThiDonVi (unsigned char bienHienThi) {
            	ledChuc = 1;
            	portLed = bangMa[bienHienThi%10];
            	ledDonVi = 0;
            }
            //-------------------------------------
            void hienThiChuc (unsigned char bienHienThi) {
            	ledDonVi = 1;
            	portLed = bangMa[bienHienThi/10];
            	ledChuc = 0;
            }
            //-----------------------------------------
            // Ngat timer 0
            void timer0 (void) interrupt 1 using 2 {
            	static unsigned int timerCounts = 0;	
            	//------NAP LAI GIA TRI DEM TIMER
            	TR0 = 0;
            	TH0 = 0xDF;
            	TL0 = 0x73;
            	TR0 = 1;
            	//-----Dem ngat Timer
            	timerCounts++;
            	if (timerCounts >60) {
            		timerCounts = 0;
            		dem++;
            		if (dem > 20 )
            			dem = 0;
            		}
            	//-----Dieu chinh bien vi tri
            	if (viTri >= 2 )
            		viTri = 0;
            
            	switch (viTri) {
            		case 0 :	{ hienThiDonVi(dem); break; }
            		case 1 :	{ hienThiChuc(dem);  break; }
            		default:	{ };
            		}
            		viTri++;
            }
            
            //------------------------------------
            void khoiTao (void) {
            	TMOD = 0x01;
            	TH0 = 0xDF;
            	TL0 = 0x73;
            	ET0 = 1;
            	EA = 1;
            }
            //=====================
            // ham  main
            void main(void) {
            	khoiTao();
            	TR0 = 1;	// Timer bat dau dem
            	while (1);
            
            }
            //---------------------------------

            Comment


            • #7
              hjhj, mình chỉ là thằng viết asm. c thì mình bó tay rùi
              không tiếp nhận cuộc gọi qua điện thoại vì đi làm toàn tập, tính khí thất thường, hay nóng võ công lại cao

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X