MTouch PCB

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • kimhuynguyen
    Đệ tử 3 túi
    • Nov 2007
    • 48

    #1

    MTouch PCB

    Xin khai trương box này bằng một layout MTouch vẽ bằng Eagle, sử dụng 16F727.

    Chỉ làm chức năng MTouch, kết nối với thiết bị khác thông qua UART.
    Attached Files
    More friends more foods
  • ptt3i
    Đệ tử 1 túi
    • Mar 2009
    • 12

    #2
    Bạn kimhuynguyen có thể nói rõ hơn một chút chút không?
    Thực sự thì ptt3i không hiểu rõ lắm về nội dung và mục đích của post của bạn lắm.

    Nếu bạn cảm thấy không phiền thì có thể giải thích ý tưởng của bạn rõ rõ hơn một chút được không?

    Xin cám ơn bạn rất nhiều.
    Bài viết hữu ích với bạn thì nhấn thanks nhé.

    Comment

    • phamminhtuan
      Super Moderator
      • Feb 2006
      • 150

      #3
      Ủng hộ kimhuynguyen mình POST code viết bằng CCS C cho mạch của bạn

      CODE CCS C
      Code:
      /*Author
          R&P Forwarding - Trading Co., Ltd.
          58/48 Nguyen Minh Hoang, Ward 12, Tan Binh District, HCMC, Viet Nam.
          http://dientu.rpc.vn
          
      */
      #include<16f727.h>
      #fuses    HS, NOWDT, MCLR
      #use delay(clock=20Mhz)
      #use fast_io(A)
      #use fast_io(B)
      #use fast_io(C)
      #use fast_io(D)
      #use fast_io(E)
      
      #byte    ANSELA = 0x185
      #byte    ANSELB = 0x186
      #byte    ANSELD = 0x188
      #byte    ANSELE = 0x189
      
      #byte    PORTA = 0x5
      #byte    PORTB = 0x6
      #byte     PORTC = 0x7
      #byte    PORTD = 0x8
      #byte    PORTE = 0x9
      
      #byte    TRISA = 0x85
      #byte     TRISB = 0x86
      #byte    TRISC = 0x87
      #byte     TRISD = 0x88
      #byte    TRISE = 0x89
      
      
      
      #byte    T2CON =  0x012                    // T2ON, prescale = 1:16
      #byte    T1CON  = 0x010            // Timer1 enable, source= capacity sensing, 1:1 prescale, don't sync with sys clock
      #byte    T1GCON = 0x08F            // T1GSS = Timer 2, toggle mode
      #byte    PR2 =     0x092
      #byte    OSCTUNE    = 0x091
      #byte    OSCCON    = 0x090
      
      #byte     CPSCON0 = 0x108                // control settings
      #byte    CPSCON1 = 0x109                        // init to channel select = 0 (4 LSb's)
      
      
      #bit     TMR1GIF   = 0x0C.7                        // clear gate intpt flag
      #bit     TMR1GIE   = 0x8C.7                    // enable gate intpt
      #bit    PEIE      = 0x8B.6                        // enable peripheral intpts
      #bit    TMR2IF       = 0x0C.1
      #bit    TMR2IE         = 0x8C.1
      #bit    GIE         = 0x8B.7
      #bit     TMR1ON        = 0x10.0
      
      #bit    LED1_MUX    = PORTA.0
      #bit    LED2_MUX    = PORTA.1
      #bit    LED3_MUX    = PORTA.2
      #bit    LED4_MUX    = PORTA.3
      #bit    LED5_MUX    = PORTB.6
      #bit    LED6_MUX    = PORTB.7
      #bit    LED7_MUX    = PORTC.0
      #bit    LED8_MUX    = PORTE.2
      
      #bit    TRIS_LED1    = TRISA.0
      #bit    TRIS_LED2    = TRISA.1
      #bit    TRIS_LED3    = TRISA.2
      #bit    TRIS_LED4    = TRISA.3
      #bit    TRIS_LED5    = TRISB.6
      #bit    TRIS_LED6    = TRISB.7
      #bit    TRIS_LED7    = TRISC.0
      #bit    TRIS_LED8    = TRISE.2
      
      
      
      
      #define BOUNCE_TIME 2
      unsigned char index;
      unsigned long     reading[16];        // current reading for each button
      unsigned long     average[16];        // running average for each button
      unsigned long     threshold;                // threshold value is req'd # counts decrease from avg
      unsigned long    bigval;                        // current button bigval   - for averaging technique
      unsigned long    smallavg;                    // current button smallavg - for averaging technique
      
      
      typedef struct{
          struct {
              unsigned char bounce;
          }BYTES;    
          struct {
              unsigned char isPress:1;
              unsigned char flagPress:1;
              unsigned char isRelease:1;    
              unsigned char unused:5;
          }FLAG;    
      } BUTTON;
      
      BUTTON    BTN[16];
          
      
      
      void init();
      void main() {
          unsigned char i;
          init();
      
      
          while(1) {    
              for(i=0; i<16; i++) {
                  //button i is Pressed
                  if(BTN[i].FLAG.isPress) {
      
                      
                      //Your code here when BTN[i] Pressed
                      
                      //Must Clear when BTN Press Processed
                      BTN[i].FLAG.isPress = 0;
                  
                  //button i is Released
                  }else if(BTN[i].FLAG.isRelease) {
      
                      //Your code here when BTN[i] Release
                      
                      //Must Clear when BTN Release Processed
                      BTN[i].FLAG.isRelease = 0;
                  }
                  
              //end for    
              }
          
          }    
      }    
      
      void init() {    
          char i;
          //setup_oscillator(OSC_8MHZ);
          for (index=0; index<16; index++){
              average[index] = 0;
              reading[index] = 0;
          }
          ANSELA = 0b00110000;
          TRISA  = 0b11111111;
          
          ANSELB = 0b00111111;
          TRISB  = 0b11111111;
          
          ANSELD = 0b11111111;
          TRISD  = 0b11111111;
          TRISC  = 0b11111111;
          
          ANSELE = 0b00000000;
          TRISE  = 0b00000000;
          
          T2CON  = 0b011110111;                    // T2ON, prescale = 1:16
          T1CON  = 0b11000101;                // Timer1 enable, source= capacity sensing, 1:1 prescale, don't sync with sys clock
          T1GCON = 0b11100010;                // T1GSS = Timer 2, toggle mode
          PR2 = 0xB4;
          
          CPSCON0 = 0b10001100;                // control settings
          CPSCON1 = 0x01;                        // init to channel select = 0 (4 LSb's)
          index = 0;
          
          TMR1GIF   = 0;                        // clear gate intpt flag
          TMR1GIE   = 1;                        // enable gate intpt
          PEIE      = 1;                        // enable peripheral intpts
          TMR2IF = 0;
          TMR2IE = 1;
          GIE = 1;
      
          for(i=0; i<16; i++) BTN[i] = 0;
          //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
          //enable_interrupts(INT_RTCC);
      }    
      
      #INT_DEFAULT 
      void global_isr() {
          if (TMR1GIF && TMR1GIE) {
              TMR1GIF = 0;                    // clear intpt flag
              TMR1ON = 0;                        // Timer1 off
              
              bigval = get_timer1();
              bigval = bigval * 4;
              reading[index] = bigval;
              smallavg = average[index] / 4;
              threshold = average[index]>>1;                                    // ratiometric threshold from avail above (& combinations)
      
              if (bigval < average[index] - threshold) 
              {
                  if(BTN[index].BYTES.bounce < BOUNCE_TIME) BTN[index].BYTES.bounce++;
                  if(!BTN[index].FLAG.flagPress && BTN[index].BYTES.bounce == BOUNCE_TIME) {
                      BTN[index].FLAG.isPress = 1;    
                      BTN[index].FLAG.flagPress = 1;
                  }    
              }
              else 
              {
                  if(BTN[index].BYTES.bounce > 0) BTN[index].BYTES.bounce--;
                  if(BTN[index].FLAG.flagPress && BTN[index].BYTES.bounce == 0) {
                      BTN[index].FLAG.flagPress = 0;
                      BTN[index].FLAG.isRelease = 1;    
                  }    
                  // Perform average after detection comparison
                  average[index] += bigval/4 - smallavg;
              }
              set_timer1(0);
              TMR1ON  = 1;                // Set up for next channel
              index ++;
               index &= 0x0F;;
              CPSCON1 = index;
          }else if(TMR2IF) {
              TMR2IF = 0;
          }
          
      }
      Attached Files
      Last edited by phamminhtuan; 27-07-2009, 10:50 AM. Lý do: Bổ sung thông tin
      Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
      http://www.picvietnam.com/forum/showthread.php?t=1263

      Comment

      • quyenbn87
        Nhập môn đệ tử
        • Jun 2009
        • 1

        #4
        thanks.bạn nhé.nhưng bạ có thể nói rõ hơn 1 chút đc không bạn ???

        Comment

        • kimhuynguyen
          Đệ tử 3 túi
          • Nov 2007
          • 48

          #5
          Cảm ơn phamminhtuan đã ủng hộ về firmware.

          Chức năng của mạch này là thay cái Keypad 4x4 (có bán ở Letran hoặc TMe)
          Trên mạch có thiết kế Buzzer và Led. Khi chạm tay vào phím buzzer sẽ kêu và đèn sáng cho đến khi bỏ tay ra.

          Đồng thời dữ liệu truyền ra UART là 2 byte (16 bit tương ứng với 16 phím-có thể nhấn nhiều phím cùng lúc)

          Mong bạn phamminhtuan tiếp tục coding.
          More friends more foods

          Comment

          • phamminhtuan
            Super Moderator
            • Feb 2006
            • 150

            #6
            Nguyên văn bởi kimhuynguyen View Post
            Cảm ơn phamminhtuan đã ủng hộ về firmware.

            Chức năng của mạch này là thay cái Keypad 4x4 (có bán ở Letran hoặc TMe)
            Trên mạch có thiết kế Buzzer và Led. Khi chạm tay vào phím buzzer sẽ kêu và đèn sáng cho đến khi bỏ tay ra.

            Đồng thời dữ liệu truyền ra UART là 2 byte (16 bit tương ứng với 16 phím-có thể nhấn nhiều phím cùng lúc)

            Mong bạn phamminhtuan tiếp tục coding.
            Mình nghĩ code như vậy đủ rồi, ai muốn viết thêm cái gì thì tùy người đó thôi, mình Post lên thêm code cho Hi-Tech C, lúc trước mình làm chạy rồi - nhưng phiên code này chưa test, nhưng có thể đảm bảo 99% là sẽ chạy trừ những trường hợp không chạy .
            Giải thuật Mtouch tham khảo ở App Notes của Microchip nếu không muốn nói là lấy của nó luôn

            CODE HT-PIC C
            Code:
            /*Author
                R&P Forwarding - Trading Co., Ltd.
                58/48 Nguyen Minh Hoang, Ward 12, Tan Binh District, HCMC, Viet Nam.
                http://dientu.rpc.vn
                
                Hi-Tech PICC Version 0.10 XTAL 20Mhz
                
            */
            #include<htc.h>
            
            __CONFIG(HS & WDTDIS  & UNPROTECT );
            
            
            
            #define BOUNCE_TIME 2
            unsigned char index;
            unsigned long     reading[16];        // current reading for each button
            unsigned long     average[16];        // running average for each button
            unsigned long     threshold;                // threshold value is req'd # counts decrease from avg
            unsigned long    bigval;                        // current button bigval   - for averaging technique
            unsigned long    smallavg;                    // current button smallavg - for averaging technique
            
            
            typedef union{
                unsigned short Val;
                struct {
                    unsigned char bounce;
                    struct {
                        unsigned char isPress:1;
                        unsigned char flagPress:1;
                        unsigned char isRelease:1;    
                        unsigned char unused:5;
                    }FLAG;
                }BYTES;    
            
            } BUTTON;
            
            BUTTON    BTN[16];
                
            
            
            void init();
            void main() {
                unsigned char i;
                init();
            
            
                while(1) {    
                    for(i=0; i<16; i++) {
                        //button i is Pressed
                        if(BTN[i].BYTES.FLAG.isPress) {
            
                            
                            //Your code here when BTN[i] Pressed
                            
                            //Must Clear when BTN Press Processed
                            BTN[i].BYTES.FLAG.isPress = 0;
                        
                        //button i is Released
                        }else if(BTN[i].BYTES.FLAG.isRelease) {
            
                            //Your code here when BTN[i] Release
                            
                            //Must Clear when BTN Release Processed
                            BTN[i].BYTES.FLAG.isRelease = 0;
                        }
                        
                    //end for    
                    }
                
                }    
            }    
            
            void init() {    
                char i;
                //setup_oscillator(OSC_8MHZ);
                for (index=0; index<16; index++){
                    average[index] = 0;
                    reading[index] = 0;
                }
                ANSELA = 0b00110000;
                TRISA  = 0b11111111;
                
                ANSELB = 0b00111111;
                TRISB  = 0b11111111;
                
                ANSELD = 0b11111111;
                TRISD  = 0b11111111;
                TRISC  = 0b11111111;
                
                ANSELE = 0b00000000;
                TRISE  = 0b00000000;
                
                T2CON  = 0b011110111;                    // T2ON, prescale = 1:16
                T1CON  = 0b11000101;                // Timer1 enable, source= capacity sensing, 1:1 prescale, don't sync with sys clock
                T1GCON = 0b11100010;                // T1GSS = Timer 2, toggle mode
                PR2 = 0xB4;
                
                CPSCON0 = 0b10001100;                // control settings
                CPSCON1 = 0x01;                        // init to channel select = 0 (4 LSb's)
                index = 0;
                
                TMR1GIF   = 0;                        // clear gate intpt flag
                TMR1GIE   = 1;                        // enable gate intpt
                PEIE      = 1;                        // enable peripheral intpts
                TMR2IF = 0;
                TMR2IE = 1;
                GIE = 1;
            
                for(i=0; i<16; i++) BTN[i].Val = 0;
                //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
                //enable_interrupts(INT_RTCC);
            }    
            
            void interrupt
             global_isr() {
                if (TMR1GIF && TMR1GIE) {
                    TMR1GIF = 0;                    // clear intpt flag
                    TMR1ON = 0;                        // Timer1 off
                    
                    bigval = (unsigned short)((TMR1H <<8) | TMR1L);
                    bigval = bigval * 4;
                    reading[index] = bigval;
                    smallavg = average[index] / 4;
                    threshold = average[index]>>1;                                    // ratiometric threshold from avail above (& combinations)
            
                    if (bigval < average[index] - threshold) 
                    {
                        if(BTN[index].BYTES.bounce < BOUNCE_TIME) BTN[index].BYTES.bounce++;
                        if(!BTN[index].BYTES.FLAG.flagPress && BTN[index].BYTES.bounce == BOUNCE_TIME) {
                            BTN[index].BYTES.FLAG.isPress = 1;    
                            BTN[index].BYTES.FLAG.flagPress = 1;
                        }    
                    }
                    else 
                    {
                        if(BTN[index].BYTES.bounce > 0) BTN[index].BYTES.bounce--;
                        if(BTN[index].BYTES.FLAG.flagPress && BTN[index].BYTES.bounce == 0) {
                            BTN[index].BYTES.FLAG.flagPress = 0;
                            BTN[index].BYTES.FLAG.isRelease = 1;    
                        }    
                        // Perform average after detection comparison
                        average[index] += bigval/4 - smallavg;
                    }
                    TMR1H = 0;
                    TMR1L = 0;
                    TMR1ON  = 1;                // Set up for next channel
                    index ++;
                     index &= 0x0F;;
                    CPSCON1 = index;
                }else if(TMR2IF) {
                    TMR2IF = 0;
                }
                
            }
            Attached Files
            Last edited by phamminhtuan; 27-07-2009, 10:50 AM.
            Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
            http://www.picvietnam.com/forum/showthread.php?t=1263

            Comment

            • linhnc308
              Đệ tử 5 túi
              • Oct 2005
              • 117

              #7
              Mục này là các dự án mã mở. Tôi thấy có rất nhiều bạn tải tài liệu về rồi nhưng phần cảm ơn sao ít quá. Diễn đàn có nút cảm ơn không phải chỉ để cho vui mắt đâu các bạn ạ. Người ta đã bỏ công ra làm và đưa lên không vì lợi ích cá nhân thì chúng ta hay biết cảm ơn họ.
              CallerID, Ethernet-RS232, PICWEB, Cảnh báo BTS
              Giải pháp toàn diện giám sát - điều khiển từ xa qua GSM/Internet
              0988006696

              http://linhnc308.blogspot.com
              linhnc308@gmail.com

              Comment

              • zen1403
                Nhập môn đệ tử
                • Mar 2009
                • 2

                #8
                Mua 16F727

                Ứng dụng này hay quá nhưng mình không biết mua 16F727 ở đâu, giá cả như thế nào.
                Xin vui lòng chỉ giúp. Cảm ơn!

                Comment

                • tungnh
                  Đệ tử 5 túi
                  • Sep 2007
                  • 94

                  #9
                  Nguyên văn bởi zen1403 View Post
                  Ứng dụng này hay quá nhưng mình không biết mua 16F727 ở đâu, giá cả như thế nào.
                  Xin vui lòng chỉ giúp. Cảm ơn!
                  Mua con Pic16f nào chẳng được hả bạn. về cơ bản chẳng khác nhau là mấy.
                  Windows CE 6 R3

                  Comment

                  • phamminhtuan
                    Super Moderator
                    • Feb 2006
                    • 150

                    #10
                    Nguyên văn bởi tungnh View Post
                    Mua con Pic16f nào chẳng được hả bạn. về cơ bản chẳng khác nhau là mấy.
                    Với code trên và yêu cầu với số nút mTouch tới 16 thì phải cần PIC có module CSM (Capacitive Sensing Module) - Một số PIC16F khác có 2 module Comparator và 1 module S/R Latch chỉ hỗ trợ được tới 4 nút mTouch (không mux) thôi và cách viết chương trình có khác một chút
                    Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
                    http://www.picvietnam.com/forum/showthread.php?t=1263

                    Comment

                    • zen1403
                      Nhập môn đệ tử
                      • Mar 2009
                      • 2

                      #11
                      Thanks!

                      Nguyên văn bởi phamminhtuan View Post
                      Với code trên và yêu cầu với số nút mTouch tới 16 thì phải cần PIC có module CSM (Capacitive Sensing Module) - Một số PIC16F khác có 2 module Comparator và 1 module S/R Latch chỉ hỗ trợ được tới 4 nút mTouch (không mux) thôi và cách viết chương trình có khác một chút
                      Cám ơn bạn phamminhtuan.
                      Cái mình muốn là nhiều nút, nên mới hỏi về thằng 16F727. Mong bạn trả lời thắc mắc.
                      Tiện thể mình muốn hỏi, có cách gì để quét touch button như mình quét phím trước đây không?

                      Comment

                      • picthanh
                        Đệ tử 2 túi
                        • Jun 2007
                        • 44

                        #12
                        mình là thử mạch này rồi, mua con 16f727 (loại dán), về rất hăm hở, cuối cùng nạp ko dc. mình nạp bằng card nạp ICD2, từ lúc đó tới giờ bận quá, hôm nay mới có lụt lại thùng đồ mới phát hiện ra em nó, liền chạy lên đây hỏi anh em nạp thế nào chỉ mình với, con này thì nạp bằng những card nạp nào dc. mong bác nào làm qua chỉ dẫn em với
                        VÔ DANH !!!

                        Comment

                        • minhkha216
                          Nhập môn đệ tử
                          • Mar 2009
                          • 1

                          #13
                          con này bạn có thể nạp bằng mạch nạp Pkit , chỉ cần nạp wa hai đường tính hiệu ở hai chân.Chân số mấy lâu quá mình cũng ko nhớ , xem datadheet đi nhé .

                          Comment

                          • rhinoceros
                            Đệ tử 1 túi
                            • Jul 2007
                            • 17

                            #14
                            hic.giờ sử dụng M-touch cũng có nhiều cái hay.
                            không biết những dòng Pic có trang bị M-touch thì có đặc điểm gì để nhận hay không.

                            em cũng sưu tầm đc cái code này,mang cho mọi người tham khảo .

                            Nguyên văn bởi Nguyen Thang View Post
                            #include <pic10f20x.h>
                            #define led GP1 //chan out, khi cham vao nut thi out=0 (led sang), nguoc lai khi khong cham, out=1 (led tat)
                            //Chuong trinh viet cho MCU PIC10F206

                            void delay_ms(unsigned int n)
                            {
                            unsigned int n1;
                            while(n!=0)
                            {
                            n1=120;
                            while(n1!=0)
                            {
                            n1--;
                            }
                            n--;
                            }
                            }
                            void delay_us(unsigned int n)
                            {
                            while(n!=0)
                            {
                            n--;
                            }
                            }

                            void ConfigIO()
                            {
                            //cau hinh cac chan la IO
                            TRISGPIO=0;
                            COUTEN=1;
                            CMPON=0;//comparation disable
                            CWU=1;

                            OPTION=0xc0;
                            FOSC4=0;//GP2/T0CKI/COUT applied to GP2
                            }





                            void main()
                            {

                            ConfigIO();

                            //CMCON0 Register:CMPOUT | COUTEN | POL | CMPT0CS | CMPON | CNREF | CPREF |CWU
                            /*
                            bit 7 CMPOUT: Comparator Output bit
                            1 = VIN+ > VIN-
                            0 = VIN+ < VINbit
                            bit 6 COUTEN: Comparator Output Enable bit(1, 2)
                            1 = Output of comparator is NOT placed on the COUT pin
                            0 = Output of comparator is placed in the COUT pin
                            bit 5 POL: Comparator Output Polarity bit(2)
                            1 = Output of comparator not inverted
                            0 = Output of comparator inverted
                            bit 4 CMPT0CS: Comparator TMR0 Clock Source bit(2)
                            1 = TMR0 clock source selected by T0CS control bit
                            0 = Comparator output used as TMR0 clock source
                            bit 3 CMPON: Comparator Enable bit
                            1 = Comparator is on
                            0 = Comparator is off
                            bit 2 CNREF: Comparator Negative Reference Select bit(2)
                            1 = CIN- pin(3)
                            0 = Internal voltage reference
                            bit 1 CPREF: Comparator Positive Reference Select bit(2)
                            1 = CIN+ pin(3)
                            0 = CIN- pin(3)
                            bit 0 CWU: Comparator Wake-up on Change Enable bit(2)
                            1 = Wake-up on comparator change is disabled
                            0 = Wake-up on comparator change is enabled.
                            */
                            COUTEN=0;//Output of comparator is placed in the COUT pin
                            POL=0;//Output of comparator inverted
                            CMPT0CS=1;//Comparator output used as TMR0 clock source
                            CMPON=1;//Comparator is on
                            CNREF=0;//Internal voltage reference
                            CPREF=1;//CIN+ pin


                            //OPTION Register:GPWU | GPPU | T0CS | T0SE | PSA | PS2 | PS1 |PS0
                            /*
                            bit 7 GPWU: Enable Wake-up on Pin Change bit (GP0, GP1, GP3)
                            1 = Disabled
                            0 = Enabled
                            bit 6 GPPU: Enable Weak Pull-ups bit (GP0, GP1, GP3)
                            1 = Disabled
                            0 = Enabled
                            bit 5 T0CS: Timer0 Clock Source Select bit
                            1 = Transition on T0CKI pin (overrides TRIS on the T0CKI pin)
                            0 = Transition on internal instruction cycle clock, FOSC/4
                            bit 4 T0SE: Timer0 Source Edge Select bit
                            1 = Increment on high-to-low transition on the T0CKI pin
                            0 = Increment on low-to-high transition on the T0CKI pin
                            bit 3 PSA: Prescaler Assignment bit
                            1 = Prescaler assigned to the WDT
                            0 = Prescaler assigned to Timer0
                            bit 2-0 PS<2:0>: Prescaler Rate Select bits
                            */
                            OPTION=0b11100000;
                            TRIS=0B00000000;
                            led=0;
                            delay_ms(100);
                            led=1;
                            delay_ms(100);
                            led=0;
                            delay_ms(100);
                            led=1;
                            delay_ms(100);
                            // while(1)
                            // {
                            // led=0;
                            // delay_ms(500);
                            // led=1;
                            // delay_ms(500);
                            //
                            // }

                            while(1)
                            {
                            TMR0=0;//reset timer 0
                            delay_us(100);//cho de counter
                            if(TMR0<120)//tang gia tri nay de tang do nhay(170 la gia tri khong cach dien)
                            {
                            led=0;//nhan
                            }
                            else
                            {
                            led=1;//khong nhan
                            }
                            delay_ms(1);

                            }

                            }

                            Comment

                            • falleaf
                              PIC Bang chủ
                              • May 2005
                              • 2631

                              #15
                              www.microchip.com/mtouch

                              Chúc vui
                              Công ty TNHH Thương mại và Giao nhận R&P
                              store.hn@rpc.vn - store.hcm@rpc.vn

                              Học PIC như thế nào?

                              Comment

                              Working...