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 -