Download presentation
Presentation is loading. Please wait.
Published byGregory Dalton Modified over 9 years ago
1
KyungHee Univ. 1-0 문자열 입 · 출력 프로그램 작성 예
2
KyungHee Univ. 1-1 모니터에 문자열 출력 하는 프로그램 작성 표준 출력 장치에 문자를 출력 하는 함수 함수의 기본형 : void SCI_OutChar(letter) 문자를 출력 하는 표준 함수 장치에 따라 실제 문자를 출력 하는 함수를 별도로 작성 하여 출력 장치가 변경 되어도 프로그램 변경은 최소가 되도록 한다. 시리얼 모니터에 문자열을 출력하는 함수. 함수의 기본형 : void SCI_OutString(char *pt) 문자열이 저장된 기억장소의 포인터를 인수로 받아 USART 장치에 문자열을 출력하는 한다. 문자열의 끝은 C 의 문자열과 같이 NULL(0) 가 저장되어 있다. 영문 소문자 또는 대문자를 전달 받아 대문자로 변환 하여 되돌려 주는 함수. 함수의 기본형 : void SCI_UpCase(char character) 부호 없는 정수를 출력하는 함수. 함수의 기본형 : void SCI_OutUDec(unsigned short number) 부호 없는 정수 number 의 값을 전달 받아 문자로 변환 하여 USART 장치에 출력 한다.
3
KyungHee Univ. 1-2 모니터에 문자열 출력 하는 프로그램 작성 부호 있는 정수를 출력하는 함수. 함수의 기본형 : void SCI_OutSDec(unsigned short number 부호 있는 정수 number 의 값을 전달 받아 문자로 변환 하여 USART 장치에 출력 한다. Null 문자로 끝나는 문자열을 전달 받아 대 문자로 변환하여 되돌려 주는 함수. 함수의 기본형 : void SCI_UpCaseString(char *inString) 문자열이 저장된 기억장소의 포인터를 인수로 받아 대문자로 변환 한 후 되돌려 주는 함수 부호 없는 정수를 16 진 수로 변환하여 USART 장치에 출력하는 함수. 함수의 기본형 : void SCI_OutUHex(unsigned short number) 부호 없는 정수 number 의 값을 전달 받아 16 진 문자열로 변환 하여 USART 장치에 출력 한다.
4
KyungHee Univ. 1-3 Key Board 로 부터 문자열을 입력 하는 프로그램 표준 입력 장치로 부터 한 문자를 입력 받는 함수 함수의 기본형 : unsigned short SCI_InChar() 문자열을 Key Board 로부터 입력하는 함수. 함수의 기본형 : void SCI_InString(char *string, unsigned int max) 부호 없는 10 진 수를 Key Board 로부터 입력하는 함수. 함수의 기본형 : unsigned short SCI_InUDec(void) 부호 있는 10 진 수를 Key Board 로부터 입력하는 함수. 함수의 기본형 : short SCI_InSDec(void) 부호 없는 16 진 수를 Key Board 로부터 입력하는 함수. 함수의 기본형 : unsigned short SCI_InUHex(void)
5
KyungHee Univ. 1-4 표준 출력 함수 예 // SCI_OutChar to USART void SCI_OutChar(char letter){ tx0_char(letter); } // UART0 을 이용한 출력 void tx0_char(unsigned char data) { // Wait for empty transmit buffer while ( !(UCSR0A & (1<<UDRE))); // Put data into buffer, sends the data UDR0 = data; }
6
KyungHee Univ. 1-5 표준 입력 함수 예 // SCI_InChar from USART unsigned short SCI_InChar(){ return (rx0_char()); } // UART0 을 이용한 입력 unsigned char rx0_char(void) { // Wait for data to be received while ( !(UCSR0A & (1<<RXC)) ); // Get and return received data from buffer return UDR0; }
7
KyungHee Univ. 1-6 문자열을 출력하는 함수 // Output String (NULL termination) void SCI_OutString(char *pt){ char letter; while(letter=*pt++){ SCI_OutChar(letter); }
8
KyungHee Univ. 1-7 영문 소문자 또는 대문자를 전달 받아 대문자로 변환 하여 되돌려 주는 함수 // converts lowercase to uppercase // char by subtracting $20 from lowercase ASCII to make // uppercase ASCII char SCI_UpCase(char character){ return ((character>='a') && (character<='z')) ? character-0x20 : character; }
9
KyungHee Univ. 1-8 부호 없는 정수를 출력하는 함수 //-----------------------SCI_OutUDec----------------------- // Output a 16 bit number in unsigned decimal format // Variable format 1-5 digits with no space before or after // This function uses recursion to convert decimal number // of unspecified length as an ASCII string void SCI_OutUDec(unsigned short n){ if(n >= 10){ SCI_OutUDec(n/10); Recursive Operation n=n % 10; } SCI_OutChar( n + '0‘ ); /* n is between 0 and 9 */ }
10
KyungHee Univ. 1-9 부호 있는 정수를 출력하는 함수 // Output a 16 bit number in signed decimal format // Variable format (optional sign)1 to 5 digits with no space before or after // This function checks if the input parameter is negative, // If the number is negative, then // 1) it outputs a "-", // 2) negates the number and // 3) outputs it with OutUDec. // Otherwise, it just calls OutUDec (i.e., no "+" sign) void SCI_OutSDec(short number){ if(number < 0){ number = -number; SCI_OutChar('-'); } SCI_OutUDec(number); }
11
KyungHee Univ. 1-10 부호 없는 정수를 16 진 수로 변환하여 출력하는 함수 // Output a 32 bit number in unsigned hexadecimal format // Variable format 1 to 8 digits with no space before or after // This function uses recursion to convert the number of // unspecified length as an ASCII string void SCI_OutUHex(unsigned short number){ if(number >= 0x10) { SCI_OutUHex(number / 0x10); SCI_OutUHex(number % 0x10); } else if(number < 0xA){ SCI_OutChar(number + '0'); } else{ SCI_OutChar((number - 0x0A) + 'A'); }
12
KyungHee Univ. 1-11 Null 문자로 끝나는 문자열을 전달 받아 대 문자로 변환하여 되돌려 주는 함수 // converts a NULL terminated string to uppercase void SCI_upCaseString(char *inString){ char *pt = inString; // 'a' = 0x61 and 'A' = 0x41, so their difference is 0x20 while(*pt){ // NULL => done if((*pt >= 'a') && (*pt <= 'z')) *pt -= 0x20; pt++; }
13
KyungHee Univ. 1-12 //----------------------SCI_InUDec------------------------------- // InUDec accepts ASCII input in unsigned decimal format // and converts to a 16 bit unsigned number // with a maximum value of 65535 // If you enter a number above 65535, it will truncate without reporting the error // Backspace will remove last digit typed unsigned short SCI_InUDec(void){ unsigned short number=0, length=0; unsigned char character; while((character=SCI_InChar())!=CR){ // accepts until carriage return input // The next line checks that the input is a digit, 0-9. // If the character is not 0-9, it is ignored and not echoed if((character>='0') && (character<='9')) { number = 10*number+(character-'0'); // this line overflows if above 65535 length++; SCI_OutChar(character); } 부호 없는 10 진 수를 Key Board 로부터 입력하는 함수
14
KyungHee Univ. 1-13 // If the input is a backspace, then the return number is // changed and a backspace is outputted to the screen else if((character==BS) && length){ number /= 10; length--; SCI_OutChar(character); } return number; }
15
KyungHee Univ. 1-14 //----------------------------SCI_InSDec----------------------------- // InSDec accepts ASCII input in signed decimal format // and converts to a signed 16 bit number // with an absolute value up to 32767 // If you enter a number above 32767 or below -32767, // it will truncate without reporting the error // Backspace will remove last digit typed short SCI_InSDec(void){ short number=0, sign=1;// sign flag 1= positive -1 = negative unsigned int length=0; unsigned char character; while ((character=SCI_InChar())!=CR){ // Check for carriage return if(!length) { // + or - only valid as first char if(character=='-'){ sign = -1; length++; SCI_OutChar('-');// if - inputted, sign is negative } else if(character=='+'){ length++; SCI_OutChar('+');//if + inputted, sign is positive } 부호 있는 10 진 수를 Key Board 로부터 입력하는 함수
16
KyungHee Univ. 1-15 // The next line checks that the input is a digit, 0-9 // If the character is not 0-9, it is ignored and not echoed if((character>='0') && (character<='9')){ number = number*10+character-'0'; // this line overflows if above 32767 length++; SCI_OutChar(character); } // If the input is a backspace, then the return number is changed and a backspace // is outputted to the screen. If the backspace erases a minus, then sign is // reset to positive else if((character==BS) && length){ number /=10; length--; if(!length){ sign = 1; } SCI_OutChar(BS); } return sign*number; }
17
KyungHee Univ. 1-16 //---------------------SCI_InUHex---------------------------------------- // InUHex accepts ASCII input in unsigned hexadecimal (base 16) format // No '$' or '0x' need be entered, just the 1 to 4 hex digits // It will convert lower case a-f to uppercase A-F // and converts to a 16 bit unsigned number // with a maximum value of FFFF // If you enter a number above FFFF, it will truncate without reporting the error // Backspace will remove last digit typed unsigned short SCI_InUHex(void){ unsigned short number=0, digit, length=0; unsigned char character; while((character=SCI_UpCase(SCI_InChar()))!=CR){ digit = 0x10; // assume bad if((character>='0') && (character<='9')){ digit = character-'0'; } else if((character>='A') && (character<='F')){ digit = (character-'A')+0xA; } 부호 없는 16 진 수를 Key Board 로부터 입력하는 함수.
18
KyungHee Univ. 1-17 // If the character is not 0-9 or A-F, it is ignored and not echoed if(digit <= 0xF ){ number = number *0x10 + digit; length++; SCI_OutChar(character); } // Backspace outputted and return value changed if a backspace is inputted else if(character == BS && length){ number /= 0x10; length--; SCI_OutChar(character); } return number; }
19
KyungHee Univ. 1-18 //------------------------SCI_InString------------------------ // This function accepts ASCII characters from the serial port // and adds them to a string until a carriage return is inputted // or until max length of the string is reached. // It echoes each character as it is inputted. // If a backspace is inputted, the string is modified // and the backspace is echoed // InString terminates the string with a null character // -- Modified by Agustinus Darmawan + Mingjie Qiu -- void SCI_InString(char *string, unsigned int max) { unsigned int length=0; unsigned char character; 문자열을 Key Board 로부터 입력하는 함수
20
KyungHee Univ. 1-19 while((character = SCI_InChar()) != CR){ if(character == BS){ if(length){ string--; length--; SCI_OutChar(BS); } else if(length < max){ *string++ = character; length++; SCI_OutChar(character); } *string = 0; // 문자열의 끝에 Null code 삽입함. }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.