概述:
JHD12232D与另外两款LCD,MG-12232与TG12232B,极为相似,他们使用的都是SED1520芯片,都是有18个接口,只是在个别的接口是高电平有效还是低电平有效上有一些区别。
参考文档(这些文档放在项目备份盘中)
JHD(晶汉达)公司网站上下载的三份相关PDF(接口以英文版为准)
MCU123.NET文件夹中的TG12232B.PDF与示例程序
SED1520.PDF中文版:这应该是某个公司为自己的产品写的文档,不是SED1520芯片的官方文档,但里面关于程序编写的流程很是实用
SED1520官方参考,官方参考一定是有用的
点阵的分布
JHD12232D的点阵布局
JHD12232D的两个SED芯片是左右分布的(好像有些别的型号的LCD是上下分布的),左右两个芯片各有一个指针指向当前要读写的显示RAM。所以要对某个显示RAM操作时,应设定其芯片的当前指针,具体要指定:设定在哪个芯片的哪页,设定在哪个芯片的哪列,在读写显示RAM时,要指定写到哪个芯片里去。如要将0XF3写到右边芯片的第二页的写40列,则应设置右边芯片的页为2,设置右边芯片的列为40,再把0XF3写到右边芯片中去。
引脚连线的问题
引脚的连线一定要参照LCD的官方文档,不同LCD的工作电压、接口都有可能是不同的。
RES : 当RES为高电平时,LCD正常工作,当其为低电平时,复位
Vo : 对比度调节,一般可以接低电平,如果需要调节对比度的话,可以将此接口接在滑动变阻器的滑动脚上,变阻器的另外两个脚分别接+5伏和-5伏,不过在调节时注意其电压,对于JHD12232D,其最小值为-5.5V。
LED+:应该连一个250欧电阻之后再接5V
程序的编写
SED1520.pdf中有程序流程图
当E1、E2为高电平时,数据被发送到总线上,当其在下降沿时,数据被锁存在SED1520中。
注意事项:
LCD要在程序初始化之后才能使用。
如果不改变页和列,不停地向一个芯片中写数据,当当前指针超出范围,之后的写操作不会引起LCD显示的改变。
程序
//
defs.h
#define LCD_DATA P1
#define D0 P1_0
#define D1 P1_1
#define D2 P1_2
#define D3 P1_3
#define D4 P1_4
#define D5 P1_5
#define D6 P1_6
#define D7 P1_7
#define E1 P3_5
#define E2 P3_4
#define RW P3_3
#define A0 P3_7
#define LOW 0
#define HIGH 1
#define uchar unsigned char
#define uint unsigned int
#define byte unsigned char
#define LONGDELAY for( i_loop = 0 ; i_loop < 300 ; ++i_loop )delay2(100);
#define LONGLONGDELAY for( i_loop = 0 ; i_loop < 10000 ; ++i_loop )delay2(100);
#define CMD_DISPLAY_ON 0xAF
#define CMD_DISPLAY_OFF 0xAE
#define CMD_DISPLAY_START_LINE 0xC0 // | ,when use it
#define CMD_PAGE_ADDR_SET 0xB8 // | ,when use it
#define CMD_COLUMN_ADDR_SET 0x00 // |, when use it
#define CMD_RESET 0xE2
#define LCD_Reset(); LCD_Write_Cmd( CMD_RESET,1 );
#define LCD_Display_ON(); LCD_Write_Cmd( CMD_DISPLAY_ON,1 );LCD_Write_Cmd( CMD_DISPLAY_ON,2 );
#define LCD_Display_OFF(); LCD_Write_Cmd( CMD_DISPLAY_OFF,1 );LCD_Write_Cmd( CMD_DISPLAY_OFF,2 );
#define LCD_DATA P1
#define D0 P1_0
#define D1 P1_1
#define D2 P1_2
#define D3 P1_3
#define D4 P1_4
#define D5 P1_5
#define D6 P1_6
#define D7 P1_7
#define E1 P3_5
#define E2 P3_4
#define RW P3_3
#define A0 P3_7
#define LOW 0
#define HIGH 1
#define uchar unsigned char
#define uint unsigned int
#define byte unsigned char
#define LONGDELAY for( i_loop = 0 ; i_loop < 300 ; ++i_loop )delay2(100);
#define LONGLONGDELAY for( i_loop = 0 ; i_loop < 10000 ; ++i_loop )delay2(100);
#define CMD_DISPLAY_ON 0xAF
#define CMD_DISPLAY_OFF 0xAE
#define CMD_DISPLAY_START_LINE 0xC0 // | ,when use it
#define CMD_PAGE_ADDR_SET 0xB8 // | ,when use it
#define CMD_COLUMN_ADDR_SET 0x00 // |, when use it
#define CMD_RESET 0xE2
#define LCD_Reset(); LCD_Write_Cmd( CMD_RESET,1 );
#define LCD_Display_ON(); LCD_Write_Cmd( CMD_DISPLAY_ON,1 );LCD_Write_Cmd( CMD_DISPLAY_ON,2 );
#define LCD_Display_OFF(); LCD_Write_Cmd( CMD_DISPLAY_OFF,1 );LCD_Write_Cmd( CMD_DISPLAY_OFF,2 );
//
func.h
#include " defs.h "
void delay( uint n);
void delay2( uint n);
void LCD_Init( void );
void LCD_Write_Cmd( byte cmd ,uchar E_Select);
void LCD_Write_Data( byte cmd ,uchar E_Select);
void LCD_Set_Page( uchar pnum, uchar E_Select );
void LCD_Set_Col( uchar colnum, uchar E_Select );
void LCD_Show_Char( uchar chNum, uchar row, uchar big_col );
void LCD_Show_Str( uchar * pstr );
void LCD_Show_One_Char( uchar chnum , uchar SED );
void LCD_Fill( uchar m_data);
void LCD_Fill_Page( uchar * p_data , uchar page);
uchar LCD_Get_Char_Index( uchar szText );
void LCD_Show_Str_2( uchar * pstr );
#include " defs.h "
void delay( uint n);
void delay2( uint n);
void LCD_Init( void );
void LCD_Write_Cmd( byte cmd ,uchar E_Select);
void LCD_Write_Data( byte cmd ,uchar E_Select);
void LCD_Set_Page( uchar pnum, uchar E_Select );
void LCD_Set_Col( uchar colnum, uchar E_Select );
void LCD_Show_Char( uchar chNum, uchar row, uchar big_col );
void LCD_Show_Str( uchar * pstr );
void LCD_Show_One_Char( uchar chnum , uchar SED );
void LCD_Fill( uchar m_data);
void LCD_Fill_Page( uchar * p_data , uchar page);
uchar LCD_Get_Char_Index( uchar szText );
void LCD_Show_Str_2( uchar * pstr );
//
func.c
#include " defs.h "
#include " func.h "
#include " at89x51.h "
/* ASCII字体,大小6X8,上到下D0~D7,左到右 */
unsigned char code ASCII[][ 6 ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 }, /* SPACE */
{ 0x00 , 0x7e , 0x21 , 0x21 , 0x21 , 0x7e }, /* A */
{ 0x00 , 0x7f , 0x49 , 0x49 , 0x49 , 0x36 }, /* B */
{ 0x00 , 0x3e , 0x41 , 0x41 , 0x41 , 0x22 }, /* C */
{ 0x00 , 0x7f , 0x41 , 0x41 , 0x22 , 0x1c }, /* D */
{ 0x00 , 0x7f , 0x49 , 0x49 , 0x49 , 0x49 }, /* E */
{ 0x00 , 0x7f , 0x09 , 0x09 , 0x09 , 0x01 }, /* F */
{ 0x00 , 0x3e , 0x41 , 0x49 , 0x49 , 0x7a }, /* G */
{ 0x00 , 0x7f , 0x08 , 0x08 , 0x08 , 0x7f }, /* H */
{ 0x00 , 0x41 , 0x7f , 0x41 , 0x00 , 0x00 }, /* I */
{ 0x00 , 0x20 , 0x40 , 0x41 , 0x3f , 0x01 }, /* J */
{ 0x00 , 0x7f , 0x08 , 0x14 , 0x22 , 0x41 }, /* K */
{ 0x00 , 0x7f , 0x40 , 0x40 , 0x40 , 0x40 }, /* L */
{ 0x00 , 0x7f , 0x02
#include " defs.h "
#include " func.h "
#include " at89x51.h "
/* ASCII字体,大小6X8,上到下D0~D7,左到右 */
unsigned char code ASCII[][ 6 ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 }, /* SPACE */
{ 0x00 , 0x7e , 0x21 , 0x21 , 0x21 , 0x7e }, /* A */
{ 0x00 , 0x7f , 0x49 , 0x49 , 0x49 , 0x36 }, /* B */
{ 0x00 , 0x3e , 0x41 , 0x41 , 0x41 , 0x22 }, /* C */
{ 0x00 , 0x7f , 0x41 , 0x41 , 0x22 , 0x1c }, /* D */
{ 0x00 , 0x7f , 0x49 , 0x49 , 0x49 , 0x49 }, /* E */
{ 0x00 , 0x7f , 0x09 , 0x09 , 0x09 , 0x01 }, /* F */
{ 0x00 , 0x3e , 0x41 , 0x49 , 0x49 , 0x7a }, /* G */
{ 0x00 , 0x7f , 0x08 , 0x08 , 0x08 , 0x7f }, /* H */
{ 0x00 , 0x41 , 0x7f , 0x41 , 0x00 , 0x00 }, /* I */
{ 0x00 , 0x20 , 0x40 , 0x41 , 0x3f , 0x01 }, /* J */
{ 0x00 , 0x7f , 0x08 , 0x14 , 0x22 , 0x41 }, /* K */
{ 0x00 , 0x7f , 0x40 , 0x40 , 0x40 , 0x40 }, /* L */
{ 0x00 , 0x7f , 0x02