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

정보통신기기  프로젝트



              void  init  (void);  //초기화하는  함수
              void  stop  (void);  //멈추는  함수
              void enchant (void);  //카드에  권한을 부여하는 함수
              void  setup(void);  //카의  위치를  초기화하는  함수.  (처음  전원  공급시  초기값  안정위해  사용)
              void  edge_set(void);  //각  층에  도착했을  때  문의  열림  여부를  판별하는  함수


                  다. 셋업  함수



              void  setup(void){
                  while(now_floor==0)uping();}     //  처음 시작할 때 현재  층을 모르는 상황이면  (층과  층  사이에
            껴있는  경우)  조금  더  올라가서  현재  층을  설정한다.



                  라. 키메트릭스  함수




              void  key(void){
                      unsigned  char  km=0xfe;  //키메트릭스  출력  초기값  1111  1110
                   unsigned  char  in,i; //사용할 지역변수  설정
                      for(i=0;i<7;i++){  //4*7키메트릭스이므로  7번  반복
                              PORTC=(km&dw_led);  /*  C포트는  8개의  I/O핀으로  구성.  7개  키메트릭스  출력  1개
            LED출력으로  사용  (사용  포트를  최대한  줄이기  위함.)  */
                              in=(PING&0x0f);  //G포트의  값  받아옴.  4개  키메트릭스  입력  1개  LED출력으로  사용
                              switch(in){    //입력받은  값에  따라  이하의  내용을  수행
                              case 0x0e  :  if(km==0xfe){  if(int5en==1)al1=0;  }  //첫비트가  눌려있을  때
                            //권한부여  스위치가  활성화면
                            //1-1  :  al1에  0넣음
                                           else  if(km==0xfd){if(int5en==1)al1=1;}//1-2  :  al1에  1넣음
                                           else  if(km==0xfb){if(int5en==1)al1=2;}//1-3  :  al1에  2넣음
                                           else  if(km==0xf7){if(int5en==1)al2=1;}//1-4  :  al2에  1넣음
                                           else  if(km==0xef){if(int5en==1)al2=2;}//1-5  :  al2에  2넣음
                                           else  if(km==0xdf){if(int5en==1)al3=2;}//1-6  : al3에  2넣음
                                           else  if(km==0xbf){if(int5en==1)al3=3;}//1-7:al3에  3넣음
                                           break;


              case  0x0d  :  (km==0xfe){  //두번째  비트가  눌려  있을때 2-1  :
              if(car_enable[0]==1){if(up==1)up_go_in[0]=~up_go_in[0];  /*1층에  가는게  허용된  상태면  1층을
            가는  카  내부  스위치  상태  변경  (눌림->안눌림,  안눌림->눌림).  올라갈  때라면.*/


              else  if  (dw==1)dw_go_in[0]=(~dw_go_in[0]);}}  //내려갈  때라면  위와  같은  동작
              else  if  (km==0xfd){if(car_enable[1]==1) //2-2  :  2층에  가는게  허용된  상태면  위와  같음
                  {if(up==1)up_go_in[1]=~up_go_in[1];




                                                                                               정보통신기기과
                                                         -  415  -
   417   418   419   420   421   422   423   424   425   426   427