int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\ o, world!\\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);} -- Dishonorable mention, Obfuscated C Code Contest, 1984. (Author requested anonymity.) S07: The C Language Required: PM: Ch 6, pgs 63-80 PM: Ch 8.4, pgs 114-118 Recommended: K&R, Chapters 1-4 C++ Compiler 6.5 Global Variables Operators Functions C program Variables Expressions Control Statements Library Functions CS 224 Chapter Project Homework L01: Warm-up L02: FSM HW01 HW02 L03: Blinky L04: Microarch L05b: Traffic Light L06a: Morse Code HW03 HW04 HW05 HW06 L07b: Morse II L08a: Life L09a: Pong HW07 HW08 HW09 HW10 S00: Introduction Unit 1: Digital Logic S01: Data Types S02: Digital Logic Unit 2: ISA S03: ISA S04: Microarchitecture S05: Stacks / Interrupts S06: Assembly Unit 3: C S07: C Language S08: Pointers S09: Structs S10: I/O BYU CS 224 The C Language 2 Learning Objectives… Learning Outcomes After completing this section, you should be able to Discuss the advantages of using a high level language. Explain the difference between a compiler and an interpreter. Summarize the function of the C preprocessor. Describe the compile/assembly/linker process. List the main features of a C Language program. Describe how C stream I/O works. BYU CS 224 The C Language Topics Compilers vs. Interpreters C Program Symbol Table Variables & Operators Scope Expressions Precedence C Compilation Frames C / Assembler Coding Practices I/O Streams 3 Terms… Activation Record – A block of memory on the stack that is created when a function is called and contains all the local variables for a given invocation of a function. Arithmetic Operator – Operator that returns a numerical value. Associativity – The execution order of same precedence operators. Bitwise Operator – Operator that performs bitwise logical operations. Data type – Representation and valid operations of data object. Expression – Combination of variables / operators that returns a single value. Global (static) – Variable permanently assigned to a memory location. Literal – An immutable data object. Local (automatic) – Variable stored in a functions activation record. Logical Operator – Operator that returns a logical (true/false) value. Operator – Performs an operation on operand(s). Scope - Extent of a variable/function’s availability in a program. Precedence – The execution order of operators. Variable - Symbolic name for a memory location that hold a value. Variable Coercion – Forcing mixed data type variables to a common type. Volatile – Variable modifier that prohibits optiminization by compiler. BYU CS 224 The C Language 4 Levels of Abstraction Problems Algorithms High Level Languages Language Assembly code Machine (ISA) Architecture Machine code Microarchitecture MSP430 Architecture Circuits Logic gates, multiplexers, memory, etc. Devices Transistors BYU CS 224 The C Language 5 High Level Languages High Level Languages The closer a language is to your original specification, the easier the program is to write. Many, many programming languages LISP - LISt Processing PROLOG - logic programming MATLAB - matrix and vector manipulations BASIC – interpreter for small computers APL – matrix and vectors FORTRAN – formula translation COBOL – business and accounting PASCAL – procedural Ada – DOD large systems Java – Internet C, C++ …. BYU CS 224 The C Language 6 High Level Languages High Level Languages Allow us to use symbolic names for values Hide low level details (ISA) from programmer Portable software (works on different ISAs) printf("Hello World!"); Provide expressiveness numberOfDays = 30; switch_A = ON; Provide abstraction of underlying hardware Programmer simply assigns each value a name Allow us to ignore many memory details. Express complex tasks with smaller amount of code English-like and human constructs Enhance code readability Can read like a novel… Easier to debug/maintain BYU CS 224 main() { readInput(); checkForErrors(); doCalculation(); writeOutput(); } The C Language if(isCloudy) get(umbrella); else get(sunglasses); 7 High Level Languages High Level Languages Provide safeguards against bugs Rules can lead to well-formed programs Compilers can generate checks array bounds checking data type checking assert(accountBalance >= 0); Many languages provide explicit support for assertions structured programming (no GOTO statements) something that should be true - if it isn’t, then error High-level languages make complex programming simpler, while low-level languages tend to produce more efficient code However, well-designed compilers frequently produce code comparable in efficiency to what most low-level programmers can produce by hand with better overall results BYU CS 224 The C Language 8 Compilers vs Interpreters temp=v[i]; v[i]=v[i+1]; v[i+1]=temp; = Executable BYU CS 224 MOV.B 0x0001(SP),R14 MOV.W SP,R15 INCD.W R15 ADD.W R15,R14 MOV.B @R14,0x0000(SP) MOV.B 0x0001(SP),R14 INC.W R14 Object code 415E 0001 410F 532F 5F0E 4EE1 0000 415E 0001 531E Source code Application Assembly Interpreter High-level language statements Assembler temp=v[i]; v[i]=v[i+1]; v[i+1]=temp; Compiler Compilers vs Interpreters = Data Path The C Language 9 The C Language The C Programming Language Developed between 1969 and 1973 by Dennis Ritchie at Bell Labs. C first developed for use in writing compilers and operating systems (UNIX). A low-level high-level language Many variants of C 1989, the American National Standards Institute standardized C (ANSI C, most commonly used C) “The C Programming Language” by Kernighan and Ritchie is the C “Bible” (Also called the “White Book”.) C is one of the most popular programming languages of all time – very few computer architectures exist for which there is no C. C is predecessor to most of today’s procedural languages such as C++ and Java. BYU CS 224 The C Language 10 Dennis Ritchie (1940-2011) Dennis Ritchie, the software developer who brought the world the C programming language and Unix operating system, has died at the age of 70. Ritchie (known by the username "dmr") was part of a dynamic software development duo with Ken Thompson at Bell Labs,, which they joined in 1967 and 1966, respectively. Ritchie created the C programming language, which replaced the B programming language Thompson invented. Two years later in 1969, they created Unix, initially designed for minicomputers. Unix was initially written in 1969 in assembly language and later in C. Unix went on to become key software for critical computing infrastructure around the world. “UNIX is very simple, it just needs a genius to understand its simplicity.” --Dennis Ritchie BYU CS 224 The C Language 11 The C Language Compiling a C Program C/C++ Code Assembler Code Object Code Machine Code BYU CS 224 The C Language 12 The C Language Compiling a C Program Preprocessor Text C Source Code C Compiler C Preprocessor 2nd Pass 1st Pass Source Code Analysis Symbol Table Preprocessed C source code Code Generation Assembly Code Assembler Library & Object Files Object Code Linker Executable Image BYU CS 224 The C Language Machine Code 13 1st C Program A First Program Tells compiler to use all the definitions found in the msp430.h library. A .h file is called a header file and //************************************ containsP1.0 definitions and declarations. // blinky.c: Software Toggle //************************************ All C programs must have a main() routine. #include "msp430.h" volatile unsigned int i; // void main(void) { WDTCTL = WDTPW | WDTHOLD; // P4DIR |= 0x40; // for (;;) // { P4OUT ^= 0x40; // while (--i); // } Delay 65,536 } BYU CS 224 no optimization Stop WD w/Password stop Allocate watchdog a RAM variable P4.6 output (.bss i,2) loop Set P4.6 as output toggle P4.6 Loop forever delay The C Language Toggle P4.6 14 C Style Style Use lots of comments /* This is a comment */ // This is a single line comment Indents Each new scope is indented 2 spaces from previous Put { on end of previous line, or start of next line Line matching } up below Style is something of a personal matter. Everyone has their own opinions… What is presented here is similar to that in common use and a good place to start... BYU CS 224 Style 1 if(a < b) { b = a; a = 0; } else { a = b; b = 0; } The C Language Style 2 if(a < b) { b = a; a = 0; } else { a = b; b = 0; } 15 C Preprocessor The C Preprocessor #define symbol code The preprocessor replaces symbol with code everywhere it appears in the program below #define NUMBER_OF_MONKEYS 259 #define MAX_LENGTH 80 #define PI 3.14159 #include filename.h The preprocessor replaces the #include directive itself with the contents of header file filename.h #include <stdio.h> #include "myheader.h" /* a system header file */ /* a user header file */ Macros #define add(x,y) x+=y #define doLoop(x,y) do {x} while(y); doLoop(add(z,2),z<10) BYU CS 224 The C Language do {z+=2} while(z<10); 16 C Program A C Program What is a C program? Functions Global variables Variables are symbolic names for memory locations that hold values 2 types of variables Variable declarations include A symbolic name Data type (int, char, double) Scope (code region where the variable is defined) Variables are stored in memory or in registers. Local (automatic) Global (static) The compiler keeps track of where a variable’s value is currently stored. Operators manipulate values BYU CS 224 The C Language 17 Variables & Operators The C Symbol Table The C compiler keeps track of variables in a program during compilation in a symbol table A symbol table entry is created when a variable is declared. Specifically, each symbol table entry contains: Variable name Variable data type (int, float, char, etc.) Variable storage class (auto, static) Where in memory the variable is stored (an offset) An identifier to indicate the variable’s scope Variables must be declared and in scope before they can be used (referenced) by a program BYU CS 224 The C Language 18 The C Language Compiling a C Program Preprocessor Text C Source Code C Compiler C Preprocessor 2nd Pass 1st Pass Source Code Analysis Symbol Table Preprocessed C source code Code Generation Assembly Code Assembler Library & Object Files Object Code Linker Executable Image BYU CS 224 The C Language Machine Code 19 Variables & Operators MSP430 C Variable Data Types Type Size Representation Minimum Maximum 8 bits ASCII -128 127 bool 8 bits ASCII 0 255 short, signed short 16 bits 2's complement -32768 32767 unsigned short 16 bits Binary 0 65535 int, signed int 16 bits 2's complement -32768 32767 unsigned int 16 bits Binary 0 65535 long, signed long 32 bits 2's complement -2,147,483,648 2,147,483,647 unsigned long 32 bits Binary 0 4,294,967,295 enum 16 bits 2's complement -32768 32767 float 32 bits IEEE 32-bit 1.175495e-38 3.4028235e+38 double 32 bits IEEE 32-bit 1.175495e-38 3.4028235e+38 long double 32 bits IEEE 32-bit 1.175495e-38 3.4028235e+38 pointers, references 16 bits Binary 0 0xFFFF function pointers 16 bits Binary 0 0xFFFF char, signed char unsigned char BYU CS 224 The C Language 20 Variables & Operators Variable Declarations int int i,j,k; i1, i2, i3, c3po; // declaring more than one variable // numbers OK, except for first letter int bananas = 10; // using an initializer int int monkey_count = 0; monkeyCount = 0; // two ways of doing ... // ... multi-word names int ab, Ab, aB, AB; int _compilerVar; // case sensitive names // compiler uses _ as first char char newline = ‘\n’; char lineBuffer[32]; // a character with an initializer // an array of 32 chars (a string) double double double double bananasPerMonkey; hugeNumber = 1.0E33; tinyNumber = 1.0E-33; fractionThing = 3.33333; BYU CS 224 // // // // floating point declarations positive exponent negative exponent no exponent The C Language 21 Scope Scope: Local versus Global Extent of a variable/function’s availability in a program Local Variables (automatic) { Declared at the beginning of a block Stored in activation record on the stack Scope is from point of declaration to the end of the block Un-initialized // begin block int chimp; ... } Global Variables (static) Declared outside of a function Stored in Global Data Section of memory Scope is from point of declaration to the end of the program May be initialized to zero BYU CS 224 The C Language int chimp; { // begin block ... } 22 Variables Literals/ Constants Literal Values Constant Variables Variable declarations prefixed with the const qualifier Immutable named variables const double pi = 3.14159; Symbolic Values Unnamed constant values used in programs area = 3.14159 * radius * radius; Created using preprocessor directive #define #define PI 3.14159 How are the above the same? How are the above different? BYU CS 224 The C Language 23 Quiz 7.1 Expand the following C pre-processor macros: #define #define #define #define MASK(bit) (0x80 >> ((bit)%8)) SET_CELL(a2d,row,col) a2d[row][(col)/8] |= MASK(col) CLEAR_CELL(a2d,row,col) a2d[row][(col)/8] &= ~ MASK(col) TEST_CELL(a1d,col) (a1d[(col)/8] & MASK(col)) 1. SET_CELL(life,row,col+1); 2. CLEAR_CELL(life,row,col); 3. if (TEST_CELL(temp,col)) { ... }; BYU CS 224 The C Language 24 Variables Variable Usage Make your variable names meaningful Common naming conventions Hungarian notation (prefix hints) UpperCamelCase / lowerCamelCase for most identifiers #define TRUE 1 Names beginning with underscore are reserved for compilers/libraries last_variable_used, number_of_days all-upper-case for constants MyInputByte, buzzerCounter Underscores gVariable, hMyRoutine __reserved, _Reserved Encapsulate your variables Avoid global variables - explicitly pass parameters to functions Keep the scope as small as you can BYU CS 224 The C Language 25 Variables volatile volatile proceeding a variable name instructs the compiler to prohibit caching the variable’s contents when optimizing code. always re-read the variable’s value when accessing the variable. not use computer registers to store a variable’s content. volatile int switches,dcnt void main(void) { Pressing a switch sets if (switches & 0x01) {...} } dcnt Inform the compiler that integers switches and dcnt are not to be optimized. #pragma vector=PORT1_VECTOR Sample P1IN when __interrupt void Port_1_ISR(void) dcnt equals 0 { P1IFG &= ~0x0f; // P1.0-3 IFG cleared dcnt = DEBOUNCE_CNT; // enable debounce } #pragma vector = WDT_VECTOR __interrupt void WDT_ISR(void) { if (dcnt && (--dcnt == 0)) switches = (P1IN ^ 0x0f) & 0x0f; } BYU CS 224 The C Language 26 Operators Operators and Expressions Expressions are formed by combining variables with operators and ALWAYS return a single value in C. i = 5 * x + 100; a = (a < b); Operators Assignment – Arithmetic – AND, OR, XOR, NOT, and shifts on Integers equality, inequality, less-than, etc. Logical – C supports a rich set of operators that allow the programmer to manipulate variables Relational – add, subtract, multiply, divide Bitwise – changes the values of variables AND, OR, NOT on Booleans Increment/Decrement BYU CS 224 The C Language 27 Operators The Assignment Operator The operator symbol is the equal sign The expression on the right-hand side is evaluated and assigned to the left-hand variable { int x = 9; Stack sub.w #2,sp mov.w #9,0(sp) x = x + 4; add.w #4,0(sp) sp sp } BYU CS 224 The C Language X 0x05fa 0x05fc 0x05fe 0x05f0 ... 0x0600 28 Operators Arithmetic / Relational Operators Add (+), subtract (–), multiply (*), divide (/) Integer; 5/3 = 1 (truncated to int) Floating point : 5.0 / 3.0 = 1.66666666 Integer; remainder after integer division; 5 % 3 = 2 Relational operators return Boolean values: x – y x * y x / y Modulus (%) x + y Arithmetic Operators x % y 0 if relation is FALSE 1 if relation is TRUE Comparisons x == y x != y x<y x <= y x>y x >= y BYU CS 224 equality inequality less-than less-than-or-equal greater-than greater-than-or-equal The C Language 29 Operators Bitwise Operators Perform bitwise logical operations across individual bits of a value. AND & OR | XOR ^ NOT ~ (1’s complement) Shifts are bitwise operators SHIFT LEFT << SHIFT RIGHT >> x << y x >> y BYU CS 224 x y x & y x | y x ^ y ~x : : : : : : 1 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 0 0 0 0 1 (binary) (binary) (binary) (binary) (binary) (binary) shift x y-places to the left (add zeros) shift x y-places to the right (sign extend) The C Language 30 Operators Logical Operators Logical operators evaluate to Boolean AND OR NOT && || ! 10 && 20 1 10 && 0 0 Don’t confuse with Bitwise operators Operate on Boolean inputs and produce Boolean outputs Boolean inputs (how values are interpreted): Value not equal to zero TRUE Value equal to zero FALSE if( 'a' <= x <= 'z' ) statement; // wrong! if(('a' <= x) && (x <= 'z')) statement; if(!x) statement; if(x == 0) statement; if(x) statement; if(x != 0) statement; BYU CS 224 The C Language Same Same 31 Expressions Order of Evaluation Variable Coercion When executing expressions of mixed types, C automatically converts integer to floating point and back again as needed. int x = 1; x = x + 4.3; x is declared an integer integer + floating point ?? (result is x = 5) Avoid the use of forced data conversion as operators may yield unanticipated results. Order of expression evaluation: Precedence – higher precedence operators evaluate first. Associativity – operators of same precedence evaluate left to right (with a few exceptions). Parentheses override all other evaluation rules. BYU CS 224 The C Language 32 Expressions Operator Precedence/Associativity OPERATORS ( ) [ ] -> . ! ~ ++ -+ * & (type) sizeof * / % + << >> Bitwise < <= > >= Relational Unary == != Relational & Bitwise ^ Bitwise | Bitwise && Logical || Logical ?: = += -= *= /= %= &= ^= |= <<= >>= , BYU CS 224 The C Language ASSOCIATIVITY left to right right to left left to right left to right left to right left to associate right operators right lefttotoleft. right left to right left to right left to right left to right left to right right to left right to left left to right 33 Quiz 7.2 Evaluate the variable result for the following: 1. int a = 1, b = 2, c = 3, d = 4, e = 5; int result = a * b + c / d * e; 2. int a = 6, b = 5, c = 4, d = 3; int result = c + (d = b * a); 3. int w = 5, x = 4, y = 3, z = 2; int result = w % x / y * z; BYU CS 224 The C Language 34 Expressions Combined Assignment Operators Arithmetic and bitwise operators can be combined with the assignment operator. x x x x x x x x x x BYU CS 224 += y; -= y; *= y; /= y; %= y; &= y; |= y; ^= y; <<= y; >>= y; x x x x x x x x x x = = = = = = = = = = x x x x x x x x x x + (y); – (y); * (y); / (y); % (y); & (y); | (y); ^ (y); << (y); >> (y); The C Language Note: All of the expression on the right is considered parenthesized. 35 Expressions Conditional Expressions Conditional expression C multiplexor operation Format: <boolean> ? <true expression> : <false expression> Example: x ? y : z y z 0 1 x x?y:z This expression returns the value of y if x != 0, otherwise it returns the value of z printf("%d dog%s", dogs, (dogs == 1) ? "" : "s"); BYU CS 224 The C Language 36 Quiz 7.3 What is the output? 1. main() { int i = 5,j = 10; i = i &= j && 10; printf("%d %d",i,j); } 2. main() { int i = 4,j = 7; j = j || i++ && printf("Hello"); printf("%d %d", i, j); } BYU CS 224 The C Language 37 Compilation Examples C to Assembly – Example 1 SP { int int int x = y = x y z x x = = = + + 10; 20; 30; 4; y - z; SP } 0x8696: 0x869a: 0x86a0: 0x86a6: 0x86ac: 0x86b0: 0x86b4: 0x86b6: 0x86ba: 0x86be: BYU CS 224 8031 40B1 40B1 40B1 52A1 411F 512F 811F 4F81 5031 0006 000A 0000 0014 0002 001E 0004 0000 0002 0004 0002 0006 SUB.W MOV.W MOV.W MOV.W ADD.W MOV.W ADD.W SUB.W MOV.W ADD.W x0600 x05fe 0x001e (z) x05fc 0x0014 (y) x05fa 0x000a (x) x05f8 x05f6 Stack 0x000e (x) #0x0006,SP #0x000a,0x0000(SP) #0x0014,0x0002(SP) #0x001e,0x0004(SP) #4,0x0000(SP) 0x0002(SP),R15 @SP,R15 0x0004(SP),R15 R15,0x0002(SP) #0x0006,SP The C Language 38 Compilation Examples C to Assembly – Example 2 int main(int argc, char** argv) { unsigned int x = 7; unsigned int y = 5; unsigned int z; z = x * y; return 0; } SP SP x0600 x05fe ret adr x05fc z 0x0005 (y) x05fa 0x0007 (x) x05f8 argv (r13) x05f6 argc (r12) x05f4 Stack BYU CS 224 0x8040: 0x8044: 0x8048: 0x804c: 0x8052: 0x8058: 0x805c: 0x8060: 0x8064: 0x8068: 0x806a: 0x806e: main: 8031 000A 4D81 0002 4C81 0000 40B1 0007 0004 40B1 0005 0006 411C 0004 411D 0006 12B0 80DA 4C81 0008 430C 5031 000A 4130 __mpyi: 0x80da: 430E mpyi_add_loop: 0x80dc: C312 0x80de: 100C 0x80e0: 2801 0x80e2: 5D0E shift_test_mpyi: 0x80e4: 5D0D 0x80e6: 930C 0x80e8: 23F9 0x80ea: 4E0C 0x80ec: 4130 The C Language SUB.W MOV.W MOV.W MOV.W MOV.W MOV.W MOV.W CALL MOV.W CLR.W ADD.W RET #0x000a,SP R13,0x0002(SP) R12,0x0000(SP) #0x0007,0x0004(SP) #0x0005,0x0006(SP) 0x0004(SP),R12 0x0006(SP),R13 #__mpyi R12,0x0008(SP) R12 #0x000a,SP CLR.W R14 CLRC RRC JLO ADD.W R12 (shift_test_mpyi) R13,R14 RLA.W TST.W JNE MOV.W RET R13 R12 (mpyi_add_loop) R14,R12 39 Compilation Examples C to Assembly– Example 3 int inGlobal; void main(void) { int outLocal; int inLocalA; int inLocalB; outLocal = inGobal + inLocalA + inLocalB; return; } Symbol Table BYU CS 224 main: SUB.W MOV.W ADD.W ADD.W MOV.W ADD.W RET #0x0006,SP 0x0002(SP),R15 &inGlobal,R15 0x0004(SP),R15 R15,0x0000(SP) #0x0006,SP Identifier Type Storage Class Offset Scope inGlobal int Static absolute global inLocalA int Auto 2(SP) main inLocalB int Auto 4(SP) main outLocal int Auto 0(SP) main The C Language 40 Quiz 7.4 Fill in the resulting values for x, y, and z after evaluating the construct. Assume for each row, x, y, and z are initialized to 10, 20, and 30 respectively. x=10 1) if (x = y) y = 100; 2) 3) if (x < 10) y = 1; else if (x < 20) y else if (x < 30) y switch ('a') { case 'a': y++; case 'b': --y; } 4) for (x=1; x<y; x++, y--) z = x + y; 5) while (!z) { z %= y; } 6) do { y=20 z=30 = 5; = 10; z *= 5; z /= 10; x = --y; z = x++; } while (z); BYU CS 224 The C Language 41 Streaming I/O in C C Stream I/O C I/O I/O facilities are not part of the C language itself Most digital I/O handled directly by C program #include "msp430.h" SPR’s, Ports, A/D, transponder, switches, LED’s, etc The ANSI standard defines a set of I/O library functions for portability Nonetheless, programs do interact with their environment! Programs that confine their system interactions to facilities provided by the standard library can be moved from one system to another without change. The properties of the C I/O library functions are specified in header files #include <stdio.h> (C standard library) #include "RBX430_lcd.h" BYU CS 224 The C Language 43 C Stream I/O C Data Streams C I/O is character based, using streams. I/O streams must be opened / closed. In standard C there are 3 streams automatically opened before main() is called: stdin is the input stream stdout is the output stream stderr stream for error messages printf function outputs formatted values to stdout stream The printf function requires a format string followed by optional parameters: printf( "format string...", parameters... ); The format string contains two object types: BYU CS 224 Ordinary characters that are copied to the output stream Conversion specifications which cause conversion and printing of the next argument in the argument list. The C Language 44 C Stream I/O Printf Output in C String literal printf( format_string, parameters ) Decimal Integer printf("Hello World"); printf("\n%d plus %d is %d", x, y, x+y); printf("\nIn hex it is %x", x+y); printf("\nHello, I am %s. ", myname); Hex printf("\nIn ascii, 65 is %c. ", 65); Integer Output: Hello world Newline 5 plus 6 is 11 In hex it is b Hello, I am Bambi. In ascii, 65 is A. BYU CS 224 The C Language Character String 45 LCD I/O RBX430_lcd.h Prototypes uint8 lcd_init(void); void lcd_clear(void); void lcd_backlight(uint8 backlight); void lcd_volume(uint8 volume); uint16 lcd_mode(int16 mode); uint8 lcd_cursor(uint16 x, uint16 y); uint16 lcd_printf(const char* fmt, ...); uint8 lcd_image(const uint8* image, int16 x, int16 y); uint8 lcd_bitImage(const uint8* image, int16 x, int16 y, uint8 flag); uint8 lcd_wordImage(const uint16* image, int16 x, int16 y, uint8 flag); uint8 lcd_blank(int16 x, int16 y, uint16 w, uint16 h); uint8 lcd_point(int16 x, int16 y, uint8 flag); void lcd_circle(int16 x, int16 y, uint16 r, uint8 pen); void lcd_rectangle(int16 x, int16 y, uint16 w, uint16 h, uint8 pen); BYU CS 224 The C Language 46 LCD I/O LCD – 160 x 160 x 5 Pixels Y (0-159) lcd_init(); lcd_clear(); // 5 x 8 pixel Characters lcd_cursor(40, 60); lcd_printf("Hello World!"); BYU CS 224 Hello World! X (0-159) The C Language 47 BYU CS 224 The C Language 48