Thông báo

Collapse
No announcement yet.

Mạch đếm sản phẩm với 8051 !

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

  • #16
    Nguyên văn bởi fermin_t4
    có cả phần báo cáo nữa thì cho em xin lun với ah.mọi người giúp em qua hòm thư fermin0806@gmail.com
    để anh làm cả mạch thật rồi gửi qua mail cho nhé
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

    Comment


    • #17
      thôi làm dc mạch thật mà gửi dc qua mail thì để lại mà dùng ông anh ah.mang về nhà mà giữ =))

      Comment


      • #18
        Nguyên văn bởi mast090 Xem bài viết
        để anh làm cả mạch thật rồi gửi qua mail cho nhé
        đời có những người muốn được voi đòi tiên nó khổ lắm ^^!

        Comment


        • #19
          E mang mạch này đi đặt mạch in họ bảo sai chân JACK DC 5v. giờ e ko pít sửa thế nào. a sửa giúp e tý. a gửi vào mail giúp e hcthuan007@gmail.com. Thanks a

          Comment


          • #20
            Sao e làm mạch này thì con led hàng đơn vị phần cài đặt nó hiển thị lỗi nhì,nó ra đc 1 2 net gì thôi,ko biết có bị nạp lỗi ko,thay con trên bằng 89s và nạp bằng burn E,nạp SP2200s bị hư rồi.

            chỉ bị lỗi con cuối cùng còn lại mạch chạy tốt,nhưng thay con 24C04 khác vào thì ko hiển thị đc,giống như ko có nhớ vậy.
            Mấy bác cho e vài ý kiến.
            ĐT: 0972 20 58 68
            Gmail:

            Comment


            • #21
              Nguyên văn bởi hoangnam555 Xem bài viết
              Sao e làm mạch này thì con led hàng đơn vị phần cài đặt nó hiển thị lỗi nhì,nó ra đc 1 2 net gì thôi,ko biết có bị nạp lỗi ko,thay con trên bằng 89s và nạp bằng burn E,nạp SP2200s bị hư rồi.

              chỉ bị lỗi con cuối cùng còn lại mạch chạy tốt,nhưng thay con 24C04 khác vào thì ko hiển thị đc,giống như ko có nhớ vậy.
              Mấy bác cho e vài ý kiến.
              bác ktra lại kỹ pcb xem có bị chạm chập gì ko!

              Comment


              • #22
                Nguyên văn bởi chumanh Xem bài viết
                bác ktra lại kỹ pcb xem có bị chạm chập gì ko!
                PCB e làm bị lỗi chỗ led 7 đoạn,có lẽ do vội.

                E có thắc mắc là sao thay con 24c04 khác vào nó ko hiển thị đc số cài đặt,thay 2 con khác vào bị như nhau,2 con mua khác chỗ.


                bác nào sửa giúp e cái chỗ relay đc ko,khi đếm đủ thì cho relay đóng mãi đến khi nào nhấn reset lại thì trở lại bình thường.Code C e đọc ko hiểu!
                ĐT: 0972 20 58 68
                Gmail:

                Comment


                • #23
                  Mấy con PIC/avr sao ko dùng mà quay về 89 làm chi vậy?


                  Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                  Tel: 031 518648 Phone: 0904 283 505

                  Comment


                  • #24
                    Nguyên văn bởi hoangdai Xem bài viết
                    Mấy con PIC/avr sao ko dùng mà quay về 89 làm chi vậy?
                    E đang học và trường nó dạy con này nên phải dùng nó thôi bác.
                    ĐT: 0972 20 58 68
                    Gmail:

                    Comment


                    • #25
                      Nguyên văn bởi hoangnam555 Xem bài viết
                      bác nào sửa giúp e cái chỗ relay đc ko,khi đếm đủ thì cho relay đóng mãi đến khi nào nhấn reset lại thì trở lại bình thường.Code C e đọc ko hiểu!
                      thử code này xem sao:
                      Code:
                      /***********************************************************
                      FileName: Product-Counter.c
                      MCU: 8051
                      Xtal: 12Mhz
                      App: Product Counter    
                      Author:     manhcuong.k08@gmail.com
                      Creat Date: 8/5/2011
                      Finish Date: 
                      ************************************************************/
                      #include <at89x52.h>
                      #include <stdlib.h>
                      #include  <stdio.h>
                      /**********************define var,port*********************/
                      #define data_port P2
                      #define sel_port P0
                      sbit MODE = P3^3;    //external interrupt 1
                      sbit DEC = P3^5;    //DEC value
                      sbit INC = P3^4;    //increment value
                      sbit LOUS = P1^2;
                      sbit _CINC = P1^6;
                      sbit _CDEC = P1^7;
                      sbit PRODUCT = P3^2;
                      sbit RESET = P1^5;
                      sbit relay = P3^7;    ///////////
                      /*********************sub program**************************/
                      
                      //==========================================================//
                      //                                                            //
                      //                other                                        //
                      //==========================================================//
                      void    write_eeprom(unsigned char add,unsigned char dat);        
                      unsigned char    read_eeprom(unsigned char add);
                      void    i2c_stop();
                      void i2c_send_start(unsigned char dat);
                      void i2c_send(unsigned char dat);
                      unsigned char i2c_read();
                      void delay(int time);
                      void TIMER0_ini();
                      void TIMER1_ini();    
                      void display_2();
                      void display_1();    
                      void default_value();    
                      void check_value();    
                      void intro();
                      unsigned char code _7_segment[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
                      char ASCII[] = "0123456789";
                      unsigned char code HELLO[] = {
                                                      0x00,0x00,0x00,0x00,0x00,0x0,0x00,0x00,
                                                      0x00,0x76,0x79,0x38,0x38,0x3f,
                                                      0x00,0x00,0x00,0x00,0x00,0x0,0x00,0x00,/*null*/0xff};
                      unsigned char IN_VISIBLE;
                      unsigned char CONTROL_INVISIBLE=0;
                      unsigned char SHIFT_CURCOR;
                      unsigned char time = 15;
                      unsigned char UPS = 0;    
                      char DEFAULT[4];
                      int VALUE;
                      unsigned char counter_status;
                      unsigned char lous_status;
                      unsigned char temp,loi;
                      int temp2,temp1;
                      char temp3[4];
                      /*****************************************************/
                      sbit  I2CSDA = P1^1;    //data I2c line
                      sbit  I2CSCL = P1^0;    //CLOCK i2c line
                      /********************************************************/
                      /*            Main Program                                */
                      /********************************************************/
                      void main()
                      {
                          unsigned char counter;
                          unsigned char temp;
                          int temp1;
                          sel_port = 0xff;
                          data_port = 0x00;
                          I2CSDA = 0;
                          I2CSCL = 0;
                          LOUS = 1;    //disable lous
                          DEC = 1;
                          INC = 1;
                          _CINC = 1;
                          _CDEC = 1;
                          RESET = 1;
                          relay=1;
                          TIMER1_ini();
                          TIMER0_ini();
                          //enable global interrupt
                          IT1 = 1;    //hight to low 
                      //    EX0 = 1;    //enable external interrupt 0
                      //    IT0 = 1;    //hight to low
                          EA = 1;        
                          PT1 = 1;//interrupt priority timer 1                 //UPS
                          PT0 = 1;//interrupt priority timer 0                 //UPS
                          EX1 = 1;
                      //    for(counter=0;counter<8;counter++)
                      //        write_eeprom(counter,0x00);
                          intro();
                          for(counter=0;counter<4;counter++)
                              DEFAULT[counter] = read_eeprom(counter+0x04);
                           VALUE = read_eeprom(0x00);
                           VALUE <<=8;
                           VALUE |= read_eeprom(0x01);
                          while(1){
                                      IN_VISIBLE = 0x00;
                                       display_1();
                                      display_2();
                                      check_value();
                              while(RESET)
                                  {
                                      
                                      IN_VISIBLE = 0x00;
                                       display_1();
                                      display_2();
                                      check_value();
                      
                                      if(_CINC==0)
                                      
                                      {
                                          while(_CINC==0){display_1();
                                                  display_2(); }
                                          if(loi !=0xaa)    //////////
                                          {
                                          VALUE++     ;
                                          temp1=VALUE;
                                           temp = temp1;
                                          write_eeprom(0x01,temp);
                                          temp1>>=8;
                                          temp = temp1;
                                          write_eeprom(0x00,temp);}
                                      }
                                      if(_CDEC==0)
                                      {
                                           while(_CDEC==0){display_1();
                                                  display_2(); }
                                          VALUE--;
                                          if(VALUE==0xffff)
                                              VALUE=0;
                                          temp1=VALUE;
                                           temp = temp1;
                                          write_eeprom(0x01,temp);
                                          temp1>>=8;
                                          temp = temp1;
                                          write_eeprom(0x00,temp);
                                      }
                      
                                      if(PRODUCT==0)
                                      {
                                       if(VALUE < temp2) //////////
                                       {
                                        while(PRODUCT==0){display_1();display_2();}
                                         
                                          VALUE+=1; 
                                          temp1=VALUE;
                                           temp = temp1;
                                          write_eeprom(0x01,temp);
                                          temp1>>=8;
                                          temp = temp1;
                                          write_eeprom(0x00,temp);}
                                  }
                                   
                                  }  
                                      VALUE=0;/////////
                                      temp1=VALUE;
                                       temp = temp1;
                                      write_eeprom(0x01,temp);
                                      temp1>>=8;
                                      temp = temp1;
                                      write_eeprom(0x00,temp);
                                      relay=1;
                      
                      
                          }             
                      
                                 
                      }
                        //==========================================================//
                      //                                                            //
                      //                display     1                                 //
                      //==========================================================//
                      void display_2()
                      {
                             unsigned char scan_code = 0xf7;
                              sel_port = scan_code;
                              data_port = _7_segment[VALUE/1000];
                              delay(7);
                              data_port = 0x00;
                              sel_port = 0xff;
                              scan_code >>=1;
                              scan_code |=0xf8;    
                      
                              sel_port = scan_code;
                              data_port = _7_segment[VALUE%1000/100];
                              delay(7);
                              data_port = 0x00;
                              sel_port = 0xff;
                              scan_code >>=1;
                              scan_code |=0xf8;
                      
                              sel_port = scan_code;
                              data_port = _7_segment[VALUE%1000%100/10];
                              delay(7);
                              data_port = 0x00;
                              sel_port = 0xff;
                              scan_code >>=1;
                              scan_code |=0xf8;
                      
                              sel_port = scan_code;
                              data_port = _7_segment[VALUE%1000%100%10];
                              delay(7);
                              data_port = 0x00;
                              sel_port = 0xff;
                      }
                      
                      ////========================display 3=============================////
                      void display_1()
                      {
                             unsigned char scan_code = 0x7f,counter;
                             for(counter=0;counter<4;counter++)
                             {
                                  data_port = _7_segment[DEFAULT[counter]];
                                  sel_port = scan_code;
                                  sel_port |= IN_VISIBLE;
                                  delay(7);
                                  data_port = 0x00;
                                  sel_port = 0xff;
                                  scan_code >>=1;
                                  scan_code |=0x8f;
                             }
                      }
                       //==========================================================//
                      //                                                            //
                      //                delay                                     //
                      //==========================================================//         
                      void delay(int time)
                      {
                          int i,j;
                          for(i=0;i<time;i++)
                               for(j=0;j<time;j++)
                              {;}
                      }
                      //==========================================================//
                      //                                                            //
                      //                Timer0_ini                            //
                      //==========================================================//
                      void TIMER0_ini()
                      {
                          TMOD = 0x01;    //timer 1 16bit reload
                          TH0 = 0x00;
                          TL0 = 0x00;
                          TF0 = 0;
                          TR0 = 0;
                          ET0 = 1;     //enable interrupt timer1
                          
                      }
                      //==========================================================//
                      //                                                            //
                      //                Timer1_ini                            //
                      //==========================================================//
                      void TIMER1_ini()
                      {
                          TMOD |= 0x10;    //timer 1 16bit reload
                          TH1 = 0x00;
                          TL1 = 0x00;
                          TF1 = 0;
                          TR1 = 0;
                          ET1 = 1;     //enable interrupt timer1
                          
                      }
                      
                      //==========================================================//
                      //                                                            //
                      //                Timer1_interrupt                            //
                      //==========================================================//
                      void TIMER1_interrupt()    interrupt 3
                      {
                          TR1 = 0;    //stop timer1
                          TF1 = 0;    //clear TF1
                          TH1 = 0;
                          TL1 = 0;
                          CONTROL_INVISIBLE++;
                          if(CONTROL_INVISIBLE==10)
                          {
                              IN_VISIBLE = 0x00;
                          }
                          else if(CONTROL_INVISIBLE==20)
                          {
                              IN_VISIBLE = SHIFT_CURCOR;
                              CONTROL_INVISIBLE=0;
                           }
                          else {;}
                          TR1 = 1;
                          
                      }
                      //==========================================================//
                      //                                                            //
                      //                Timer0_interrupt                            //
                      //==========================================================//
                      void TIMER0_interrupt()    interrupt 1
                      {
                          TR0 = 0;    //stop timer1
                          TF0 = 0;    //clear TF1
                          TH0 = 0;
                          TL0 = 0;
                          lous_status++;
                          if(lous_status==10)
                          {
                              LOUS =1;//off lous
                              TR0 = 0;
                          }
                          else 
                              TR0 = 1;
                      }
                      //==========================================================//
                      //                                                            //
                      //                External Interrupt 1                        //
                      //==========================================================//
                      void EX1_interrupt()interrupt 2
                      { 
                          EX1 = 0; //    disable ex interrupt 1
                          TR1 = 1;    //enable TIMER1
                          IN_VISIBLE = 0x80;
                          SHIFT_CURCOR =       IN_VISIBLE;
                          CONTROL_INVISIBLE=0;
                          counter_status=0x00;
                          while(MODE==0){display_1();display_2(); }
                          while(counter_status!=0x04)
                          {
                                      while(MODE)
                                                  {
                                                       if(INC==0)
                                                      {
                                                           while(INC==0){display_1();display_2();}
                                                              DEFAULT[counter_status]++;
                                                              if(DEFAULT[counter_status]==0x0a)
                                                                  DEFAULT[counter_status]=0;
                                                          default_value();
                                                      }
                                                      if(DEC==0)
                                                      {
                                                          while(DEC==0){display_1();display_2();} 
                                                              if(DEFAULT[counter_status]==0x00)
                                                                  DEFAULT[counter_status]=9;
                                                              else
                                                              DEFAULT[counter_status]--;
                                                              default_value();
                                                      }
                                                      display_1();display_2(); 
                                                  }
                                                  while(MODE==0){display_1();display_2(); }
                                                  while(IN_VISIBLE==0x00){display_1();display_2(); }
                                                  IN_VISIBLE >>= 1;
                                                  SHIFT_CURCOR = IN_VISIBLE;
                                                  counter_status++;
                              
                          }
                          IE1 = 0;//clear external interrupt 1 flag
                          TR1 = 0;
                          EX1 = 1;
                      }
                       //=========================================================//
                       void check_value()
                       {
                            
                          for(temp = 0;temp<4;temp++)
                              temp3[temp] = ASCII[DEFAULT[temp]];
                          temp2 = atoi(temp3);
                          if(VALUE >= temp2&&VALUE!=0x0000)/////////////
                          {
                              relay=0; ///////
                              lous_status = 0;
                              LOUS = 0;    //on lous
                              TR0 = 1;//start timer0 
                              loi=0xaa; ///////
                            }
                            else
                            {
                             relay=1; ///////
                            loi=0x55;}///////         
                       }
                      //==========================================================//
                      //                                                            //
                      //                update default value                        //
                      //==========================================================//
                      void default_value()
                      {
                          unsigned char temp;
                          for(temp=0;temp<4;temp++)
                              write_eeprom(temp+0x04,DEFAULT[temp]);
                      }
                      //==========================================================//
                      void i2c_stop()
                      {
                           I2CSDA = 0;
                          I2CSCL = 1;
                          I2CSDA = 1;
                          delay(time);
                      }
                      
                      //==================================
                      //    write_eeprom
                      //==================================
                       void    write_eeprom(unsigned char add,unsigned char dat)
                       {
                              //=========================send Byte control write;
                              i2c_send_start(0xa0);
                              //=========================send Byte add
                              i2c_send (add);
                              //=========================send Byte data
                              i2c_send (dat);
                              i2c_stop();
                      
                       }
                       //==================================
                      //    read_eeprom
                      //==================================
                      unsigned char    read_eeprom(unsigned char add)
                       {
                               unsigned char GetByte;
                              //=========================send Byte control write;
                              i2c_send_start(0xa0);
                              //=========================send Byte add
                              i2c_send (add);
                              //=========================send Byte data
                              i2c_send_start (0xa1);
                              GetByte = i2c_read();
                              i2c_stop();
                      
                               return GetByte;
                       }
                      
                       //=================================
                       //i2c_send_start
                       //=================================
                       void i2c_send_start (unsigned char dat)
                       {
                            unsigned char i;
                          I2CSDA = 1;
                          I2CSCL = 1;
                          I2CSDA = 0;
                          I2CSCL = 0;
                          for(i = 0;i<8;i++)
                          {
                              if ( dat & 0x80)
                              {
                                  I2CSDA = 1;        // MSB first -> LSB last
                              }
                              else
                              {
                                  I2CSDA = 0;
                              }
                              
                              I2CSCL = 1;
                              dat=dat<<1;
                              I2CSCL = 0;
                          }
                          I2CSDA = 1;
                          I2CSCL = 1;
                          I2CSCL = 0;
                       }
                       //=================================
                       //i2c_send
                       //=================================
                       void i2c_send (unsigned char dat)
                       {
                            unsigned char i;
                          for(i = 0;i<8;i++)
                          {
                              if ( dat & 0x80)
                              {
                                  I2CSDA = 1;        // MSB first -> LSB last
                              }
                              else
                              {
                                  I2CSDA = 0;
                              }
                              I2CSCL = 1;
                              dat=dat<<1;
                              I2CSCL = 0;
                          }
                          I2CSDA = 1;
                          I2CSCL = 1;
                          I2CSCL = 0;
                       }
                       //=================================
                       //i2c_read
                       //=================================
                      unsigned char i2c_read ()
                       {
                            register unsigned char i, res;
                      
                          I2CSDA = 1; 
                          res = 0;
                          for (i=0;i<8;i++)     // each bit at a time, MSB first
                          {
                              I2CSCL = 0;
                              I2CSCL = 1;
                              res = res << 1;
                              if (I2CSDA) res++;
                              
                          }
                              I2CSDA = 1;     // BIT STOP        , =0 LA BIT START
                              I2CSCL = 1;
                              I2CSCL = 0;
                            return res ;
                       }
                      ////////////////////////////////////////////////////////
                      ///                    INTRO                            ///
                      //////////////////////////////////////////////////////
                      void intro()
                      {
                           unsigned char counter_char=0,index,time_shift,counter;
                           unsigned char __SELECT__ ;
                           while(HELLO[counter_char]!=0xff)
                                       counter_char++;
                           for(index=0;index<counter_char-8;index++)
                                  {
                                      for(time_shift=0;time_shift<20;time_shift++)
                                      {    
                                          __SELECT__ = 0xf7;
                                          for(counter=0;counter<8;counter++)
                                          {
                                              data_port = HELLO[counter+index];
                                              sel_port = __SELECT__;
                                              delay(7);
                                              sel_port = 0xff;     //disable all led
                                              data_port = 0x00;    //disable all led
                                              __SELECT__ >>= 1;
                                              __SELECT__ |= 0xf8;
                                          }
                                      }
                                  }
                          delay(100);
                      }
                      |

                      Comment


                      • #26
                        cảm ơn bạn nhiều . bạn thiết kế mạch đẹp thế

                        Comment


                        • #27
                          fermin_t4

                          có bài viết báo cáo về đếm sản phẩm này không, cho em với cuongna392@gmail.com

                          Comment


                          • #28
                            có ác nào giải thích hộ em cái phần lập trình cho nút nhấn set để cài đặt giá trị đếm với.em không hiểu được phần này.giúp em với

                            Comment


                            • #29
                              khong down duoc chumanh oi
                              0979.316.957
                              0905.028.957

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X