Best Microcontroller Projects


XML RSS
What is this?
Add to My Yahoo!
Add to My MSN
Add to Google

Home
LCD-KEYS OnePort
C Course
Schematic Tool
PIC Introduction
PIC Programming
PIC Programmers
PIC Compilers
PIC BASIC
Tips & Techniques
PIC Tutorials
PIC Projects
Store
My SECRET
Oscilloscopes
Web Directory
MicroBlog
Problem?-Solution
Books
Wish List
Contact Me
About Me
Terms of Use
Search This Site
Freebies
Articles
Resource Links
Site Map
Your Projects
Rant/Rave
Video du Jour
Privacy Policy

I use and
recommend Firefox
for the best internet
browsing experience. Click below for your
free copy today:

CLICK THE IMAGE:


Note: I find it faster
and easier to use and
it has great plugins.  

It even imports all your current
browser settings!

There's no risk as your existing browser is not affected in any way - you can just choose which one to use.

Google

Find Out How This
Site Works
Like any engineering problem with the right tools it's Easy.
CLICK HERE 

Social Bookmarking
Click & Add:
add to BlinkBlink
add to Del.icio.usDel.icio.us
add to DiggDigg
add to FurlFurl
add to GoogleGoogle
add to SimpySimpy
add to SpurlSpurl
Bookmark at TechnoratiTechnorati
add to YahooY! MyWeb
Find out Why social bookmarking is
Useful For You.

Readers comments

"I wanted to thank
you so so so much
for all the information
you have provided in
your site it's

SUPERB and FANTASTIC."


- Ranish Pottath


"This site really is
the best and my favorite.
I find here many useful
projects and tips."

- Milan

bursach<at>gmail.com

Learn PIC C Now
Wondering how to program your next project using C and need a great start?


"Awesome site,
very, very easy and nice
to navigate!"


- Matt
matt_tr<at>
wolf359.cjb.net


"I am a newbie to PIC
and I wanted to say
 how great your
site has been for me."


- Dave

de_scott<at>bellsouth.net

Learn Microcontrollers
"Interested in
Microcontrollers?"


Sign up for The
Free 7 day guide:

FREE GUIDE : CLICK HERE

"Your site is a great
and perfect work.
congratulations."


- Suresh

integratredinfosys<at>
yahoo.com

"I couldn't find the correct
words to define
yourweb site.

Very useful, uncovered,
honest and clear.

Thanks so much for
your time and works.
Regards."


- Anon





A PIC Serial LCD project.

An RS232 serial LCD interface
using a standard HD44780
LCD...



This project shows you how to create a serial LCD module that you can drive from any serial RS232 interface. It uses a pure ASCII command set so you can control it easily from a terminal program such as Hyperterminal.  
There  are no 'odd' command sequences such as 0xef to define a command  - you can type all commands at the terminal interface making it very easy to use

It's also easy to test it out manually before driving it with a program.  

Once you have decided what you want to do a microcontroller can generate the same commands or you can send them from a PC program.

serial lcd block diagram




If you want to use it as a debugging terminal for your PIC projects then it makes sense to remove the level translator and just use the  0-5V input otherwise you would end up having two level translators for no real reason!

Note: Using it like this you will need to invert the RS232 output data so you either need an inverter chip if driven from the built in USART or you can drive it using a software USART (The transmitter part anyway) since you will have full control over the output signal.

Serial LCD Specification

Baud Rate 2400
Crystal 20Mhz - you can use  a lower value xtal but must re-compile the files and set the clock value into the MikroC chip settings.

Serial LCD Project Details

Serial LCD Project
Compiler Mikroelectronika C compiler V5.0.0.3 Free!
Target 16F877A (retargetable to other PICs that have enough pins and a built in USART).
Software level Easy.
Software notes Uses unget_char to reverse getchar action.
Hardware level Easy.
Hardware notes No special notes.
Project version 1.00 Initial Release
Project files Enter your details to get the Download Link
and get the microcontroller newsletter:
:
:
(Note: Your email is safe it will never be sold or rented).
You will get All the C source code and hex file.


