Product Description:
16x2 LCD modules:
Long life span, low power consumption, best quality, competitive price.
White character with blue backlight
Black character with green backlight
1602 the standard 16 feet interface, among them:
1 foot: for to power VSS
2 feet: VDD take 5 V is power
3 feet: V0 for LCD contrast the adjustment, and then when the power is the weakest contrast, grounding the power supply highest contrast, high contrast can produce the "ghost", when used, can pass a 10 K adjust potentiometer contrast
4 feet: RS for registers choice, high electric usually choose data registers, low electric usually choose instruction register.
5 feet: R/W signal lines for reading and writing, high electric usually are read operation, low electricity at ordinary times for write operation. When the RS and RW together for low electricity can be written instructions at ordinary times, or displays address, when RS for low level for high electricity can usually RW read busy signals, when RS for high level for the low electricity can usually RW write data.
6 feet: E end to make can end, when E is driven by high level jump into low electricity at ordinary times, LCD module executive order.
7 to 14 feet: D0 ~ D7 for eight two-way data cables.
15 feet: backlighting power positive
16 feet: backlighting power negative
1602 LCD module of the internal character happen memory (CGROM) has already been stored 160 different dot matrix characters graphics, as is shown in table 1, these characters have: Arabic numerals, English letters of the case, the commonly used symbols, such as Japanese and under A false name, every character has A fixed code, such as capital letter English the letter "A" code is 01000001 B (41 H), shows the address of the 41 modules H dot matrix characters graphic display out, and we can see the letter "A".
The following is the second line LCD module in the position of the first character that the letter "A" program: ORG 0000 H
RS EQU P3.7; Determining the specific hardware connection
RW EQU P3.6; Determining the specific hardware connection
E EQU P3.5; Determining the specific hardware connection
MOV P1, # 00000001 B; Screen clearing and cursor reset
ACALL ENABLE; Call to order a subroutine
MOV P1, # 00111000 B; Set the display mode: eight 2 line 5 x7 dot matrix
ACALL ENABLE; Call to order a subroutine
MOV P1, # 00001111 B; The display of open and cursor away, and the cursor allows flash
ACALL ENABLE; Call to order a subroutine
MOV P1, # 00000110 B; Words don't move, the cursor to move to the right
ACALL ENABLE; Call to order a subroutine
MOV P1, # 0 C0H; Write show starting address (the second line the first position)
ACALL ENABLE; Call to order a subroutine
MOV P1, # 01000001 B; Letters A code
SETB RS; RS = 1
CLR RW; RW = 0; Ready to write data
CLR E; E = 0; Executive show command
ACALL DELAY; Judge LCD module is busy?
SETB E; E = 1; Display complete, and the program to park
AJMP $
ENABLE:
CLR RS; Write control command of a subroutine
CLR RW
CLR E
ACALL DELAY
SETB E
RET
DELAY:
MOV P1, # 0 FFH; Judge whether the busy liquid crystal display subroutine
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7, DELAY; If P1.7 for high level said busy circulation wait
RET
END
Program in the beginning of LCD module function initialized Settings, agreed that the format. Pay attention when the cursor is automatic display characters move to the right, without human intervention, and every time input commands are called first judge LCD module of the procedure is busy DELAY, and then enter the address of the display position 0 C0H, finally to show character input A code 41 H.
SMC1602A (16 * 2) simulation mouth line connection mode
Connection line:
- - - - - - - - - - - - - - - - - - - - - - - - - -
| LCM-51 | LCM-51 | LCM- - - 51 |
- - - - - - - - - - - - - - - - - - - - - - - - |
| DB0- - -P1.0 | DB4- - -P1.4 | RW- - - -P2.0 |
| DB1- - -P1.1 | DB5- - -P1.5 | RS- - - -P2.1 |
| DB2-P1.2 | DB6- - -P1.6 | E- - - - P2.2 |
| DB3- - -P1.3 | DB7- - -P1.7 | VLCD take 1 K resistance to the GND |
- - - - - - - - - - - - - - - - - - - - - - - - - -
[note: AT89S52 devices use 12 M crystals]
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * /
# define LCM_RW P2_0 / / definition pin
# define LCM_RS P2_1
# define LCM_E P2_2
# define LCM_Data P1
# define Busy 0 x80 / / used to test LCM status word in Busy logo
# I nclude
Void WriteDataLCM (unsigned char WDLCM);
Void WriteCommandLCM (unsigned char WCLCM, BuysC);
Unsigned char ReadDataLCM (use void);
Unsigned char ReadStatusLCM (use void);
Void LCMInit (use void);
Void DisplayOneChar (unsigned char X, unsigned char Y, unsigned char DData);
Void DisplayListChar (unsigned char X, unsigned char Y, unsigned char code * DData);
Void Delay5Ms (use void);
Void Delay400Ms (use void);
Unsigned char code uctech [] = {" uctech ");
Unsigned char code net [] = {" uctech. Icpcn. Com ");
Void main (use void)
{
Delay400Ms (); / / start waiting, and speak into the work of the state LCM
LCMInit (); / / LCM initialization
Delay5Ms (); / / delay a moment (don't)
DisplayListChar (0, 5, uctech);
DisplayListChar (0, 0, net);
ReadDataLCM (); / / test the words in meaningless
While (1);
}
/ / write data
Void WriteDataLCM (unsigned char WDLCM)
{
ReadStatusLCM (); / / testing busy
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0; / / if crystals too high speed in small add after delay
LCM_E = 0; / / delay
LCM_E = 1;
}
/ / write instructions
Void WriteCommandLCM (unsigned char WCLCM, BuysC) / / BuysC 0 ignore busy detection
{
If (BuysC) ReadStatusLCM (); / / according to need to detect busy
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
/ / read data
Unsigned char ReadDataLCM (use void)
{
LCM_RS = 1;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
Return (LCM_Data);
}
/ / read state
Unsigned char ReadStatusLCM (use void)
{
LCM_Data = 0 xFF;
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
While (LCM_Data & Busy); / / testing busy signals
Return (LCM_Data);
}
Void LCMInit (use void) / / LCM initialization
{
LCM_Data = 0;
WriteCommandLCM (0, 0 x38); / / three times the display mode Settings, does not measure busy signals
Delay5Ms ();
WriteCommandLCM (0, 0 x38);
Delay5Ms ();
WriteCommandLCM (0, 0 x38);
Delay5Ms ();
WriteCommandLCM (0 x38, 1); / / display mode Settings, began to demand that every time detection busy signals
WriteCommandLCM (0 x08, 1); / / disable display
WriteCommandLCM (0 x01, 1); / / display screen clearing
WriteCommandLCM (0 x06, 1); / / show cursor movement Settings
WriteCommandLCM (0 x0C, 1); / / show open and cursor Settings
}
/ / in the specified location displaying a character
Void DisplayOneChar (unsigned char X, unsigned char Y, unsigned char DData)
{
Y & = 0 x1;
X & = 0 xF; / / limit X is not greater than 15, Y is not greater than 1
If (Y) X | = 0 x40; / / when want to show the second when address + 0 x40;
X | = 0 x80; / / work out instruction code
WriteCommandLCM (X, 0); / / here don't test busy signal, send address
WriteDataLCM (DData);
}
/ / in the specified position shows a string of characters
Void DisplayListChar (unsigned char X, unsigned char Y, unsigned char code * DData)
{
Unsigned char ListLength;
ListLength = 0;
Y & = 0 x1;
X & = 0 xF; / / limit X is not greater than 15, Y is not greater than 1
While (DData [ListLength] > 0 x20) / / if arrive, the string is out
{
If (X < = 0 xF) / / X should be less than 0 xF
{
DisplayOneChar (X, Y, DData [ListLength]); / / show individual character
ListLength++;
X++;
}
}
}
/ / 5 ms delay
Void Delay5Ms (use void)
{
Unsigned int TempCyc = 5552;
While (TempCyc--
}
/ / 400 ms delay
Void Delay400Ms (use void)
{
Unsigned char TempCycA = 5;
Unsigned int TempCycB;
While (TempCycA--
{
TempCycB = 7269;
While (TempCycB--
};
Above program is for reference only!!!!!!
}