Thông báo

Collapse
No announcement yet.

[Hoàn thiện] Khóa mã Digital Key ! hoàn chỉnh sản phẩm

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

  • [Hoàn thiện] Khóa mã Digital Key ! hoàn chỉnh sản phẩm



    Code:
    #include <16F877A.h>
    #include <DEFINE_16F877A.h>
    #include <DEFINE_16F87x.h>
    #fuses  NOWDT,XT,NOPROTECT,NOLVP,PUT
    #use    delay(clock=4000000)
    
    #use standard_io (B)
    #use standard_io (A)
    
    #define E            PIN_D0
    #define RS          PIN_D1
    #define RW          PIN_D2
    #define LCD_D4      PIN_D4
    #define LCD_D5      PIN_D5
    #define LCD_D6      PIN_D6
    #define LCD_D7      PIN_D7
    
    #bit CANCEL    =0x05.1 // CANCEL = RA1
    #bit OK        =0x05.0 // OK    = RA0
    
    unsigned int8 key[] ; // mang luu cac so da nhap tu ban phim
    const unsigned int8 num[11] = {'0','1','2','3','4','5','6','7','8','9'} ;
    unsigned int8 num_ss[] ; // mang so sanh
    unsigned int8 a = 0 ; // bien dem cac so nhap tu ban phim
    unsigned int8 b = 1 ; // bien dem so lan sai ma
    unsigned int8 d     ; // bien ghi pass vao FLASH
    unsigned int8 g = 1 ; // bien thong bao ghi pass vao FLASH trong lan dau tien
    unsigned int8 h     ; // bien luu lai tong cac so da ghi vao FLASH
    
    void LCD_Init ( void );                    // ham khoi tao LCD
    void LCD_SetPosition ( unsigned int data );//Thiet lap vi tri con tro
    void LCD_PutChar ( unsigned int data );    // Ham viet1kitu/1chuoi len LCD
    void LCD_PutCmd ( unsigned int data ) ;    // Ham gui lenh len LCD
    void tao_xung_E();                        // Xung kich hoat
    void send_to_LCD( unsigned int data);      // Dat du lieu len chan Data
    
    void delay_ms_INT(unsigned long i)
    { unsigned long k , j ;
      for(k=0;k<=i;k++) { for(j=0;j<=i;j++){;} }
    }
    
    void LCD_Init ( void )
    {
        delay_ms(200); // thoi gian de LCD khoi dong
    
        output_low(RW);        // RW = 0
        output_low(RS);        // che do gui lenh
    
        send_to_LCD( 0x00 );
        output_high ( E ); output_low ( E ); delay_ms ( 10 );
    
    
        send_to_LCD( 0x03 );  /* init with specific nibbles to start 4-bit mode */
        output_high ( E ); output_low ( E ); delay_ms ( 3 ); // tao xung tren chan E
        output_high ( E ); output_low ( E ); delay_ms ( 3 );
        output_high ( E ); output_low ( E ); delay_ms ( 3 );
    
        send_to_LCD( 0x02 );  /* set 4-bit interface */
        output_high ( E ); output_low ( E ); delay_ms ( 3 ); // tao xung tren chan E
    
    
        LCD_PutCmd ( 0x2C );    /* function set (all lines, 5x7 characters) */
        LCD_PutCmd ( 0x0C);    /* display ON, cursor off, no blink */
        LCD_PutCmd ( 0x06 );    /* entry mode set, increment & scroll left */
        LCD_PutCmd ( 0x01 );    /* clear display */
    }
    
    void LCD_SetPosition ( unsigned int data )
    {
    
        send_to_LCD( swap ( data ) | 0x08 );
        output_high ( E ); output_low ( E ); delay_ms ( 3 ); // tao xung tren chan E
    
        send_to_LCD( swap ( data ) );
        output_high ( E ); output_low ( E ); delay_ms ( 3 ); // tao xung tren chan E
    
    }
    
    void LCD_PutChar ( unsigned int data )
    {
        output_high( RS ); //RS = 1
        output_low ( RW ); //RW = 0
    
        send_to_LCD( swap ( data ) );                        // gui 4 bit cao
        output_high ( E ); output_low ( E ); delay_ms ( 3 ); // tao xung tren chan E
    
        send_to_LCD( swap ( data ) );                        //gui 4 bit thap
        output_high ( E ); output_low ( E ); delay_ms ( 3 ); // tao xung tren chan E
    
    }
    
    void LCD_PutCmd ( unsigned int data )
    {
        output_low(RS); // RS = 0
        output_low(RW); // RW = 0
    
        send_to_LCD( swap(data) );    // gui 4 bit cao
        output_high (E); output_low (E); delay_ms (3);
    
        send_to_LCD( swap(data) );    // gui 4 bit thap
        output_high (E); output_low (E); delay_ms ( 3 );
    }
    
    
    void send_to_LCD( unsigned int data )
    {
        output_bit ( LCD_D4, data & 0x01 );
        output_bit ( LCD_D5, data & 0x02 );
        output_bit ( LCD_D6, data & 0x04 );
        output_bit ( LCD_D7, data & 0x08 );
    }
    
    void quetphim_hienthi()
    { PORTB = 0b111111110 ; if (RB4==0) { delay_ms_INT(50);            
                                          while(RB4==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('0') ; key[a++] = num[0];
                                        } ;
                            if (RB5==0) { delay_ms_INT(50);            
                                          while(RB5==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('3') ; key[a++] = num[3];
                                        } ;
                            if (RB6==0) { delay_ms_INT(50);            
                                          while(RB6==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('6') ; key[a++] = num[6];
                                        } ;
                            if (RB7==0) { delay_ms_INT(50);            
                                          while(RB7==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('9') ; key[a++] = num[9];
                                        } ;
    
      PORTB = 0b111111101 ; if (RB4==0) { delay_ms_INT(50);            
                                          while(RB4==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('1') ; key[a++] = num[1];
                                        } ;
                            if (RB5==0) { delay_ms_INT(50);            
                                          while(RB5==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('4') ; key[a++] = num[4];
                                        } ;
                            if (RB6==0) { delay_ms_INT(50);            
                                          while(RB6==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('7') ; key[a++] = num[7];
                                        } ;
      PORTB = 0b111111011 ; if (RB4==0) { delay_ms_INT(50);            
                                          while(RB4==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('2') ; key[a++] = num[2];
                                        } ;
                            if (RB5==0) { delay_ms_INT(50);            
                                          while(RB5==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('5') ; key[a++] = num[5];
                                        } ;
                            if (RB6==0) { delay_ms_INT(50);            
                                          while(RB6==0) continue ;
                                          delay_ms_INT(20);
                                          LCD_PutChar('8') ; key[a++] = num[8];
                                        } ;
    
    }
    
    #int_RB
    void ngat_RB(void)
    { LCD_PutCmd(0x83); 
      while (OK && CANCEL) quetphim_hienthi(); 
    
      if(!CANCEL) goto THOAT ;
                    
    
      if(!OK) {delay_ms_INT(50);            
               while(!OK) continue ;
               delay_ms_INT(20);
               if(g == 1) { LCD_PutCmd(0x01);
                          LCD_PutCmd(0xC0);
                          LCD_PutChar('W') ;
                          LCD_PutChar('r') ;
                          LCD_PutChar('i') ;
                          LCD_PutChar('t') ;
                          LCD_PutChar('t') ;
                          LCD_PutChar('i') ;
                          LCD_PutChar('n') ;
                          LCD_PutChar('g') ;
                          LCD_PutChar(' ') ;
                          LCD_PutChar('F') ;
                          LCD_PutChar('L') ;
                          LCD_PutChar('A') ;
                          LCD_PutChar('S') ;
                          LCD_PutChar('H') ;
                          for (d=1;d<=a;d++)
                              { write_eeprom(d,key[d]); 
                                PORTC = 0x08 ;delay_ms(250);PORTC = 0x00 ; 
                              };
                          g ++ ;
                          h = a ; goto THOAT ; // luu lai tong cac so da nhan & THOAT
                         };
               if (a == h )
                         {  LCD_PutCmd(0x01);
                            LCD_PutCmd(0xC0);
                            LCD_PutChar('R') ;
                            LCD_PutChar('e') ;
                            LCD_PutChar('a') ;
                            LCD_PutChar('d') ;
                            LCD_PutChar('i') ;
                            LCD_PutChar('n') ;
                            LCD_PutChar('g') ;
                            LCD_PutChar(' ') ;
                            
                            LCD_PutChar('F') ;
                            LCD_PutChar('L') ;
                            LCD_PutChar('A') ;
                            LCD_PutChar('S') ;
                            LCD_PutChar('H') ;
                            for (d=1;d<=a;d++)
                                { num_ss[d]= read_eeprom(d);delay_ms(250);
                                  if(key[d]!=num_ss[d]) goto HERE ;};
                            
                            LCD_PutCmd(0x01);
                            LCD_PutCmd(0x84);
                            LCD_PutChar('D') ;
                            LCD_PutChar('U') ;
                            LCD_PutChar('N') ;
                            LCD_PutChar('G') ;
                            LCD_PutChar(' ') ;
                            LCD_PutChar('M') ;
                            LCD_PutChar('A') ;
                            PORTC = 0x08 ; 
                            delay_ms(2000) ;
                            PORTC = 0x00 ;
                            b = 1 ;
                            goto THOAT ;
                            
                   HERE : 
                            LCD_PutCmd(0x01);
                            LCD_PutCmd(0x84);
                            LCD_PutChar('W') ;
                            LCD_PutChar('R') ;
                            LCD_PutChar('O') ;
                            LCD_PutChar('N') ;
                            LCD_PutChar('G') ;
                            LCD_PutChar('!') ;
                            delay_ms(1000) ;
                            
                          } ;
                  if (a!=h ){ LCD_PutCmd(0x01);
                              LCD_PutCmd(0x84);
                              LCD_PutChar('S') ;
                              LCD_PutChar('A') ;
                              LCD_PutChar('I') ;
                              LCD_PutChar(' ') ;
                              LCD_PutChar('M') ;
                              LCD_PutChar('A') ;
                               delay_ms(1000) ;
                             } ;
    
                  } ;
      b ++ ; 
      THOAT :
               a = 0 ;
               LCD_PutCmd(0x01);
               LCD_PutCmd(0xC5);
               LCD_PutChar('R') ;
               LCD_PutChar('e') ;
               LCD_PutChar('a') ;
               LCD_PutChar('d') ;
               LCD_PutChar('y') ;
               LCD_PutChar('!') ;
               if((b%4)==0) { PORTC = 0x04 ; delay_ms(1); PORTC = 0x00 ; b = 1 ; } ;
    }
    
    
    void main()
    { set_tris_A(0xFF); PORTA = 0xFF ;
      set_tris_B(0xF0); 
      set_tris_C(0x00); PORTC = 0;
      set_tris_D(0x00);
    
      LCD_Init(); 
    
      enable_interrupts(global);
      enable_interrupts(int_RB);
      ext_int_edge(H_to_L);
    
      LCD_PutCmd(0xC5);
      LCD_PutChar('R') ;
      LCD_PutChar('e') ;
      LCD_PutChar('a') ;
      LCD_PutChar('d') ;
      LCD_PutChar('y') ;
      LCD_PutChar('!') ;
    
      while(1){PORTB = 0xF0 ;} ;
    }
    sản phẩm làm xong ! chạy tốt ! mong các pro cho thêm thỉnh giáo !

  • #2
    Khoa mã này có nhược điểm là :
    - ko thể so sánh số đầu tiên mà bạn nhập từ bàn phím ,vd nhập 3952610 . ..thì số 3 nó ko so sánh .. có nghĩa nếu các bạn nhập 8952610 thì nó vẫn hiện "ĐÚNG MÃ"
    - khi ta để nguyên PIC trong mạch , tắt nguồn , rùi bật nguồn lại , nhấn reset, ct ko chạy đúng . Chỉ khi khi các bạn tháo PIC ra khỏi mạch , bật nguồn , gắn PIC vào lại , nhấn reset thì ct lại chạy đúng ...
    Chính tui cũng ko hiểu vì sao có hiện tượng này ? ko bit có phải bị nhiễu PIC nữa ?

    Comment


    • #3
      Nguyên văn bởi Zz_Bi_zZ Xem bài viết
      Khoa mã này có nhược điểm là :
      - ko thể so sánh số đầu tiên mà bạn nhập từ bàn phím ,vd nhập 3952610 . ..thì số 3 nó ko so sánh .. có nghĩa nếu các bạn nhập 8952610 thì nó vẫn hiện "ĐÚNG MÃ"
      - khi ta để nguyên PIC trong mạch , tắt nguồn , rùi bật nguồn lại , nhấn reset, ct ko chạy đúng . Chỉ khi khi các bạn tháo PIC ra khỏi mạch , bật nguồn , gắn PIC vào lại , nhấn reset thì ct lại chạy đúng ...
      Chính tui cũng ko hiểu vì sao có hiện tượng này ? ko bit có phải bị nhiễu PIC nữa ?
      Góp ý với bạn:
      - Nó không so sánh số đầu tiên là bạn dùng sai biến a và d. Bạn khởi tạo biến a giá trị 0, khi quét phím thì mảng key sẽ bắt đầu từ phần tử 0, trong khi hàm ghi dữ liệu vào eeprom thì bạn lại cho d chạy từ 1. Việc đọc và ghi eeprom đều như vậy nên 2 cái sai bằng 1 cái đúng.
      --> Cách sửa thì một trong những cách sau:
      + Đơn giản nhất là cho a = 1 lúc khởi tạo
      + Trong vòng lặp quét phím: sửa từ a++ thành ++a.
      + Sửa vòng lặp đọc, ghi eeprom sửa thành for(d=0...

      - Còn vấn đề 2: tụ lọc nguồn của bạn hơi thấp, cho thành 1000uF đi. Mình không dùng CCS nhưng trong dòng #fuses có cái nào đại loại như NODEBUG không ? Bạn mô tả hiện tượng giống như "sờ" tay vào PIC mới chạy.
      Bạn test rồi bá cáo xem thế nào

      Thắc mắc:
      - Bạn dùng CCS sao không dùng hàm delay và hàm LCD built-in của nó ?
      - Phần mạch dao động nối ra loa tớ thấy lằng nhằng, chỉnh có mất nhiều thời gian không ? Sao không dùng PWM nhỉ, SCR nó thể dùng phần tạo xung khác.
      - Vì sao lại phải dùng SCR nhỉ, có nhiều cách cơ mà, để khóa nó thì bạn làm thế nào
      - Sao mạch này lại cần 2 nguồn, nguồn 5V USB cho PIC, nguồn 12V cho phần khác chẳng nhẽ lại phải có một cái máy tính cấp nguồn ah hay có phần cấp nguồn cho ra 5V khác.
      - Acquy thế nào ? Mất điện thì móm à
      - Chưa thấy đầu ra điều khiển một khâu chấp hành nào cả
      Last edited by namqn; 23-12-2007, 00:41.

      Comment


      • #4
        Bạn làm cái mạch còi hú .. phũ ... quá

        Mà bây giờ mấy cái khóa có nhiều phím từ 0 đến 9 chỉ để dọa trẻ em thôi , nó không an toàn về cơ khí , thậm chí không an toàn về khâu xử lý .

        Sao bạn không thử làm cái khóa với chỉ một nút bấm thôi . Tây bây giờ nó chuộng cái loại 1 nút lắm , an toàn về cơ khí , dễ vận hành bảo mật, vì có nhìn đặt camera theo dõi cũng chưa chắc đã mở trộm được .
        Hình như nó có tên One button security lock thì phải

        --- Còn nhiều hạn chế trong mạch của bạn mà bạn Hòa đã nêu sơ sơ rồi đó

        +++ Còn một cơ chế nữa là bạn có thiết kế bảo vệ đầu ra không ??? bạn sẽ làm gì khi người ta vô hiệu hóa cái còi hay bấm loạn xạ ????
        trong trường hợp pic bị treo, chốt mắc kẹt thì có nghĩa là khỏi vào nhà ư ???

        +++ nhiều vẫn đề nữa ...
        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

        Comment


        • #5
          Thu nhận 2 ý kiến của 2 bậc tiền bối . Đúng là em đã nghĩ đến vấn đề này rùi . Chỉ gây khó khăn cho đối phương thui , chứ trộm đã muốn vào nhà thì nó chả cần mở khóa đâu ! em làm chỉ để học viết ct cho PIC thôi .... Nếu thực sự phát triển thành phẩm thì còn nhìu vấn đề lắm ... Đa tạ nhìu nhìu !

          Comment


          • #6
            Thắc mắc:
            - Bạn dùng CCS sao không dùng hàm delay và hàm LCD built-in của nó ?
            - Phần mạch dao động nối ra loa tớ thấy lằng nhằng, chỉnh có mất nhiều thời gian không ? Sao không dùng PWM nhỉ, SCR nó thể dùng phần tạo xung khác.
            - Vì sao lại phải dùng SCR nhỉ, có nhiều cách cơ mà, để khóa nó thì bạn làm thế nào
            - Sao mạch này lại cần 2 nguồn, nguồn 5V USB cho PIC, nguồn 12V cho phần khác chẳng nhẽ lại phải có một cái máy tính cấp nguồn ah hay có phần cấp nguồn cho ra 5V khác.
            - Acquy thế nào ? Mất điện thì móm à
            - Chưa thấy đầu ra điều khiển một khâu chấp hành nào cả
            - Xây dựng hàm delay_ms_INT ? vì lúc đầu khi viết ct , em cho LCD hiện "Ready" ở dạng có hiệu ứng chạy chữ , nên mới làm thêm hàm này , sợ khi ct nhảy vào ngắt , lại gọi tiếp delay_ms có sẵn thì sẽ dễ làm tràn Stack . Sau quyết định bỏ hiệu ứng . em cũng chả buồn xóa làm gì .. hihi hơi nhát !
            - Muốn tự mình viết hàm cho LCD theo ý mình , nên ko muốn dùng cái có sẵn .
            - Ủa ? mạch tạo dao động & khuyếch CS ra loa đâu có cân chỉnh gì ! ráp đúng là chạy thui . Vì mạch còi hú này làm từ hồi hè ...nên bê nguyên si vào cho nó hoành tráng ấy mà !
            - Em dùng SCR , vì muốn chỉ cần PIC kích 1 lần là còi hú ko bao giờ ngừng . Chỉ khi nào ta ấn công tắc thường đóng SW1 ( hở nguồn) thì còi mới ngừng . Cái công tắc này em lấy từ máy điện thoại ấy ! nhấn nhả vô tư
            - Dùng 2 nguồn ? vì do hoàn cảnh . Chả là em mua nhầm LCD lởm của ku bạn , nó hút dòng ghê wa . 7805 nhà ta đã cho ra điện áp 4,5v rùi , khi LCD bật , em đo nguồn còn có 4v ... hic ! thui chuyển sang dùng nguồn USB cho chắc ... để khi lên báo cáo ko có trường hợp gì xảy ra !
            Nhân đây cho em hỏi :
            - Thời gian ghi vào EEPROM là bao nhiêu ? em ko bit nên để đại 250ms, thấy hơi thừa thật !
            - Áp khi thực hiện ghi EEPROM có nhất thiết đúng là 5v ko ? để em chữa lại mạch dùng 1 nguồn cho đỡ vất vả !

            Comment


            • #7
              Nguyên văn bởi Zz_Bi_zZ Xem bài viết
              - Thời gian ghi vào EEPROM là bao nhiêu ? em ko bit nên để đại 250ms, thấy hơi thừa thật !
              - Áp khi thực hiện ghi EEPROM có nhất thiết đúng là 5v ko ? để em chữa lại mạch dùng 1 nguồn cho đỡ vất vả !
              Thời gian ghi EEPROM không phải là lâu, bạn có thể hỏi vòng cờ EEIF (EE Write Complete Interrupt Flag). Nên vô hiệu các ngắt trước khi ghi (GIE=0).

              Còn ý 2 chắc bạn nhầm giữa ghi EEPROM và điện áp lập trình Vpp. Bạn chỉ cần 1 nguồn 5V thôi. 4.5V mà bạn nói là hơi thấp quá đấy có thể khiến PIC bị reset.

              Comment


              • #8
                - Nó không so sánh số đầu tiên là bạn dùng sai biến a và d. Bạn khởi tạo biến a giá trị 0, khi quét phím thì mảng key sẽ bắt đầu từ phần tử 0, trong khi hàm ghi dữ liệu vào eeprom thì bạn lại cho d chạy từ 1. Việc đọc và ghi eeprom đều như vậy nên 2 cái sai bằng 1 cái đúng.
                --> Cách sửa thì một trong những cách sau:
                + Đơn giản nhất là cho a = 1 lúc khởi tạo
                + Trong vòng lặp quét phím: sửa từ a++ thành ++a.
                + Sửa vòng lặp đọc, ghi eeprom sửa thành for(d=0...
                đã chữa lại ct như anh nói .. quả là đã so sánh đc giá trị đầu của mảng.. Nhưng vẫn chưa hiểu kỹ lắm về cách làm này !
                - Lúc đầu ta gán a = 1 . Như vậy khi nhấn phím vd :3952610 . Thì thứ tự trong hàm quét phím sẽ là :
                Code:
                 
                          key[1] = '3' , a = 2
                          key[2] = '9' , a = 3
                          ...
                          key[6] = '1' , a = 7
                          key[7] = '0' , a = 8
                nhưng khi ghi vào EEPROM , theo cách của anh thì
                Code:
                 for(d=0;d<=a;d++)  { write_eeprom(d,key[d]); ...}
                diễn giải ra ta sẽ thấy :
                Code:
                 
                           d=0 , 0x00 trong EEPROM có giá trị key[0]
                           d=1 , 0x01 trong EEPROM có giá trị key[1]
                           .....
                rõ ràng ta thấy key[0] ko có giá trị trong hàm quét phím ????
                Em đang lúng túng chưa thông chỗ này !

                Comment


                • #9
                  Nguyên văn bởi Zz_Bi_zZ Xem bài viết
                  Em đang lúng túng chưa thông chỗ này !
                  Bạn lại không đọc kĩ chỗ đó rồi ! Mình viết là một trong những cách sau, tức là chọn 1 trong 3 thôi.
                  - Nếu cho a=1 thì nó phù hợp với d=1
                  - Nếu viết ++a thì lúc này a=0 nó sẽ +1 trước khi dùng tương đương với a=1
                  - Nếu sửa d từ 0 sẽ phù hợp với a từ 0

                  Comment


                  • #10
                    Nguyên văn bởi Zz_Bi_zZ Xem bài viết
                    - Dùng 2 nguồn ? vì do hoàn cảnh . Chả là em mua nhầm LCD lởm của ku bạn , nó hút dòng ghê wa . 7805 nhà ta đã cho ra điện áp 4,5v rùi , khi LCD bật , em đo nguồn còn có 4v ... hic ! thui chuyển sang dùng nguồn USB cho chắc ... để khi lên báo cáo ko có trường hợp gì xảy ra !
                    Nhân đây cho em hỏi :
                    Bạn dùng nguyên cả nguồn 5V để cấp cho LCD Backlight nên 7805 nóng và sụt áp là phải rồi. PIC là dòng nanowat rồi nên dùng 7805 vô tư, không bị nóng. Thêm con trở (max 100 Ohm) vào để hạn dòng cho backlight.
                    Mà sao con 7805 của bạn lại ra có 4.5, xem lại nguồn vào, tối thiểu là 7V thì đầu ra sẽ phải là 4.9xx V. Mắc thêm tụ 104 ngay sát chân nguồn của PIC để giảm nhiễu Xem lại thiết kế nguồn nhé, vì nó rất quan trọng. Sử dụng thêm một diode 4007 và bộ pin 5V để có nguồn backup.
                    Khi sử dụng hàm ghi EEPROM của CCS thì không nên ghi liên tiếp quá nhiều byte, nên có thời gian đợi, đọc thêm datasheet của PIC để biết thời gian đọc ghi ROM.

                    Để tăng tính bảo mật, bạn thêm một chương trình đổi mã tự động sau mỗi lần nhập. Với quy tắc đổi mã của chương trình lần sau nhập bạn sẽ tuân theo quy tắc đó để nhập mã. Như vậy độ bảo mật sẽ tăng lên. Có nhiều cách để tăng độ bảo mật và an toàn, tin cậy cho hệ thống.
                    Chúc thành công.
                    Ethernet-RS232, PIC Webserver, RFID Reader
                    CallerID, Cảnh báo BTS, ...
                    0988006696
                    linhnc308@gmail.com
                    http://linhnc308.blogspot.com

                    Comment


                    • #11
                      Bạn lại không đọc kĩ chỗ đó rồi ! Mình viết là một trong những cách sau, tức là chọn 1 trong 3 thôi.
                      - Nếu cho a=1 thì nó phù hợp với d=1
                      - Nếu viết ++a thì lúc này a=0 nó sẽ +1 trước khi dùng tương đương với a=1
                      - Nếu sửa d từ 0 sẽ phù hợp với a từ 0
                      Đã hiểu ! Đúng là chưa đọc kỹ hướng dẫn của anh !

                      Comment


                      • #12
                        Bạn dùng nguyên cả nguồn 5V để cấp cho LCD Backlight nên 7805 nóng và sụt áp là phải rồi. PIC là dòng nanowat rồi nên dùng 7805 vô tư, không bị nóng. Thêm con trở (max 100 Ohm) vào để hạn dòng cho backlight.
                        Mà sao con 7805 của bạn lại ra có 4.5, xem lại nguồn vào, tối thiểu là 7V thì đầu ra sẽ phải là 4.9xx V. Mắc thêm tụ 104 ngay sát chân nguồn của PIC để giảm nhiễu Xem lại thiết kế nguồn nhé, vì nó rất quan trọng. Sử dụng thêm một diode 4007 và bộ pin 5V để có nguồn backup.
                        em định dùng pin9v để làm backup nhưng sợ dòng của pin yếu , chẳng bao lâu sẽ cạn

                        Khi sử dụng hàm ghi EEPROM của CCS thì không nên ghi liên tiếp quá nhiều byte, nên có thời gian đợi, đọc thêm datasheet của PIC để biết thời gian đọc ghi ROM.
                        trong khi ghi & đọc EERROM em đã delay_ms(250) cho mỗi lần ghi - đọc 1 byte

                        Để tăng tính bảo mật, bạn thêm một chương trình đổi mã tự động sau mỗi lần nhập. Với quy tắc đổi mã của chương trình lần sau nhập bạn sẽ tuân theo quy tắc đó để nhập mã. Như vậy độ bảo mật sẽ tăng lên
                        cái này em cũng đã nghĩ ... hi vọng hoàn chỉnh chương trình để thử nghiệm ở cửa phòng của em ... hiii ..cho bọn bạn lác mắt chơi

                        Comment


                        • #13
                          Nguyên văn bởi Zz_Bi_zZ Xem bài viết
                          em định dùng pin9v để làm backup nhưng sợ dòng của pin yếu , chẳng bao lâu sẽ cạn

                          trong khi ghi & đọc EERROM em đã delay_ms(250) cho mỗi lần ghi - đọc 1 byte

                          cái này em cũng đã nghĩ ... hi vọng hoàn chỉnh chương trình để thử nghiệm ở cửa phòng của em ... hiii ..cho bọn bạn lác mắt chơi
                          Nguyên nhân khiến mạch của bạn tiêu tốn dòng nhiều là do bạn chưa lập trình chế độ tiết kiệm điện cho hệ thống, lấy ví dụ rõ nhất là ở đèn LCD backlight, đây là phần tử ngốn dòng nhiều nhất (trên 60mA), bạn cần tính trở hạn dòng cho hợp lý và thêm một con trans C1815 để điều khiển on_off cho nó. bt đèn BL sẽ luôn tắt, chỉ khi nào bạn nhập phím thì đèn mới sáng. Dùng thêm ngắt Timer để tính toán, sau khi nhập xong thì đền BL sẽ lại tự động tắt và hệ thống về chế độ IDLE. Những con Role bạn sử dụng trong mạch cũng vậy không sử dụng trạng thái tích cực của Role để làm ngắt thiết bị. Nên dùng tiếp điểm NO-thường mở để. Chỉ khi nào cần đóng thiết bị thì mới nên cấp điện cho cuộn dây rơ le. Có nhiều biện pháp khác nữa để tiết kiệm, có thể lập trình khi chạy PIN thì ko cần dùng LCD,đảm bảo hệ thống sẽ chạy được lâu.

                          Ghi đọc EEPROM không cần đợi quá lâu như vậy, phung phí thời gian hệ thống và tốn điên . Chỉ cần đợi 10us là được rồi, như vậy vẫn còn nhiều đấy.

                          Chúc bạn thành công.
                          Bạn làm được đến vậy là rất tốt rồi, cố gắng hoàn thiện sản phẩm. Nhớ lại trước tôi làm cái khóa điện tử này vẫn còn nhiều vấn đề chưa giải quyết, bây h thấy buốn cười, tại sao ngày đó lại làm như thế
                          Ethernet-RS232, PIC Webserver, RFID Reader
                          CallerID, Cảnh báo BTS, ...
                          0988006696
                          linhnc308@gmail.com
                          http://linhnc308.blogspot.com

                          Comment


                          • #14
                            ah ! thì ra là vậy ! cảm ơn về sự chỉ dẫn tận tình của anh !

                            Comment


                            • #15
                              híc,,em là Thành Viên Mới ,,em cũng đang làm một cái đồ án về MẠCH KHÓA SỐ cũng tương tự như Bi nhưng vấn đề nó đơn giản hơn(Y/C: Nhập đc mã,Khi Nhập đúng thì tác động đến rơle,giới hạn MM là 3kí tự),,em có đọc tham khảo sản phẩm của Bi nhưng nói thật em chưa hiểu biết nhiều(thậm chí nói là dốt) về Điện Tử lắm nên đâm ra xem mà vẫn kô hiểu làm cách nào để sửa lại cho giống đồ án của em,,,Rất Mong Được Các Anh,Các Bạn Giúp Đỡ nhiều..
                              *Các anh,các bạn nào giúp đỡ thì liện hệ qua YM dùm em(mình)..
                              YM!: thefirst_timedn@yahoo.com

                              À, còn nữa em ở Đà Nẵng có anh nào, bạn nào ở Đà Nẵng thì em (mình) rất mong đc gặp ở ngoài để dễ dàng học hỏi các anh,các bạn hơn,,

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X