Thông báo

Collapse
No announcement yet.

xem dùm em cái này !

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

  • xem dùm em cái này !

    Có anh nào coi hộ dùm em xem đoạn code sau sai chổ nào mà ko chạy, trong đó ngắt ngoài 0 dùng để tăng biến đếm lên 1 khi có sản phẩm đi qua, còn ngắt timer0 dùng để hiển thị led 7seg

    HTML Code:
    						 // khai bao Header 
    #include<reg51.h>
    #include<stdio.h>
    
    #define m 2   // dinh nghia m de sau nay tien cho viec chinh sua thoi gian quyet led
    // Khai bao Bit can dung
    sbit    start    =    P0^0;         // nut nhan bat dau    
    sbit    led1    =    P1^0;         // Cac dau ra quyet led
    sbit    led2    =    P1^1;
    sbit    led3    =    P1^2;
    sbit    led4    =    P1^3;
    sbit	led5	=	P1^4;
    sbit	led6	=	P1^5 ; 
    
    const unsigned char	M[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};        // Ma data cua led 7 thanh anode chung
    unsigned int sp1;	   //bien dem so san phan/thùng, max = 24
    unsigned long int sp2;	// bien dem so thung/ngày , max = 9999
    unsigned int thousand2,hundred2,tens2,unit2,tens1,unit1;    																  
    
    // Ham tao tre de quyet led, ham nay chi mang tinh chat tao tre, chu thoi gian thuc trong ham khong dung voi thoi gian tre thuc su trong VDK
    void    delay_ms(unsigned int    time)
    {
        unsigned int    i;
        unsigned int    j;
        for(i = time;i>0;i--)
            for(j=0;j<125;j++);
    }
    //  Ham xoa Led de giam hieu ung chop cua LED ( Do lech so voi tan so nhin thay cua mat )
    void    clear_led(void)
    {
        P1=0xFF;		   // quan lý nguon
        P2=0xFF;			//quan lý data
    }											
    //   Ham quet LED
    void    display(void)
    {
        clear_led();
        thousand2 = sp2/1000;
        
        if (thousand2 == 0)          // Neu gia tri trong hang nghin = 0 thi led hang nghin khong sang
            clear_led();
        else    
        {   P1 = 0x1F;	//led6 = 0; led5 = 1; led4=1; led3 = 1;led2 = 1;led1 = 1;
            P2=M[thousand2];
            delay_ms(m);
            clear_led();
        }
    
        hundred2 =(sp2%1000)/100;
    
        if ((thousand2 == 0)&&(hundred2 == 0)) // Neu gia tri trong hang nghin, va hang tram deu  = 0 thi led hang nghin, hang tram  khong sang
            clear_led();
        else 
        {   P1 = 0x2F;		//led6 = 1; led5 = 0; led4=1; led3 = 1;led2 = 1;led1 = 1;
            P2=M[hundred2];		   
            delay_ms(m);
            clear_led();
        }
    
        tens2 = ((sp2%1000)%100)/10;
    
        if ((thousand2 == 0)&&(hundred2 == 0)&&(tens2 == 0)) // Neu gia tri trong hang nghin, va hang tram, hang chuc deu  = 0 thi led hang nghin, hang tram, hang chuc  khong sang.
            clear_led();
        else
        {   P1 = 0x37;		//led6 = 1; led5 = 1; led4=0; led3 = 1;led2 = 1;led1 = 1
            P2=M[tens2];
            delay_ms(m);
            clear_led();
        }
    
        unit2 =((sp2%1000)%100)%10;
        P1 = 0x3B;		//led6 = 1; led5 = 1; led4=1; led3 = 0;led2 = 1;led1 = 1
        P2=M[unit2];                                                                  
        delay_ms(m);
        clear_led();
    
    	tens1 = sp1/10;
    	if	(tens1 ==0)
    		clear_led();
    	else
    	{
    		P1 = 0x3D;		//led6 = 1;led5 = 1; led4 = 1;led3 = 1;led2 = 0;led1 = 1;
    		P2=M[tens1]	;
    		delay_ms(m);
    		clear_led();
    	}
    	unit1 = (sp1%10);
    	P1 = 0x3E;		//led6 = 1;led5 = 1; led4 = 1;led3 = 1;led2 = 1;led1 = 0;
    	P2 = M[unit1];
    	delay_ms(m);
    	clear_led();
    }
    
    // Khoi tao chuong trinh
    void    init(void)    
    {
        TMOD=0x01;    // Cho phep Timer0 hoat dong o che do timer 16 bit
        IE=0x83;        // Cho phep ngat ngoai tu chan INT0, ngat trong boi Timer0
        IP=0x01;           // Cho phep ngat ngoai uu tien hon ngat trong
        TH0=-5000/256;    // Tre 1s
        TL0=-5000%256;
        sp1 = 0;		//gia tri khoi tao ban dau = 0
    	sp2 = 0;        // Gia tri khoi tao ban dau bang 0    
        clear_led();    // Xoa LED     
        IT0=1;        // cho phep ngat bang canh xuong timer 0
        TF0=1;        // Timer0 Overfllow Flag
        TR0=1;        // Start Timer0
    }
    // Ham xuat gia tri ra hien thi su dung ngat Timer
    void    outdata(void)    interrupt    1
    {
        TR0=0;
        display();
        TH0=-5000/256;
        TL0=-5000%256;
        TR0=1;
    }
    // Ham dem su dung ngat ngoai
    void    count(void)    interrupt    0 
    {
        EA=0; 		// cam  ngat ngoai
        sp1++;
        if(sp1 >= 25)    
        {   sp1=0;		  //reset lai bien dem so sp/thung
    		sp2++;		   //tang bien dem so thung/ngày lên 1.
    		if(sp2>=9999)	 // reset lai bien dem so thùng/ngày.
    		{
    			sp2=0;
    		}		
    	}	
        delay_ms(10);
        EA=1;		// cho phep ngat ngoai tro lai
    }	
    // Chuong trinh chinh
    void    main (void)
    {
        EA = 0;               // Cam ngat ngoai, cho chuong trinh khoi tao xong
        init();
        delay_ms(100);
        while(start);        // Khi nhan nut start, moi cho phep ngat ngoai, khi do chuong trinh moi bat dau chay
    	delay_ms(10);//thoi gian tre de loai bo hien tuong rung phim
        while(!start); //neu nut da duoc nha ra thi hien thi so 9999
    	sp2 = 0;				   // Gia tri khoi tao cua bien ban dau.														 
    	sp1 = 0;              
        EA = 1;               // Cho phep ngat ngoai tro lai                  
        while(1)
        {
        }
    }

  • #2
    [QUOTE=toilq30;215011]Có anh nào coi hộ dùm em xem đoạn code sau sai chổ nào mà ko chạy, trong đó ngắt ngoài 0 dùng để tăng biến đếm lên 1 khi có sản phẩm đi qua, còn ngắt timer0 dùng để hiển thị led 7seg


    code bạn viết thì bạn có thể tự sửa được mà, bạn xem kỹ lại và phân tích kỹ các câu lệnh 1 tí thì phát hiện ra thôi, đừng phụ thuộc vào diễn đàn nhiều wa. Chúc bạn thành công!!!

    Email:
    Tel: 0983.497.310

    Comment


    • #3
      làm sao có thể vừa dùng chân đó để ngắt ngoài 0 , vừa dùng để ngắt timer 0 hả u ? Khi khai báo : hoặc là chọn làm count hoặc chọn timer .
      Dùng thử timer1 quét led xem .

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      • bqviet
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi bqviet
        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
        06-12-2025, 17:17
      • nguyendinhvan
        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
        bởi nguyendinhvan
        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
        05-12-2025, 19:59
      • afrendly
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi afrendly
        Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
        04-12-2025, 01:27
      • nick22
        Trả lời cho Máy điện châm ?
        bởi nick22
        Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
        01-12-2025, 13:23
      Đang tải...
      X