BASIC4MCU | 질문게시판 | 답변 : FND를 활용해서 덧셈결과를 출력하는 코드에대해서 질문드립니다.
페이지 정보
작성자 master 작성일2018-05-07 06:17 조회29,568회 댓글5건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=739
작성일
작성일
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-05-07 오전 6:19:40// by Ok-Hyun Park//#include <mega128.h>#include <delay.h>//#define disp_val 0#define disp_operator 1#define disp_ovf 2#define disp_sum 3//char fnd[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//bit erase_flag=0,equal_flag=0,plus_flag=0;char disp_mode=disp_val;//unsigned int val=0,old_val=0,sum=0;//void display_operator(void){PORTB=0x8c; PORTG=1; delay_ms(1); PORTG=0;PORTB=0xc7; PORTG=2; delay_ms(1); PORTG=0;PORTB=0xc1; PORTG=4; delay_ms(1); PORTG=0;PORTB=0x92; PORTG=8; delay_ms(1); PORTG=0;}//void display_ovf(void){PORTB=0x8c; PORTG=0x7f; delay_ms(1); PORTG=0;PORTB=0xc7; PORTG=0x7f; delay_ms(1); PORTG=0;PORTB=0xc1; PORTG=0x7f; delay_ms(1); PORTG=0;PORTB=0x92; PORTG=0x7f; delay_ms(1); PORTG=0;}//void display_val(void){PORTB=fnd[val/1000 ]; PORTG=1; delay_ms(1); PORTG=0;PORTB=fnd[val/100%10]; PORTG=2; delay_ms(1); PORTG=0;PORTB=fnd[val/10 %10]; PORTG=4; delay_ms(1); PORTG=0;PORTB=fnd[val %10]; PORTG=8; delay_ms(1); PORTG=0;}//void display_sum(void){PORTB=fnd[sum/1000 ]; PORTG=1; delay_ms(1); PORTG=0;PORTB=fnd[sum/100%10]; PORTG=2; delay_ms(1); PORTG=0;PORTB=fnd[sum/10 %10]; PORTG=4; delay_ms(1); PORTG=0;PORTB=fnd[sum %10]; PORTG=8; delay_ms(1); PORTG=0;}//char keyscan(void){char n=0xff;DDRC=0; PORTC=0xff; DDRC=1; PORTC.0=0; delay_us(1); if(!PINC.4)n=1; if(!PINC.5)n=2; if(!PINC.6)n=3; if(!PINC.7){ plus_flag=1; }DDRC=0; PORTC=0xff; DDRC=2; PORTC.1=0; delay_us(1); if(!PINC.4)n=4; if(!PINC.5)n=5; if(!PINC.6)n=6; if(!PINC.7){ erase_flag=1; }DDRC=0; PORTC=0xff; DDRC=4; PORTC.2=0; delay_us(1); if(!PINC.4)n=7; if(!PINC.5)n=8; if(!PINC.6)n=9; if(!PINC.7){ equal_flag=1; }DDRC=0; PORTC=0xff; DDRC=8; PORTC.3=0; delay_us(1); if(!PINC.5)n=0;DDRC=0; PORTC=0xff;return n;}//void main(void){char num=0,old=0;DDRG=0x0f; DDRB=0xff;old=keyscan();while(1){num=keyscan();if(old!=num){ old=num;if((num>=0)&&(num<=9)){if(val<1000){ val*=10; val+=num; disp_mode=disp_val; }}delay_ms(50);}//if(erase_flag){ erase_flag=0; val=0; disp_mode=disp_val; }if(plus_flag ){ plus_flag=0; old_val=val; val=0; disp_mode=disp_operator; }if(equal_flag){ equal_flag=0; sum=old_val+val; val=0; if(sum>9999)disp_mode=disp_ovf; else disp_mode=disp_sum; }//switch(disp_mode){case disp_val: display_val(); break;case disp_operator: display_operator(); break;case disp_ovf: display_ovf(); break;case disp_sum: display_sum(); break;}}}
이 코드로 돌려보세요
댓글 5
조회수 29,56827315co님의 댓글
27315co 작성일
중간에 이부분에서 if(val<1000){ val*=10; val+=num; display(); }
display함수가 어떤함수를 의미하는것이죠??
master님의 댓글
master
if(val<1000){ val*=10; val+=num; disp_mode=disp_val; }
수정할 때 빼먹었나봅니다.
27315co님의 댓글
27315co 작성일말씀하신것까지 반영을해보았는데 결과값이 덧셈을한값이아닌계속 0000이 발생합니다.
master님의 댓글
master
마지막 결과(sum)만 제대로 표시되지 않는 것인가요?
27315co님의 댓글
27315co 작성일네 마지막결과값 sum 만 FND 에 0000 으로 계속 표시가되네요...