Essential
C Programming Course:

You can program the PIC in circuit through the ICSP connector.

For a tutorial on compiling these files click here.

You can recompile the serial LCD files if you want examine code operation (using the built in simulator) or change the source code. Note the hex file is contained in the download.

Serial LCD Command set

All commands are prefixed with the hash character '#'.  In all cases except #X and #Y the single character following the '#' causes a command to execute.  For #X and #Y the decimal digits following (up to 2 digits) specify a position on the display.

Note: for #X and #Y the top left position is at 0,0.
Serial LCD Command Set list (uses upper or lower case):
Serial LCD Commands
#C or #c Clear screen
#H or #h Cursor Home
#L or #l Cursor Left
#R or #r Cursor Right
#U or #u Cursor Underline mode
#B or #b Cursor Block mode
#I or #i Cursor Invisible
#F or #f Display OF
#O or #o Display On
#Xnn or #xnn Cursor X position (left nn=0)
#Ynn or #ynn Cursor Y position (top nn=0)
#> or #. Scroll display right (hash dot as easier to type!)
#< or #, Scroll display left (hash comma as easier to type!)
## Display a '#' character.


To clear the display you would type:

#C

To set the cursor to block mode type:

#B

X and Y commands

There must be at least two digits following the  #X or #Y command unless the following command is not a digit.   All this means is that you can finish an X or Y commands by typing a letter - if you type a digit the parser won't know if it is a digit to display or a digit to specify the position.

Here is a cursor positioning example command sequence:
#H Home Sets cursor position to (0,0) - top left.
#X3JFM Set X and print Sets the X position to 3 and prints JFM
(Note the cursor is only moved once the J is entered).

You can also use the longer command:

#H#X00JFM

It does exactly the same thing but the cursor is immediately moved after the '00' since the command parser knows that it is the end of the X cursor position command as it only accepts 2 digits.


These  commands are valid:

Command Result
#X10234 Cursor x position is set to 10 and 234 is displayed.
#Y1ABC Cursor y position is set to 1 and ABC is displayed.
#Y01ABC Same as above.
#X3HI Cursor x position is set to 3 and HI is displayed..
#X03HI Same as above.
#Y0BYE Cursor y position is set to 0 and BYE is displayed.

Text entry

If you enter any other ASCII text other than the '#' character then it is displayed on the LCD and the cursor is advanced to the right.

Note: to display a '#' character enter it twice '##'.

Serial LCD Hardware

Serial port lcd display (RS232  to LCD) circuit diagram
(click to open pdf)
serial lcd circuit


Learn about the tool used for creating this diagram.

The circuit simply consists of a PIC micro, ICSP interface, an RS232 level translator and an HD44780 LCD.

Serial LCD display Software

The software is contained in two files:

16F877A-serial-lcd.c
bit.h

bit.h contains bit manipulation macros.

Project Files

16F877A-serial-lcd.ppc

Output files:

16F877A-serial-lcd.hex

16F877A-serial-lcd.c

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.

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 USART (or waits for one).  If it matches a valid command then the appropriate code is executed to control the LCD.  If not then USART_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 USART_unget_char.

USART_get_char, USART_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 unget_char to put the current character into memory.  

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 ungetchar at a time.  For more you would need an array of unget storage etc.

The routines let you avoid complicated look ahead algorithms or indexing - you can concentrate on the current character without knowing where an index is.  For a bigger parser you work with complete words.


Jump from Serial LCD to
Best Microcontroller Projects Home Page.


Don't forget to Sign Up for your

Microcontroller Newsletter

With "Essential tips and techniques",

..."New Site Info" and more...

Including a free project :

How to drive an LCD and 12key keypad using "Only One 8 Bit Port" with no interface logic!...

(Works for any microcontroller)

This costs you : Nothing...
Just fill out the form below and you'll get full C source code and project schematic and description.



Email

Name

Then

Don't worry -- your e-mail address is totally secure.
I promise to use it only to send you MicroZine.
Google
 
  Best Microcontroller projects.