Presentation is loading. Please wait.

Presentation is loading. Please wait.

FND, Keypad 사용 계산기 설계 20072413 박민호.

Similar presentations


Presentation on theme: "FND, Keypad 사용 계산기 설계 20072413 박민호."— Presentation transcript:

1 FND, Keypad 사용 계산기 설계 박민호

2 계산기 설계 Specification 몫 Keypad, FND(7-Segment) 사용 C기반 설계
음수표현 : LED에 1 출력 곱셈 : 0~9입력 -> 0~81출력 나눗셈 : 나머지

3 Keypad scheme 계산기 설계

4 Source code - predefine
계산기 설계 Source code - predefine #include <avr/io.h> #define LED_CS (*(volatile unsigned char *)0x4800) #define KEY_DATA (*(volatile unsigned char *)0x5400) #define KEY_SCAN (*(volatile unsigned char *)0x5800) #define DIG_SELECT (*(volatile unsigned char *)0x7000) #define FND_DATA (*(volatile unsigned char *)0x6C00) #define DIP_SW_CS (*(volatile unsigned char *)0x8000) void Platform_Init(void); void Write_KeyPadData(uint8_t data); uint8_t Read_KeyPadData(void); void KeyPadScan(uint8_t *pdata, uint8_t *presult); void ExtFndSet(uint8_t data); void delay_us(unsigned char time_us); void delay_ms(unsigned int time_ms); void digits_FND(uint8_t data); void calc(uint8_t a, uint8_t b, uint8_t *presult);

5 계산기 설계 Source code - main
int main(void){ Platform_Init(); uint8_t a, b, result; //입력 및 계산 결과 버퍼 uint8_t *pa, *pb, *presult; //입력 및 계산 결과 버퍼 포인터 pa = &a; pb = &b; presult = &result; while(1){ KeyPadScan(pa, presult); //Call by Reference KeyPadScan(pb, presult); //Call by Reference calc(a, b, presult); //계산 결과만 Call by Reference }

6 Source code - functions
계산기 설계 Source code - functions void Platform_Init(void){ MCUCR = 0x80; } //값을 읽을 행을 선택. 스캔할 Row void Write_KeyPadData(uint8_t data){ KEY_DATA = data; //값을 읽음 uint8_t Read_KeyPadData(void){ return KEY_SCAN; void delay_us(unsigned char time_us){ register unsigned char i; for(i = 0; i < time_us; i++){ asm volatile("PUSH R0"); asm volatile("POP R0"); } void delay_ms(unsigned int time_ms){ register unsigned int i; for(i = 0; i < time_ms; i++){ delay_us(250);

7 계산기 설계 Source code - fnd value
void ExtFndSet(uint8_t data){ switch(data) { case 0: FND_DATA = ~0x3F; //~(0b ) -> 0b break; case 1: FND_DATA = ~0x06; ... case 9: FND_DATA = ~0x6F; default: //Dot FND_DATA = ~0x80; }

8 계산기 설계 Source code - keypad 1
void KeyPadScan(uint8_t *pdata, uint8_t *presult){ uint8_t data; while(1){ Write_KeyPadData(0x0E); //1번 Row 스캔 data = Read_KeyPadData(); //각 Column 가져오기 if(!(data&0x01)){ *presult = *pdata = 0x03; while((Read_KeyPadData() & 0x0F) != 0x0F){ digits_FND(*pdata); } break; ...

9 계산기 설계 Source code - keypad 2
Write_KeyPadData(0x0D); //2번 줄 스캔 ... Write_KeyPadData(0x0B); //3번 줄 스캔 Write_KeyPadData(0x07); //4번 줄 스캔 //아무것도 안누르고 있을 때 이전 입력을 출력 if((Read_KeyPadData() & 0x0F) == 0x0F){ digits_FND(*presult); } } //while문 끝

10 Source code - fnd output
계산기 설계 Source code - fnd output void digits_FND(uint8_t data){ if((data & 0x7F) >= 0 && (data & 0x7F) < 10){ //절대값이 한 자리수일 때. DIG_SELECT = 0x80; ExtFndSet(data & 0x7F); delay_ms(15); //1의 자리수 출력 및 딜레이 } else if((data & 0x7F) > 9 && (data & 0x7F) < 100){ //절대값이 두 자리수일 때. ExtFndSet((data & 0x7F) % 10); delay_ms(5); //1의 자리수 출력 및 딜레이 DIG_SELECT = 0x40; ExtFndSet((data & 0x7F) / 10); delay_ms(5); //10의 자리수 출력 및 딜레이 else{ //세 자리 이상이거나 에러면 .. 출력 DIG_SELECT = 0xC0; ExtFndSet(data); } //부호 표시 if((data & 0x80) == 0x80) //음수일 때 LED에 1 출력 LED_CS = 0x01; else //양수일 때 LED에 0 출력 LED_CS = 0x00;

11 Source code - calculation 1
계산기 설계 Source code - calculation 1 void calc(uint8_t a, uint8_t b, uint8_t *presult){ uint8_t operator = ~DIP_SW_CS; //연산자 저장 switch(operator){ case 0: // + : plus *presult = a + b; break; case 1: // - : minus if(a >= b) //결과 값이 양수일 때 계산 *presult = (a - b); else //결과 값이 음수일 때 계산 *presult = (b - a) | 0x80; ...

12 Source code - calculation 2
계산기 설계 Source code - calculation 2 case 2: // * : multiply *presult = (a * b); if(*presult > 0x7F) *presult = 0x7F; //0x7F(127)를 넘으면 에러 break; case 3: // / : divide if(b == 0) //divider is 0 - error. the error output is the dots *presult = 0x7F; else *presult = ((a / b) + (((a % b)<<3) + ((a % b)<<1))); default: //operator exception }

13 Source code - demonstration
계산기 설계 Source code - demonstration

14 계산기 설계 Thank you Q&A


Download ppt "FND, Keypad 사용 계산기 설계 20072413 박민호."

Similar presentations


Ads by Google