200 likes | 360 Views
문자열 입 · 출력 프로그램 작성 예. 모니터에 문자열 출력 하는 프로그램 작성. 시리얼 모니터에 문자열을 출력하는 함수 . 함수의 기본형 : void SCI_OutString (char * pt ) 문자열이 저장된 기억장소의 포인터를 인수로 받아 USART 장치에 문자열을 출력하는 한다 . 문자열의 끝은 C 의 문자열과 같이 NULL(0) 가 저장되어 있다 . 영문 소문자 또는 대문자를 전달 받아 대문자로 변환 하여 되돌려 주는 함수 .
E N D
모니터에 문자열 출력 하는 프로그램 작성 • 시리얼 모니터에 문자열을 출력하는 함수. • 함수의 기본형 : void SCI_OutString(char *pt) • 문자열이저장된 기억장소의 포인터를 인수로 받아 USART 장치에 문자열을 출력하는 한다. • 문자열의 끝은 C 의 문자열과 같이 NULL(0)가 저장되어 있다. • 영문 소문자 또는 대문자를 전달 받아 대문자로 변환 하여되돌려 주는 함수. • 함수의 기본형 : void SCI_UpCase(char character) • 부호 없는 정수를 출력하는 함수. • 함수의 기본형 : void SCI_OutUDec(unsigned short number) • 부호 없는 정수 number 의 값을 전달 받아 문자로 변환 하여 USART 장치에 출력 하라. • 부호 있는 정수를 출력하는 함수. • 함수의 기본형 : 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 장치에 출력 하라
Key Board로 부터 문자열을 입력 하는 프로그램 • 부호 없는 10진 수를 Key Board로부터 입력하는 함수. • 부호 있는 10진 수를 Key Board로부터 입력하는 함수. • 부호 없는 16진 수를 Key Board로부터 입력하는 함수. • 문자열을 Key Board로부터 입력하는 함수.
// 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; } • 표준 출력 함수 예
// 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; } • 표준 입력 함수 예
// Output String (NULL termination) void SCI_OutString(char *pt){ char letter; while(letter=*pt++){ SCI_OutChar(letter); } } • 문자열을 출력하는 함수
// 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; } • 영문 소문자 또는 대문자를 전달 받아 대문자로 변환 하여되돌려 주는 함수
//-----------------------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 */ } • 부호 없는 정수를 출력하는 함수
부호 있는 정수를 출력하는 함수 // 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); }
// 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'); } } • 부호 없는 정수를 16진 수로 변환하여 출력하는 함수
// 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++; } } • Null 문자로 끝나는 문자열을 전달 받아 대 문자로 변환하여 되돌려 주는 함수
부호 없는 10진 수를 Key Board로부터 입력하는 함수 //----------------------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); }
// 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; }
부호 있는 10진 수를 Key Board로부터 입력하는 함수 //----------------------------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 } }
// 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; }
부호 없는 16진 수를 Key Board로부터 입력하는 함수. //---------------------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; }
// 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; }
문자열을 Key Board로부터 입력하는 함수 //------------------------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;
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 삽입함. }