Page 425 - 완) I MDP 프로젝트 작품 보고서(전체과 1학년)1.6
P. 425

int5en=0;  //권한  부여에  사용하는  스위치  활성화  해제
              }

                  바. LED  출력  함수


                  void  set_leds(void){  //led  출력  함수
                      unsigned  char  i,in,fora=0xfe,forb=0xfd,forin=0xfb;  //지역변수  선언
                      unsigned  char  ansa=0xff,ansb=0xff;  //지역변수  선언
                      if(dw==1){  //만약  내려가는  동작  중인경우
                              dw_led=0x00;  //내려가는  상태를  표시하는  LED  켜진상태로  할  것임.
                        in=PING;  //현재 G포트의  값을  받아와서
                              PORTG=in&0x0f;}  //현재  G포트의  4번  핀을  강제로  0으로  만들어  출력  (켜짐)
                    else  if(up==1){  //만약  올라가는  동작  중인경우
                              dw_led=0x80;  //내려가는  상태를  표시하는  LED  꺼진상태로  할  것임
                        in=PING;  //현재 G포트의  값을  받아와서
                        PORTG=in|0x10;}  //현재  G포트의  4번 핀을  강제로  1로 만들어 출력  (꺼짐)
                      for(i=5;i>1;i--){  //5부터  2까지  반복.
                              if(dw_go_out[i]==1)ansa=ansa&fora;  /*각  층의  외부에  있는  내려가는  버튼의  눌려있음
            유무에  따라  PORTA의  출력  값을  정함.*/
                              fora=(fora<<2|0x03);}  //버튼의  눌림과는  상관없이  반복이  끝나면  출력제어값  변화
                      if(dw_go_out[1]==1)ansb=ansb&0xfe;  /*2층에서  내려가는  버튼을  나타내는  LED는
            PORTB에서  출력하므로  따로  적음.  */
                      if(up_go_out[0]==1)ansb=ansb&0xfd;  /*1층에서  올라가는  버튼을  나타내는  LED는
            PORTB에서  출력하므로  따로  적음.  */
                      for(i=4;i>0;i--){  //4부터  1까지  반복
                              if(up_go_out[i]==1)ansa=ansa&forb;  /*각  층의  외부에  있는  올라가는  버튼의  눌려있음
            유무에  따라  PORTA의  출력  값을  정함.*/
                              forb=(forb<<2|0x03);}  //버튼의  눌림과는  상관없이  반복이  끝나면  출력제어값  변화
                      for(i=0;i<6;i++){  //6번  반복
                              if(up_go_in[i]==1)ansb=ansb&forin;  /*카  내부의  올라가는  버튼  눌려있음  유무에  따라
            PORTB의  출력값  변화    */
                              if(dw_go_in[i]==1)ansb=ansb&forin;/*카  내부의  내려가는  버튼  눌려있음  유무에  따라
            PORTB의  출력값  변화    */
                              forin=(forin<<1|0x01);}//버튼의  눌림과는  상관없이  반복이  끝나면  출력제어값  변화
                   PORTA=ansa;  //최종  PORTA출력값 출력
                      PORTB=ansb;  //최종  PORTB출력값  출력
              }


                  사. 카  동작  함수


            void  uping(void){  //오르는  상태에서의  함수
                      ST_FLOOR=1;  //카의  동작  정지를  제어하는  릴레이를  동작시킴.
                   UPDW=1;  //오를  때  1의값을 가짐


            인천전자마이스터고등학교
                                                         -  418  -
   420   421   422   423   424   425   426   427   428   429   430