Thông báo

Collapse
No announcement yet.

điều khiển thiết bị qua điện thoại

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

  • #46
    Đoạn code điều khiển, cái mà cần phải biết để chỉnh sửa lại theo ý của mình.

    ;================================================= ===========
    ; TP RELAYS ON PORT 0 DTMF ON PORT 1
    ; STATUS ON PORT 2
    ; ================================================== =========

    ;$MOD51

    LED EQU P1.7
    TONE_D EQU P3.6
    TONE_B EQU P3.4
    REL1 EQU P3.0 ; LINE CHANGE-OVER RELAY
    REL2 EQU P3.1 ; RINGING RELAY
    MELODY EQU P3.7 ; UM66T MELODY GENRATOR
    ZERO EQU 10
    F10 BIT 78H ; BIT FLAG
    F11 BIT 79H
    Ph BIT 7AH

    On_Hook MACRO ; HOOK SWITCH ON P1.6
    SETB P1.6
    ENDM

    Off_Hook MACRO ; HOOK SWITCH ON P1.6
    CLR P1.6
    ENDM


    ;================================================= ============
    ; INTERRUPT VECTOR TABLE
    ;================================================= ============

    ORG 00H ; ENTRY ADDRESS FOR 89C51 RESET
    AJMP MAIN ; MAIN STARTS BEYOND INTERRUPT VECTOR SPACE

    ORG 1BH ; VECTOR ADDRESS FOR INTERRUPT
    SETB Ph ; MARK "THIS IS A PHONE CALL"
    AJMP PHONE ; JUMP TO PHONE CALL SERVICE


    ;================================================= ============
    ; M A I N
    ;================================================= ============

    ORG 02CH ; START BEYOND THE VECTOR TABLE
    MAIN:
    ACALL INITIALIZE_SUB ; INITILIZE CONTRO RAGISTER(TMOD & IE)
    START:
    CLR LED
    ACALL SCAN_TPs
    JB F10,INTERCOM

    SETB LED
    ACALL SCAN_TPs
    JB F10,INTERCOM

    AJMP START


    ;================================================= ===========
    ; INTERCOM SERVICE
    ;================================================= ===========

    INTERCOM:
    CLR F10 ; RESET FLAG
    Off_Hook ; DISABLE PHONE CALL
    SETB TONE_D ; ON DIAL TONE
    SETB TONE_B ; ON BUSY TONE
    CLR LED ; ON LED PERMANENTLY
    CPL A
    MOV P0,A ; CONNECT SCANED No. TO SPEACH-BUS

    ACALL GET_DIAL_NUM ; GET NUMBER TO CALL

    CJNE A,#0FFH,INTERNAL ; IF DIAL=FF THEN PHONE CALL FROM INTERCOM
    CLR REL1 ; CONNECT SPEACH-BUS TO PHONE LINE
    Off_Hook ; OFF-HOOK SYSTEM
    CLR LED ; ON LED PERMANENTLY
    AJMP EXTERNAL_CALL

    INTERNAL:
    MOV R3,A ; SAVE SUBSCRIBER No. INTO R3
    ANL A,P0
    MOV P0,A ; CONNECT DIALED No. TO SPEACH-BUS

    MOV A,R3 ; PROCESSING FOR CHECKING SUBSCRIBER
    ANL A,P2 ; AND SUBCRIBER WITH CALLER

    ACALL BELL ; RING THE BELL
    EXTERNAL_CALL:
    ACALL DELAY_HS

    SPEACH: MOV A,P2
    CJNE A,#255,SPEACH ; IF CALL COMPLETE THEN RESET SYSTEM
    ACALL RST_SYSTEM ; ELSE WAIT HERE
    AJMP START


    ;================================================= ===========
    ;THIS ROUTINE CHECKED TP'S STATUS IF ANY OFF_HOOK FOUND SERVICE
    ;PROVIDED HIM
    ;================================================= ===========

    SCAN_TPs: ; FLASHING LED WITH SCANING TPs
    MOV R0,#76
    LOOP: MOV R1,#250

    _1: MOV A,#1 ; START POINTER WITH ONE
    JB P2.0,_2
    SETB F10
    AJMP OUT

    _2: RL A
    JB P2.1,_3
    SETB F10
    AJMP OUT

    _3: RL A
    JB P2.2,_4
    SETB F10
    AJMP OUT

    _4: RL A
    JB P2.3,_5
    SETB F10
    AJMP OUT

    _5: RL A
    JB P2.4,_6
    SETB F10
    AJMP OUT

    _6: RL A
    JB P2.5,_7
    SETB F10
    AJMP OUT

    _7: RL A
    JB P2.6,_8
    SETB F10
    AJMP OUT

    _8: RL A
    JB P2.7,BACK
    SETB F10
    AJMP OUT

    BACK: DJNZ R1,_1
    DJNZ R0,LOOP
    OUT: RET ; RETURN FROM SUB ROUTINE


    ;================================================= ===========
    ; THIS ROUTINE RINGING THE BELL ON DIALED NUMBER
    ;================================================= ===========

    BELL:
    CLR TONE_D ; OFF DIAL TONE
    CLR REL2 ; ON BELL RELAY
    ACALL DELAY ; RING BELL FOR ONE MINIT
    SETB REL2 ; OFF BELL RELAY

    ACALL DELAY
    JB F10,RET1
    ACALL DELAY1
    JB F10,RET1
    ACALL DELAY1
    JB F10,RET1
    AJMP BELL
    RET1: RET


    ;================================================= ===========
    ; CHECK TELEPHONE'S STATUS UPTO ONE SECOND
    ; IF PIKED UP THEN SET FLAG
    ;================================================= ===========

    DELAY1: ; ONE SECOND DELAY WITH STATUS CHECKING
    MOV R0,#4
    LOOP11: MOV R1,#250
    LOOP12: MOV R2,#250
    LOOP13: CJNE A,P2,NOT_EQ
    SETB F10 ; MARK SUBSCRIBER READY TO TALK
    AJMP RET2
    NOT_EQ: DJNZ R2,LOOP13
    DJNZ R1,LOOP12
    DJNZ R0,LOOP11
    RET2: RET


    ;================================================= ===========
    ; ONE SECOND DELAY
    ;================================================= ===========

    DELAY: ; ONE SECOND DELAY
    MOV R0,#4
    LOOP1: MOV R1,#250
    LOOP2: MOV R2,#250
    LOOP3: NOP
    NOP
    DJNZ R2,LOOP3
    DJNZ R1,LOOP2
    DJNZ R0,LOOP1
    RET


    ;================================================= ===========
    ; READ DIALED NUMBER,RE-CHECK IF 0, * OR #
    ;================================================= ===========

    GET_DIAL_NUM:
    JNB P1.4,$ ; WAIT FOR KEY PRESS (STROB)
    MOV A,P1 ; READ DIALED NUMBER
    ANL A,#00001111B ; REMOVE EXTRA BITS

    CJNE A,#ZERO,STERIK ;
    JB Ph,GET_DIAL_NUM ; IF ZERO FROM PHONE CALL THEN READ AGAIN
    MOV A,#0FFH ; TRUNK CALL FROM INTERCOM
    AJMP RET3

    STERIK: CJNE A,#11,HASH ; IF STERIK, READ AGAIN
    AJMP GET_DIAL_NUM

    HASH: CJNE A,#12,NINE ; IF HASH, READ AGAIN
    AJMP GET_DIAL_NUM

    NINE: CJNE A,#9,DECODE
    JNB Ph,GET_DIAL_NUM ; DIAL=9 & NOT A PHONE THEN READ AGAIN
    MOV A,#252 ; SELECT TO ALL (VIRTUALY 8)
    AJMP RET3

    DECODE: DEC A
    MOV R1,A
    MOV A,#1
    ROTATE: RL A
    DJNZ R1,ROTATE
    CPL A
    RET3: RET


    ;================================================= ============
    ; RESET ALL SYSTEM
    ;================================================= ============

    RST_SYSTEM:
    CLR TONE_D ; OFF DIAL-TONE
    CLR TONE_B ; OFF BUSY-TONE
    CLR F10 ; RESET FLAG
    CLR Ph ; CLEAR PHONE CALL FLAG
    CLR F11
    MOV P0,#255 ; OFF ALL TPs RELAYS
    SETB REL1 ; OFF CHANGE-OVER RELAY
    SETB TR1 ; START TIMER/COUNTER
    On_Hook ; ENABLE PHONE CALL
    RET


    ;================================================= ===========
    ; INITIALIZE SYSTEM
    ;================================================= ===========

    INITIALIZE_SUB: ; SET UP CONTROL REGISTERS
    MOV TMOD, #01100000B ; TIMER 1 IS SET FOR MODE 2, COUNTER OPERATION
    MOV IE, #10001000B ; ENABLE TIMER/COUNTER 1 INTERRUPT
    MOV TH1, #219 ; AUTO RELOAD VALUE(INT1 TL1) EACH TIME AFTER OVERFLOW.
    MOV TL1, #219 ; DEMO TIMER IS INITIALISED WITH (256-39=217)
    ; TO COUNT 39(2BELL)EVENTS
    CLR TONE_D ; OFF DIAL-TONE
    CLR TONE_B ; OFF BUSY-TONE
    SETB TR1 ; START COUNTER 1
    RET


    ;================================================= ============
    ; PHONE CALL SERVICE
    ;================================================= ============

    PHONE:
    CLR TR1 ; STOP TIMER1
    Off_Hook ; OFF-HOOK SYSTEM
    CLR LED ; ON LED PERMANENTLY
    ACALL UM66 ; PLAY MELODY

    CLR REL1 ; CONNECT SPEACH-BUS TO PHONE LINE
    NEXT: ACALL GET_DIAL_NUM ; GET NUMBER TO CALL
    SETB REL1 ; DISCONNECT FOR BELL

    MOV P0,A ; CONNECT DIALED No. TO SPEACH-BUS
    ACALL BELL ; RING THE BELL
    CLR REL1 ; CONNECT SPEACH-BUS TO PHONE LINE
    ACALL DELAY_HS ; PROVIDE HALF SECOND DELAY

    BUSY: MOV A,P2
    CJNE A,#255,BUSY ; IF CALL NOT COMPLETE, WAIT ARROUND HERE

    JB F11,RESET ; CHECK FOR SECOND CALL
    MOV P0,#255 ; DISCONNECT ALL TELEPHONES
    SETB TONE_B ; ON BUSY TONE
    SETB F11 ; MARK FOR SECOND PHONE CALL
    CLR F10 ; RESET FLAG
    AJMP NEXT ; GO FOR NEXT PHONE CALL

    RESET: ACALL RST_SYSTEM ; END CALL
    RETI


    ;================================================= ==================
    ; PLAY MELODY (UM66)
    ;================================================= ==================

    UM66: CLR MELODY ; PLAY MELODY AS GREETING MESSAGE
    ACALL DELAY ; FOR FIVE SECOND
    ACALL DELAY
    ACALL DELAY
    ACALL DELAY
    ACALL DELAY
    SETB MELODY ; STOP MELODY
    RET


    ;================================================= ===================
    ; HALF SECOND DELAY TO ESTABLISHED THE RELAY CONTECTS
    ;================================================= ===================

    DELAY_HS: ; HALF SECOND DELAY
    MOV R0,#2
    LOOP21: MOV R1,#250
    LOOP22: MOV R2,#250
    LOOP23: NOP
    NOP
    DJNZ R2,LOOP23
    DJNZ R1,LOOP22
    DJNZ R0,LOOP21
    RET

    END
    Attached Files

    Comment


    • #47
      Các anh chị em download luôn toàn bộ sơ đồ mạch về mà làm. 1 phát tiến đến thành công nhé.
      Attached Files

      Comment


      • #48
        cảm ơn anh duyphi nhiều lắm, thật tình em cũng đang bí về cái này không biết tìm ở đâu

        Comment


        • #49
          Nguyên văn bởi mrhahung_87 Xem bài viết
          cảm ơn anh duyphi nhiều lắm, thật tình em cũng đang bí về cái này không biết tìm ở đâu
          Nếu thành công đừng quên gởi email cho duyphi@yahoo.com báo tin chia vui nhé!

          Comment


          • #50
            Việc giám sát điều khiển từ xa qua điện thoại cố định tôi nghĩ không linh hoạt( dây rợ lằng nhằng, hoặc vị trí lắp đặt ko tùy ý), thậm chí còn đắt hơn dùng 1 điện thoại di động cũ (của siemens sl45 có 200k), sao các bạn ko nghĩ đến việc dùng điện thoại di động để điều khiển, giám sát hệ thống. Việc điều khiển giám sát này dùng các lệnh AT Command, các bạn có thể dùng vi điều khiển hay máy tính đều được (qua rs232), tuy nhiên nó có một bất tiện nhỏ là phải thuê bao một số di dộng (nếu chỉ dùng dịch vụ tin nhắn thì rẻ ko phải nghĩ, của viettel ấy). Nếu ai có nhu cấu thiết kế hệ thống này thì liên lạc với tôi nhé..(0918356688)...
            |

            Comment


            • #51
              Nguyên văn bởi hightech_uc Xem bài viết
              Việc giám sát điều khiển từ xa qua điện thoại cố định tôi nghĩ không linh hoạt( dây rợ lằng nhằng, hoặc vị trí lắp đặt ko tùy ý), thậm chí còn đắt hơn dùng 1 điện thoại di động cũ (của siemens sl45 có 200k), sao các bạn ko nghĩ đến việc dùng điện thoại di động để điều khiển, giám sát hệ thống. Việc điều khiển giám sát này dùng các lệnh AT Command, các bạn có thể dùng vi điều khiển hay máy tính đều được (qua rs232), tuy nhiên nó có một bất tiện nhỏ là phải thuê bao một số di dộng (nếu chỉ dùng dịch vụ tin nhắn thì rẻ ko phải nghĩ, của viettel ấy). Nếu ai có nhu cấu thiết kế hệ thống này thì liên lạc với tôi nhé..(0918356688)...
              Thế bác có nick ya không để trao đổi với nhau rẻ hơn nữa! rất vui được trao đổi với bác về đề tài này, nick tôi là solochom74 mobi là: 0903221223 tên thì bác thấy rồi! Chúc bác mạnh khỏe và đầy sáng tạo mới!
              |

              Comment


              • #52
                mấy huynh cho em hỏi:
                Làm sao nhận biết được trạng thái gác máy của người điều khiển đây.

                Comment


                • #53
                  minh cung dang lam do an ve phan nay,minh thu truyen tap lenh AT tu vxl qua dtdd nhung van chua goi tin nhan dc, ko biet co ai lam dc chua giup minh voi
                  |

                  Comment


                  • #54
                    Tôi thấy chúng ta quá lan man rồi. Tất nhiên diễn đàn lập ra là để anh em bàn luận va tham khảo lẫn nhau. Tuy nhiên một số trường hợp thì cần phải thảo luận trên cơ sở hiểu biết thực sụ vấn đề. Trong trường hợp này thực chất là một dự án liên quan đến tương tác với điện thoại cố định hay mobile. Vấn đề nay cũng chỉ bao gồm:

                    1. Đặc trưng của giao thức trong điện thoại cố định hay mobile (Dù là tín hiệu tương tự cũng có các kiểu định dạnh và nhận dạng nhất định về tần số, điện áp, tắt, mở, rung... Phương thức thu phát sóng.
                    2. Đặc điểm yêu cầu của ứng dụng chúng ta cần làm. Điều này cho biết yêu cầu là phải điều khiển máy điện thoại làm gì hay tương tác từ máy điện thoại tới hệ thống là như thế nào.

                    Vậy nên, với các cao thủ, hãy chỉ giùm các anh em là phương thức tương tác tới điện thoại và phản hồi điều khiển từ nó như thế nào? Và có thể hãy copy cho anh em một prọect cụ thể thì dễ dàng học tập tham khảo hơn.

                    Trên đây chỉ là mạo muội tham gia với các bạn, cũng là để học hỏi thêm chứ không có ý gì khác. Mong mọi người thông cảm.

                    Comment


                    • #55
                      Em chả thấy mấy cái link download của bác www9van đâu cả.
                      Hướng dẫn cụ thể cho AVR tại đây :
                      Hãy nhấn vào nút "Cảm ơn" để em biết rằng em đã giúp được một ai đó.

                      Comment


                      • #56
                        help me!!!!! em dang lam de tai ''dieu khien cac thiet bi bang tin nhan dien thoai di dong thong qua mang dien thoai khong day cua Viêtl hoac cua EVN '' bac nao co tai lieu thi giup em voi
                        thankssssss!!!!!!!!

                        Comment


                        • #57
                          co bac nao co tai lieu may phan (I II III) cua bac wwww9van o tren ko? lam on post len cho anh em nho voi , em tim mai ma chang thay dau

                          Comment


                          • #58
                            Điều khiển qua điện thoại bàn hả mấy bác? Để hôm nay,em mang tài liệu scan, rồi upload lên cho mấy bác nha...
                            Quang Nhat
                            ---------------------------------------
                            Yahoo :quangnhat85ls
                            Mail :
                            Nhận thiết kế và ép nhựa cho đồ điện tử

                            Comment


                            • #59
                              chi đâu mà khó khăn ghê rứa choy , cái này k bit có đáp ứng đc nhu cầu mấy pro ko nữa . Chỉ cần dùng con MT8870 là nhận tín hiệu vô tư oy mà .












                              chương trình đơn giản , cho mấy ku bạn hỉu để bảo vệ thực tập VDK
                              Code:
                              #include<AT89S53.h>
                              
                              sbit RS = 0x94; // RS = P1_4
                              sbit RW = 0x95; // RW = P1_5
                              sbit E  = 0x96; // E  = P1_6
                              sbit load = 0x84; // role = P0_4
                              sbit bell_signal = 0x85; // tin hieu chuong
                              sbit green = 0x86; // TB1 = P0_6
                              sbit red = 0x87; // TB1 = P0_7
                              sbit STD = 0xB2; // P3_2
                              
                              unsigned char count = 0 ; // bien dem hoi chuong
                              unsigned char a = 0 ;     // bien dem cac so nhap tu ban phim de truyen len PC
                              unsigned char pass = 0 ;  // bien lay data tu 8870
                              
                              void delay_ms( unsigned int ms )
                              { unsigned int i,j;
                                for (i=0;i<ms;i++)
                                for (j=0;j<120;j++){};
                              }
                              
                              void LCD_PutChar(unsigned char k )
                              { P2=k ; RS=1 ; RW=0 ; E=1 ; E=0 ; delay_ms(1);}
                                
                              
                              void LCD_PutCmd(unsigned char k )
                              { P2=k ; RS=0 ; RW=0 ; E=1 ; E=0 ; delay_ms(3);}
                                
                              
                              void int_LCD()
                              { 
                                LCD_PutCmd(0x38) ;	   
                                LCD_PutCmd(0x0C) ;
                                LCD_PutCmd(0x06) ;
                                LCD_PutCmd(0x01) ;
                              }
                              
                              void quetphim_hienthi()
                              { 
                                P1_0=0;P1_1=P1_2=P1_3=1; 	
                                if (P0_0==0) { delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('0');a = '0';
                                             } ;
                                if (P0_1==0) { delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('4');a = '4';
                                             } ;
                                if (P0_2==0) { delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('8');a = '8';
                                             } ;
                                if (P0_3==0) { delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('C') ; a = 'C';
                                             } ;
                              
                                P1_0=P1_2=P1_3=1;P1_1=0;
                                if (P0_0==0) { delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('1');a = '1';
                                             } ;
                                if (P0_1==0) { delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('5'); a = '5';
                                             } ;
                                if (P0_2==0) { delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('9');a = '9';
                                             } ;
                                if (P0_3==0) { delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('D') ;a = 'D';
                                             } ;
                                
                               P1_0=P1_1=P1_3;P1_2=0;
                               if (P0_0==0)  { delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('2'); a = '2';
                                             } ;
                               if (P0_1==0) {  delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('6');a = '6';
                                            } ;
                               if (P0_2==0) {  delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('A');a = 'A';
                                            } ;
                               if (P0_3==0) {  delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('E');a = 'E';
                                            } ;
                              
                               P1_0=P1_1=P1_2=1;P1_3=0;; 	
                               if (P0_0==0) {  delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('3');a = '3';
                                            } ;
                               if (P0_1==0) {  delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('7');a = '7';
                                             } ;
                               if (P0_2==0) {  delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('B');a  = 'B';
                                            } ;
                               if (P0_3==0) {  delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutCmd(0x01) ;		   // clearscreen
                                               LCD_PutCmd(0x80) ;
                              				 a = 0;
                              			  } ;
                              
                              
                              }
                              
                              void serial_init()
                              {  TMOD = 0x20;	 // timer1 mod2 (8bit nap lai)
                                 SCON = 0x50;	 // che do noi tiep 1(8bit 1bit start 1bit stop)
                                 TH1  = 0xFD;	 // nap toc do baud = 9600
                                 TR1  = 1;     // cho chay timer1
                                 RI 	= 1;	 //	san sang nhan
                                 TI   = 1;     // san sang truyen
                              }
                              
                              
                              main()
                              { 
                                P0 = 0xFF ; 
                                P1 = 0xFF ;
                                STD = 1 ;
                                
                                
                                delay_ms(100);
                                int_LCD();
                                LCD_PutCmd(0x80) ; // gui lenh xuat chu o dong 1 cot 1 of LCD
                                
                                serial_init();
                                
                                while(1)
                                   { quetphim_hienthi();
                              	   
                              	   if(!bell_signal) {green = 0 ; delay_ms(3000);
                              	                     if(bell_signal)green = 1 ;
                              						 count++ ; 
                              						}
                              	   if (count==2)
                              	   { load = 0 ; // dong tai gia
                              	   	 count = 0 ; // xoa bo dem ve 0
                              	   				  
                              		 while(pass!=0x30) // phim # - OK
                              		{if(pass==0)
                              		  { while(STD==0) continue ; // wait tin hieu tu 8870 
                              		    while(STD==1) continue ;
                              			pass = (P3&0xF0); // lay 4 bit cao of P3
                              		  };	 
                              		 
                              		 if(pass==0x90) 		   //so 9
                              		    {LCD_PutCmd(0x01);
                              		     LCD_PutCmd(0x83);
                              			 LCD_PutChar('M');
                              			 LCD_PutChar('o');
                              			 LCD_PutChar(' ');
                              			 LCD_PutChar('t');
                              			 LCD_PutChar('h');
                              			 LCD_PutChar('i');
                              			 LCD_PutChar('e');
                              			 LCD_PutChar('t');
                              			 LCD_PutChar(' ');
                              			 LCD_PutChar('b');
                              			 LCD_PutChar('i');
                                           pass=0;
                              			};
                              		 if(pass==0xD0) {LCD_PutChar('*');pass=0;goto EXIT;};  // cancel 
                              		 if(pass==0x30) LCD_PutChar('#');  // ok ! ra lenh xong
                              		};	
                              		
                              		pass =0;
                              		while(STD==0) continue ; // wait tin hieu tu 8870 
                              		while(STD==1) continue ;			   
                              		pass = (P3&0xF0);			   
                              		
                              		while(pass!=0x30)
                              		{if(pass==0)
                              		  { while(STD==0) continue ; // wait tin hieu tu 8870 
                              		    while(STD==1) continue ;
                              			pass = (P3&0xF0); // lay 4 bit cao of P3
                              		  };
                              		 if(pass==0x80) // so1
                              		   {red =0;   // ON thiet bi 1
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('1');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('c');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('N');
                              			pass = 0;
                              		   }; 
                              		 if(pass==0x40) //so 2
                              		   {green =0; // ON thiet bi 2;	
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('2');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('c');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('N');
                              		   	pass=0;
                              		   };	
                              		 if(pass==0xC0) // so 3 
                              		   {red =1;   // OFF thiet bi 1
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('1');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('a');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('F');
                              			LCD_PutChar('F');
                              			pass=0;
                              		   }; 				
                              		 if(pass==0x20) // so 4
                              		   {green =1;   // OFF thiet bi 2
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('2');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('a');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('F');
                              			LCD_PutChar('F');
                              			pass=0;
                              		   };	
                              		 if(pass==0x30) LCD_PutChar('#');  // ok ! ra lenh xong
                              		 
                              		 };
                              
                              EXIT:   load = 1;delay_ms(2000);
                                      pass=0;	  
                              		LCD_PutCmd(0x01);
                              		LCD_PutCmd(0x83);
                              		LCD_PutChar('G');
                              		LCD_PutChar('o');
                              		LCD_PutChar('o');
                              		LCD_PutChar('d');
                              		LCD_PutChar('b');
                              		LCD_PutChar('y');
                              		LCD_PutChar('e');
                              		LCD_PutChar('!');
                              		delay_ms(3000);
                              		LCD_PutCmd(0x01); // clearscreen
                              		LCD_PutCmd(0x80);
                              	   };
                              					
                              	  
                              	   if(RI) 
                              	     {RI=0 ; 
                              	      if(SBUF!=0)
                              		   {P2 = SBUF ; RS=1 ; RW=0 ; E=1 ; E=0 ; delay_ms(1);};
                              		  };
                              	  
                              	   if(a!=0){SBUF = a ; 
                              	            if(TI) {TI = 0;a= 0 ;}
                              			   }
                                   }}
                              Chương trình phức tạp chút , có nhập pass để mở khóa
                              Code:
                              #include<AT89S53.h>
                              
                              sbit RS = 0x94; // RS = P1_4
                              sbit RW = 0x95; // RW = P1_5
                              sbit E  = 0x96; // E  = P1_6
                              sbit load = 0x84; // role = P0_4
                              sbit bell_signal = 0x85; // tin hieu chuong
                              sbit green = 0x86; // TB1 = P0_6
                              sbit red = 0x87; // TB1 = P0_7
                              sbit STD = 0xB2; // P3_2
                              
                              unsigned char count = 0 ; // bien dem hoi chuong
                              unsigned char a = 0 ;     // bien dem cac so nhap tu ban phim de truyen len PC
                              unsigned char pass = 0 ;  // bien lay data tu 8870
                              
                              void delay_ms( unsigned int ms )
                              { unsigned int i,j;
                                for (i=0;i<ms;i++)
                                for (j=0;j<120;j++){};
                              }
                              
                              void LCD_PutChar(unsigned char k )
                              { P2=k ; RS=1 ; RW=0 ; E=1 ; E=0 ; delay_ms(1);}
                                
                              
                              void LCD_PutCmd(unsigned char k )
                              { P2=k ; RS=0 ; RW=0 ; E=1 ; E=0 ; delay_ms(3);}
                                
                              
                              void int_LCD()
                              { 
                                LCD_PutCmd(0x38) ;	   
                                LCD_PutCmd(0x0C) ;
                                LCD_PutCmd(0x06) ;
                                LCD_PutCmd(0x01) ;
                              }
                              
                              void quetphim_hienthi()
                              { 
                                P1_0=0;P1_1=P1_2=P1_3=1; 	
                                if (P0_0==0) { delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('0');a = '0';
                                             } ;
                                if (P0_1==0) { delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('4');a = '4';
                                             } ;
                                if (P0_2==0) { delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('8');a = '8';
                                             } ;
                                if (P0_3==0) { delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('C') ; a = 'C';
                                             } ;
                              
                                P1_0=P1_2=P1_3=1;P1_1=0;
                                if (P0_0==0) { delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('1');a = '1';
                                             } ;
                                if (P0_1==0) { delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('5'); a = '5';
                                             } ;
                                if (P0_2==0) { delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('9');a = '9';
                                             } ;
                                if (P0_3==0) { delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('D') ;a = 'D';
                                             } ;
                                
                               P1_0=P1_1=P1_3;P1_2=0;
                               if (P0_0==0)  { delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('2'); a = '2';
                                             } ;
                               if (P0_1==0) {  delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('6');a = '6';
                                            } ;
                               if (P0_2==0) {  delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('A');a = 'A';
                                            } ;
                               if (P0_3==0) {  delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('E');a = 'E';
                                            } ;
                              
                               P1_0=P1_1=P1_2=1;P1_3=0;; 	
                               if (P0_0==0) {  delay_ms(50);            
                                               while(P0_0==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('3');a = '3';
                                            } ;
                               if (P0_1==0) {  delay_ms(50);            
                                               while(P0_1==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('7');a = '7';
                                             } ;
                               if (P0_2==0) {  delay_ms(50);            
                                               while(P0_2==0) continue ;
                                               delay_ms(20);
                                               LCD_PutChar('B');a  = 'B';
                                            } ;
                               if (P0_3==0) {  delay_ms(50);            
                                               while(P0_3==0) continue ;
                                               delay_ms(20);
                                               LCD_PutCmd(0x01) ;		   // clearscreen
                                               LCD_PutCmd(0x80) ;
                              				 a = 0;
                              			  } ;
                              
                              
                              }
                              
                              void serial_init()
                              {  TMOD = 0x20;	 // timer1 mod2 (8bit nap lai)
                                 SCON = 0x50;	 // che do noi tiep 1(8bit 1bit start 1bit stop)
                                 TH1  = 0xFD;	 // nap toc do baud = 9600
                                 TR1  = 1;     // cho chay timer1
                                 RI 	= 1;	 //	san sang nhan
                                 TI   = 1;     // san sang truyen
                              }
                              
                              
                              main()
                              { 
                                P0 = 0xFF ; 
                                P1 = 0xFF ;
                                STD = 1 ;
                                
                                
                                delay_ms(100);
                                int_LCD();
                                LCD_PutCmd(0x80) ; // gui lenh xuat chu o dong 1 cot 1 of LCD
                                
                                serial_init();
                                
                                while(1)
                                   { quetphim_hienthi();
                              	   
                              	   if(!bell_signal) {green = 0 ; delay_ms(3000);
                              	                     if(bell_signal)green = 1 ;
                              						 count++ ; 
                              						}
                              	   if (count==2)
                              	   { load = 0 ; // dong tai gia
                              	   	 count = 0 ; // xoa bo dem ve 0
                              	   				  
                              		 while(pass!=0x30) // phim # - OK
                              		{if(pass==0)
                              		  { while(STD==0) continue ; // wait tin hieu tu 8870 
                              		    while(STD==1) continue ;
                              			pass = (P3&0xF0); // lay 4 bit cao of P3
                              		  };	 
                              		 
                              		 if(pass==0x90) 		   //so 9
                              		    {LCD_PutCmd(0x01);
                              		     LCD_PutCmd(0x83);
                              			 LCD_PutChar('M');
                              			 LCD_PutChar('o');
                              			 LCD_PutChar(' ');
                              			 LCD_PutChar('t');
                              			 LCD_PutChar('h');
                              			 LCD_PutChar('i');
                              			 LCD_PutChar('e');
                              			 LCD_PutChar('t');
                              			 LCD_PutChar(' ');
                              			 LCD_PutChar('b');
                              			 LCD_PutChar('i');
                                           pass=0;
                              			};
                              		 if(pass==0xD0) {LCD_PutChar('*');pass=0;goto EXIT;};  // cancel 
                              		 if(pass==0x30) LCD_PutChar('#');  // ok ! ra lenh xong
                              		};	
                              		
                              		pass =0;
                              		while(STD==0) continue ; // wait tin hieu tu 8870 
                              		while(STD==1) continue ;			   
                              		pass = (P3&0xF0);			   
                              		
                              		while(pass!=0x30)
                              		{if(pass==0)
                              		  { while(STD==0) continue ; // wait tin hieu tu 8870 
                              		    while(STD==1) continue ;
                              			pass = (P3&0xF0); // lay 4 bit cao of P3
                              		  };
                              		 if(pass==0x80) // so1
                              		   {red =0;   // ON thiet bi 1
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('1');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('c');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('N');
                              			pass = 0;
                              		   }; 
                              		 if(pass==0x40) //so 2
                              		   {green =0; // ON thiet bi 2;	
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('2');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('c');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('N');
                              		   	pass=0;
                              		   };	
                              		 if(pass==0xC0) // so 3 
                              		   {red =1;   // OFF thiet bi 1
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('1');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('a');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('F');
                              			LCD_PutChar('F');
                              			pass=0;
                              		   }; 				
                              		 if(pass==0x20) // so 4
                              		   {green =1;   // OFF thiet bi 2
                              		   	LCD_PutCmd(0x01);
                              		    LCD_PutCmd(0x80);
                              			LCD_PutChar('T');
                              			LCD_PutChar('h');
                              			LCD_PutChar('i');
                              			LCD_PutChar('e');
                              			LCD_PutChar('t');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('b');
                              			LCD_PutChar('i');
                              			LCD_PutChar('2');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('d');
                              		   	LCD_PutChar('a');
                              			LCD_PutChar(' ');
                              			LCD_PutChar('O');
                              			LCD_PutChar('F');
                              			LCD_PutChar('F');
                              			pass=0;
                              		   };	
                              		 if(pass==0x30) LCD_PutChar('#');  // ok ! ra lenh xong
                              		 
                              		 };
                              
                              EXIT:   load = 1;delay_ms(2000);
                                      pass=0;	  
                              		LCD_PutCmd(0x01);
                              		LCD_PutCmd(0x83);
                              		LCD_PutChar('G');
                              		LCD_PutChar('o');
                              		LCD_PutChar('o');
                              		LCD_PutChar('d');
                              		LCD_PutChar('b');
                              		LCD_PutChar('y');
                              		LCD_PutChar('e');
                              		LCD_PutChar('!');
                              		delay_ms(3000);
                              		LCD_PutCmd(0x01); // clearscreen
                              		LCD_PutCmd(0x80);
                              	   };
                              					
                              	  
                              	   if(RI) 
                              	     {RI=0 ; 
                              	      if(SBUF!=0)
                              		   {P2 = SBUF ; RS=1 ; RW=0 ; E=1 ; E=0 ; delay_ms(1);};
                              		  };
                              	  
                              	   if(a!=0){SBUF = a ; 
                              	            if(TI) {TI = 0;a= 0 ;}
                              			   }
                                   }
                              }

                              Comment


                              • #60
                                cám ơn pác Zz_Bi_zZ nhiều lắm .Pác cho em cái nick yahoo nhé em còn nhiều cái thắc mắt lắm ,ở đây dùng điện thoại bàn có dây hay không dây vậy pác?
                                cám ơn nhiều!!!!!!!!

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X