Thông báo

Collapse
No announcement yet.

anh kidteam xem giúp em

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

  • anh kidteam xem giúp em

    Code:
    #include <REGX51.H>
    sbit Led1 = P1^0;
    sbit Led2 = P1^1;
    sbit Led3 = P1^2;
    sbit Led4 = P1^3;
    //=================
    unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
    int a,b,c,d,e,f,k;
    //================= 
    void delay(long time)
    {long n;
    for(n=0;n<time;n++)
    {;
    }
    }
    void khoitaongatngoai0()
    {EA=1;
    EX0=1;
    IT0=1;
    }
    void ngatngoai0() interrupt 0
    {
    {
    for(k=0;k<=9999;k++)
    {
    a=k/1000;
    b=(k/100)%10;
    e=(k/10)%10;
    f=k%10;
    Led1=1; //led dau tien sang
    P2=M[a];
    delay(50);
    Led1=0;
    P2=0xff;//xoa du lieu
    Led2=1; //led 2 sang
    P2=M[b];
    delay(50);
    Led2=0;
    P2=0xff;
    Led3=1;
    P2=M[e];
    delay(50);
    Led3=0;
    P2=0xff;
    Led4=1;
    P2=M[f];
    delay(50);
    Led4=0;
    P2=0xff;
    }
    }
    }
    void main()
    {
    khoitaongatngoai0();
    }
    Nguyễn Huy Biên - 01649 802 694
    gmail :

  • #2
    cũng không khá hơn
    bạn trình bày thế này thì chịu thua bạn
    khi bạn sửa lỗi bạn làm thế nào
    chờ nhé
    mình sửa lại đã rồi sẽ xem
    ý mình bảo bạn đưa code vào dạng thế này này
    Code:
    #include <REGX51.H>
    sbit Led1 = P1^0;
    sbit Led2 = P1^1;
    sbit Led3 = P1^2;
    sbit Led4 = P1^3;
    //=================
    unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
    int a,b,c,d,e,f,k;
    //================= 
    void delay(long time)
    {
    	long n;
    	for(n=0;n<time;n++)
    	{;
    	}
    }
    void khoitaongatngoai0()
    {
    	EA=1;
    	EX0=1;
    	IT0=1;
    }
    void ngatngoai0() interrupt 0
    {
    	{
    		for(k=0;k<=9999;k++)
    		{
    			a=k/1000;
    			b=(k/100)%10;
    			e=(k/10)%10;
    			f=k%10;
    			Led1=1; //led dau tien sang
    			P2=M[a];
    			delay(50);
    			Led1=0;
    			P2=0xff;//xoa du lieu
    			Led2=1; //led 2 sang
    			P2=M[b];
    			delay(50);
    			Led2=0;
    			P2=0xff;
    			Led3=1;
    			P2=M[e];
    			delay(50);
    			Led3=0;
    			P2=0xff;
    			Led4=1;
    			P2=M[f];
    			delay(50);
    			Led4=0;
    			P2=0xff;
    		}
    	}
    }
    void main()
    {
    	khoitaongatngoai0();
    }

    Comment


    • #3
      hình dung qua ý tưởng của bạn thế này không biết đúng không nhé
      bạn gắn nút bấm vào chân ngắt ngoài 0 làm nút start và stop
      dùng timer 0 để đếm 1/100s
      sau đó hiển thị ra 4 led 7 đoạn
      đúng không nhỉ
      thế 4 con led đơn dùng làm gì vậy
      nếu đúng ý bạn thì mình code lại toàn bộ cho mình không hiểu 4 con led đơn làm gì

      Comment


      • #4
        Code:
        #include <REGX51.H>
        sbit Led1 = P1^0;
        sbit Led2 = P1^1;
        sbit Led3 = P1^2;
        sbit Led4 = P1^3;
        //=================
        unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
        int a,b,c,d,e,f,k;
        //================= 
        void delay(long time)
        {
        long n;
        for(n=0;n<time;n++);
        }
        void khoitaongatngoai0()
        {EA=1;
        EX0=1;
        IT0=1;
        }
        void ngatngoai0() interrupt 0
        {
        k++;
        if(k>9999) k=0;
        }
        void main()
        {
        khoitaongatngoai0();
        k=0;
        while(1)
        {
        a=k/1000;
        b=(k/100)%10;
        e=(k/10)%10;
        f=k%10;
        Led1=1; //led dau tien sang
        P2=M[a];
        delay(50);
        Led1=0;
        P2=0xff;//xoa du lieu
        Led2=1; //led 2 sang
        P2=M[b];
        delay(50);
        Led2=0;
        P2=0xff;
        Led3=1;
        P2=M[e];
        delay(50);
        Led3=0;
        P2=0xff;
        Led4=1;
        P2=M[f];
        delay(50);
        Led4=0;
        P2=0xff;
        }
        }
        làm như e thì chỉ nhìn thấy 4 số 8 mà thôi, phải nhớ là quét led đảm bảo tối thiếu 24h/s để có hiện tượng lưu ảnh
        cái này a sửa thành cứ ấn công tắc ngắt là nó tăng k 1 phát, sau đó hiển thị k trong main, a cũng nói rồi, người ta chỉ nhét quét led vào main hoặc ngắt timer chứ ko nhét vào ngắt ngoài sao vẫn nhét vào ngắt ngoài
        Website chính thức đổi địa chỉ website thành
        Mời các bạn ghé thăm !!!

        Comment


        • #5
          @ @, a mast lên HN rồi ạ. tại hqua bác kid vào cmt bài này của e, được đà e hỏi luôn. hì.
          Nguyễn Huy Biên - 01649 802 694
          gmail :

          Comment


          • #6
            Nguyên văn bởi kidteam Xem bài viết
            hình dung qua ý tưởng của bạn thế này không biết đúng không nhé
            bạn gắn nút bấm vào chân ngắt ngoài 0 làm nút start và stop
            dùng timer 0 để đếm 1/100s
            sau đó hiển thị ra 4 led 7 đoạn
            đúng không nhỉ
            thế 4 con led đơn dùng làm gì vậy
            nếu đúng ý bạn thì mình code lại toàn bộ cho mình không hiểu 4 con led đơn làm gì
            huynh ơi,mái cái đó là Anot của 4 con led mà, đặt cho dễ gọi thôi
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              mình sửa nguyên code ban đầu bạn gửi lên chạy rùi mình gửi lên ở bài bạn gửi lên lần đầu ý,mình không biết cách gửi file
              từ máy lên nên mạch mô phỏng mình gửi lên sau,mà do mình không còn dùng keil c nên code mình thay đổi cách khai báo,nội dung code vẫn giữ nguyên,mình dùng phần mền khác để học một chút về lập trình với hệ điều hành nên hỗ trợ 89c51 không bằng keil c. bạn dựa vào code mình gửi lên và mở rộng số led là có thể làm cái đồng hồ.

              Comment


              • #8
                Nguyên văn bởi dtcn_112 Xem bài viết
                mình sửa nguyên code ban đầu bạn gửi lên chạy rùi mình gửi lên ở bài bạn gửi lên lần đầu ý,mình không biết cách gửi file
                từ máy lên nên mạch mô phỏng mình gửi lên sau,mà do mình không còn dùng keil c nên code mình thay đổi cách khai báo,nội dung code vẫn giữ nguyên,mình dùng phần mền khác để học một chút về lập trình với hệ điều hành nên hỗ trợ 89c51 không bằng keil c. bạn dựa vào code mình gửi lên và mở rộng số led là có thể làm cái đồng hồ.
                thanks b nhé. để em xem
                Nguyễn Huy Biên - 01649 802 694
                gmail :

                Comment


                • #9
                  bạn xem thử xem có chạy đúng không nhé
                  mình chưa lắp mạch chạy thử
                  tại đi làm rồi không được nghỉ mệt quá
                  nút nhấn được gắn vào chân P3.2 có tác dụng dừng/chạy tiếp
                  bình thường P3.2 được treo lên Vcc thông qua trở 4.7k
                  khi nhấn nút thì P3.2=0
                  nút nhấn gắn vào P3.3 có tác dụng đưa về 0000 reset số
                  do có nhiều cách đấu led 7 đoạn nên nếu bạn đấu khác thì chỉnh lại mã led
                  Code:
                  #include <regx51.h>
                  #define uchar unsigned char
                  #define uint unsigned int
                  #define LedData P1
                  #define Pled1 P2_0
                  #define Pled2 P2_1
                  #define Pled3 P2_2
                  #define Pled4 P2_3
                  void T0_ISR();//phuc vu viec dem thoi gian
                  void EX0_ISR();//phuc vu viec start stop thoi gian
                  void EX1_ISR();//phuc vu viec xoa ve 0000
                  void init(void);//chuong trinh con khoi tao
                  //==================================================
                  uchar bRun;
                  uchar bCountT0;//dem so lan ngat t0	cu 10 lan thi tang 1 cho num
                  uchar num1,num2,num3,num4;
                  uchar maled[10]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x8,0x9};
                  //==================================================
                  void main(void)
                  {
                  	init();
                  	while(1);
                  }
                  //==================================================
                  void init(void)
                  {
                  	//khoi tao ngat ngoai theo suon
                  	EA=1;
                  	EX0=1;//ngat ngoai 0
                  	IT0=1;//ngat theo suon
                  	ET0=1;
                  	EX1=1;
                          IT1=1;
                  	TMOD=1;
                  	TL0=0xf0;//55.536
                  	TH0=0xd8;//tuc la cu 10.000 thi xay ra tran
                  	bCountT0=0;
                  	//num=0;
                  	TR0=1;//cho phep bo dinh thoi hoat dong
                  	//ET1=1;	
                  }
                  //==================================================
                  void T0_ISR(void) interrupt 1
                  {
                  	//chuong trinh ngat phuc vu viec dem thoi gian
                  	//khoang nho nhat la 0.1 s 100ms
                  	TR0=0;
                  	TL0=0xf0;
                  	TH0=0xd8;
                  	Pled2=Pled3=Pled4=0;
                          Pled1=1;
                  	LedData=maled[num1];
                  	Pled1=Pled3=Pled4=0;
                          Pled2=1;
                  	LedData=maled[num2];
                  	Pled2=Pled1=Pled4=0;
                          Pled3=1;
                  	LedData=maled[num3];
                  	Pled2=Pled3=Pled1=0;
                          Pled4=1;
                  	LedData=maled[num4];
                  	if(!bRun)
                  	{
                  		TR0=1;
                  		return;
                  	}
                  	++bCountT0;
                  	if(bCountT0==10)
                  	{
                  		bCountT0=0;
                  		++num4;
                  		if(num4==10)
                  		{
                  			num4=0;
                  			++num3;
                  		}
                  		if(num3==10)
                  		{
                  			num3=0;
                  			++num2;
                  		}
                  		if(num2==10)
                  		{
                  			num2=0;
                  			++num1;
                  		}
                  		if(num1==10)
                  			num1=0;
                  	}
                  	//ok sau nay se hien thi len led 7 doan
                  	TR0=1;
                  }
                  //==================================================
                  
                  //==================================================
                  void EX0_ISR(void) interrupt 0
                  {
                  	if(bRun)
                  		bRun=0;
                  	else
                  		bRun=1;
                  }
                  void EX1_ISR(void) interrupt 2
                  {
                  	num1=num2=num3=num4=0;	
                  }
                  Last edited by kidteam; 03-05-2012, 00:58.

                  Comment


                  • #10
                    Nguyên văn bởi bienhou Xem bài viết
                    huynh ơi,mái cái đó là Anot của 4 con led mà, đặt cho dễ gọi thôi
                    tại hôm qua mệt quá không đọc kỹ

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X