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 -