Serial Interface LCD circuit

The circuit simply consists of a PIC micro, ICSP interface, an RS232 level translator and an HD44780 LCD. Initially a scrolling message is displayed using show_intro. When a serial input is detected the main program starts. All keys are now either text entry or commands. An infinite loop keeps checking for key input. If the key is a hash symbol then the command is fetched using: get_prefix_and_execute_command(&x,&y); Otherwise the key value is displayed on the LCD at the current cursor position.
Serial Interface LCD circuit - schematic

Note: the use of x and y addresses (&x,&y) to pass the variable address through to the called functions so that values of x and y in main() are updated (using pointers in the called functions). get_prefix_and_execute_command calls execute_command which gets another key from the UART (or waits for one). If it matches a valid command then the appropriate code is executed to control the LCD. If not then UART1_unget_char is used to push the key back. The most interesting commands in execute_command are #X and #Y which use get_and_Set_X and get_and_Set_Y, again using pointers (this time the address & de-reference is not used as px is a pointer that returns its address when invoked). These functions both use get_2dig_num which gets more characters expecting digits - if it does not get them it pushes the key back again using UART1_unget_char. UART1_get_char, UART1_unget_char These complementary functions are used in parsers (this program is a very small parser) where you need to look at the next character of the input to see if you want to continue. If you don't i.e. its not the character you were expecting then you use UART1_unget_char to put the current character into memory. The function UART1_get_char always checks this memory first before getting a character from its normal input so the system works well - but you can only do one unget-char at a time. For more you would need an array of unget storage etc. The...

Leave Comment

characters left:

New Circuits