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

      Đang tải...
      X