logo资料库

5VLCD12864 在STM32单片机使用.docx

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
3.3V与5V使用程序指导书
QQ:326578980 tel:18
我们学习单片机对LCD12864是最熟悉不过了,这个很简单,这个是用51来说,很好使用。现在用32位
我们在淘宝上买这个LCD12864,价格有差别,一般而言,5V的LCD12864要比3.3V的LCD
一.LCD12864特点
工作电压:
5V
3.3V
驱动芯片:
ST7920
ST7920
串并行数据
串,并行
串,并行
背光:
中文字库:
二.LCD12864效果画面
1)3.3V LCD12864显示画面
以上是3.3V的LCD12864显示内容,程序完整兼容5V的,只是硬件上有点差别。
2)5V LCD12864显示画面
二.LCD12864硬件设计
1)5V硬件设计图
2)3.3V硬件设计图
从以上的硬件电路发现,5V的LCD12864在STM32单片机上使用,需要在数据线和控制线上接上拉电
这里是硬件选择串并行数据发送,LCD12864的PSB引脚
L:串行发送
H:并行发送
LCD12864的Reset复位引脚直接接高电平,不需要复位。
LCD12864的背光调节电阻省了,需要的在VO脚接一个可调电阻。
三.LCD12864程序
1.首先看LX12864.h这个文件,主要是对引脚宏定义,以及函数声明
#ifndef __LX12864_H__
#define __LX12864_H__
#include
#define uchar unsigned char
#define uint unsigned int
/************************************************
RS ----> PD0;
WR--->PD1;
E--->PD2;
Led--->PD3 //背光控制管脚
*************************************************
#define LCD_DB0 GPIO_Pin_8
#define LCD_DB1 GPIO_Pin_9
#define LCD_DB2 GPIO_Pin_10
#define LCD_DB3 GPIO_Pin_11
#define LCD_DB4 GPIO_Pin_12
#define LCD_DB5 GPIO_Pin_13
#define LCD_DB6 GPIO_Pin_14
#define LCD_DB7 GPIO_Pin_15
#define LCD_DATA_PORT GPIOE
#define LCD_DATA_PIN LCD_DB0|LCD_DB1|LCD_DB2|LCD
#define LCD_RS_0 GPIO_ResetBits(GPIOD,GPIO_Pin_
#define LCD_RS_1 GPIO_SetBits(GPIOD,GPIO_Pin_0)
#define LCD_WR_0 GPIO_ResetBits(GPIOD,GPIO_Pin_
#define LCD_WR_1 GPIO_SetBits(GPIOD,GPIO_Pin_1)
#define LCD_E_0 GPIO_ResetBits(GPIOD,GPIO_Pin_2
#define LCD_E_1 GPIO_SetBits(GPIOD,GPIO_Pin_2)
#define LCD_led_0 GPIO_ResetBits(GPIOD,GPIO_Pin
#define LCD_led_1 GPIO_SetBits(GPIOD,GPIO_Pin_3
void write_Data(u8 data);
void delay(u8 dd); //延时函数
void LCD_GPIO_Configeration(void);
void LCD_WriteConmand(uchar com);
void LCD_WriteDada(uchar dat);
void LCD_Clear(u8 temp);
void LCD12864_Init(void);
void LCD12864_Position(u8 X, u8 Y) ;
void DisPlayString(u8 X,u8 Y,u8 *str) ;
#endif
2)下面是"LX12864.c文件,
#include"LX12864.h"
/*****************************************
*函数名:void LCD_GPIO_Configeration(void)
*功能:LCD GPIO配置
* 参数:
*************************************/
void LCD_GPIO_Configeration(void)
{
GPIO_InitTypeDef GPIO_InitStructre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_
/**********ÅäÖÿØÖÆIO¶Ë¿Ú************/
GPIO_InitStructre.GPIO_Pin= GPIO_Pin_0|GPIO_Pin_
GPIO_InitStructre.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructre.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructre);
/**********ÅäÖÃÊý¾ÝIO¶Ë¿Ú************/
GPIO_InitStructre.GPIO_Pin=LCD_DATA_PIN;
GPIO_InitStructre.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructre.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructre);
}
/*****************************************
*函数名:void _NOP_(void)
* ÃèÊö £º¼òµ¥ÑÓʱ
* ÊäÈë £º
* Êä³ö £ºÎÞ
* µ÷Óà £º
*************************************/
void delay(u8 dd)
{
u8 i;
for(;dd>0;dd--)
for(i=110;i>0;i--);
}
/*****************************************
*函数名:void write_Data(u8 data)
* ÃèÊö £ºµ÷Óÿâ¿âº¯Êý
* ÊäÈë £º
* Êä³ö £ºÎÞ
* µ÷Óà £º
*************************************/
void write_Data(u8 data)
{
GPIO_Write(GPIOE,data<<8); //该函数直接调用stm32f10x_G
}
/*****************************************
*函数名:void LCD_WriteConmand(uchar com)
* ÃèÊö £ºÐ´Ö¸ÁîÊý¾Ý¸øLCD ,RS=L,RW=L,E=¸ßÂö³å,D0-
* ÊäÈë £º
* Êä³ö £ºÎÞ
* µ÷Óà £º
*************************************/
void LCD_WriteConmand(uchar com)
{
LCD_RS_0; //RS=0
LCD_WR_0; //WR=0
LCD_E_0;//E=0
write_Data(com) ;
delay(15);
LCD_E_1;//E=1
delay(15);
LCD_E_0;//E=0
}
/*****************************************
*函数名:void LCD_WriteDada(uchar dat)
* ÃèÊö £ºÐ´Ö¸ÁîÊý¾Ý¸øLCD ,RS=H,RW=L,E=¸ßÂö³å,D0-
* ÊäÈë £º
* Êä³ö £ºÎÞ
* µ÷Óà £º
*************************************/
void LCD_WriteDada(uchar dat)
{
LCD_RS_1; //RS=1
LCD_WR_0; //WR=0
LCD_E_0;//E=1
write_Data(dat) ;
delay(15);
LCD_E_1;//E=1
delay(15);
LCD_E_0;//E=0
}
/*****************************************
*函数名:void LCD_Clear(u8 temp)
* ÃèÊö £ºLCDÇå³ýÏÔʾ
* ÊäÈë £º
* Êä³ö £ºÎÞ
* µ÷Óà £º
*************************************/
void LCD_Clear(u8 temp)
{
switch(temp) {
case 0: LCD_WriteConmand(0x01);break; //Çå³ýÈ«
default :break;
}
}
/*****************************************
*函数名:oid LCD12864_Init(void)
* ÃèÊö £ºLCD12864³õʼ»¯³ÌÐò£¬Ð´Èë³õʼָÁ¿ª±³¹
* ÊäÈë £º
* Êä³ö £ºÎÞ
* ¹¦ÄÜ £º PSB=H£¬Ó²¼þÉèÖ㬲¢Ðз¢ËÍÊý¾Ý
*************************************/
void LCD12864_Init(void)
{
LCD_E_0;
delay(5);
LCD_WriteConmand(0X30);//Ñ¡Ôñ»ù±¾Ö¸Á£¬8λÊý¾ÝÄ£
delay(5);
LCD_WriteConmand(0X0C);//¿ªÏÔʾ£¬ÎÞÓα꣬²»·´°×
delay(5);
LCD_WriteConmand(0X01);//Çå³ýÏÔʾ£¬²¢½«DDRAMµÄµØÖ·
delay(5);
LCD_WriteConmand(0X06);//ÉèÖÃÍⲿ¶ÁдÊý¾Ý£DDRAMµÄµ
delay(5);
LCD_WriteConmand(0X80);//DDRAMµÄµØÖ·¼ÆÊýÆ÷ACλ0,
delay(5);
LCD_led_1;//´ò¿ªLCDµÆ±³¹â
}
/*****************************************
*函数名:void LCD12864_Position(u8 X, u8 Y)
* ÃèÊö £ºLCD12864É趨ÏÔʾλÖã¬
* ÊäÈë £ºX:ÐÐ×ø±ê
Line1: 80H 81H 82H 83H 84H 85H 86H 87
Line2: 90H 91H 92H 93H 94H 95H 96H 97
Line3: 88H 89H 8AH 8BH 8CH 8DH 8EH 8F
Line4: 98H 99H 9AH 9BH 9CH 9DH 9EH 9F
Y£ºÁÐ×ø±ê£ºÖ»ÄÜÒÔ16¸öµãµÄ¿í¶ÈÒÆ¶¯
* Êä³ö £ºÎÞ
* ¹¦ÄÜ £º
*************************************/
void LCD12864_Position(u8 X, u8 Y)
{
switch(X){
case 1: LCD_WriteConmand(0x80+Y); break;
case 2: LCD_WriteConmand(0x90+Y); break;
case 3: LCD_WriteConmand(0x88+Y); break;
case 4: LCD_WriteConmand(0x98+Y); break;
}
}
/*****************************************
*函数名:void DisPlayString(u8 X,u8 Y,u8 *str)
* ÃèÊö £ºLCD12864
* ÊäÈë £º
* Êä³ö £ºÎÞ
* ¹¦ÄÜ £º ÏÔʾ×Ö·û´®º¯Êý
*************************************/
void DisPlayString(u8 X,u8 Y,u8 *str)
{
if(X>4){X = 1;}
if(Y>4){Y = 0;}
LCD12864_Position(X,Y) ;
while(*str != '\0')
{
LCD_WriteDada(*str);
str++;
}
}
3)主函数main.c,该文件
#include
#include"LX12864.h"
#include"delay.h"
u8 LCD_data1[]={"2017-04-07 19:50"};
void delayms(uint16_t time)
{ uint8_t y;
for(;time>0;time--)
for(y=100;y>0;y--);
}
int main()
{
u8 i;
LCD_GPIO_Configeration();
LCD12864_Init();
for(i=1;i<17;i++)
{
LCD_WriteDada(LCD_data1[i-1]);
delayms(5);
}
DisPlayString(2,0, "ÀîÁ¢ÇåLOVEµËÐÄâù");
DisPlayString(3,0, "QQ:326578980");
DisPlayString(4,0, "TEL:18781173563 ");
while(1)
{
}
}
STM32f103 单片机之 LCD12864 并行 3.3V 与 5V 使用程序指导书 QQ:326578980 tel:18781173563 我们学习单片机对 LCD12864 是最熟悉不过了,这个很简单, 这个是用 51 来说,很好使用。现在用 32 位的单片机,操作不知道 如何是好,串口容易点,而并口有点不好操作,而 51 单片机恰恰 相反,今天我在此讲解一下,留下联系方式方便学习交流。 我们在淘宝上买这个 LCD12864,价格有差别,一般而言,5V 的 LCD12864 要比 3.3V 的 LCD12864 便宜 7-8 元,搞开发的还是节约 经济成本。因为通常而言,需用 5V 的更好一点。 一.LCD12864 特点 5V 工作电压: ST7920 驱动芯片: 串,并行 串并行数据 背光: 有 中文字库: 有 二.LCD12864 效果画面 1)3.3V LCD12864 显示画面 3.3V ST7920 串,并行 有 有 以上是 3.3V 的 LCD12864 显示内容,程序完整兼容 5V 的,只是硬件上有点差别。 2)5V LCD12864 显示画面
二.LCD12864 硬件设计 1)5V 硬件设计图 2)3.3V 硬件设计图
从以上的硬件电路发现,5V 的 LCD12864 在 STM32 单片机上使用,需要 在数据线和控制线上接上拉电阻 4.7K。这个是必须的,不然是不会显 示的。 这里是硬件选择串并行数据发送,LCD12864 的 PSB 引脚 L:串行发送 H:并行发送 LCD12864 的 Reset 复位引脚直接接高电平,不需要复位。 LCD12864 的背光调节电阻省了,需要的在 VO 脚接一个可调电阻。 三.LCD12864 程序 1.首先看 LX12864.h 这个文件,主要是对引脚宏定义,以及函数声明 #ifndef __LX12864_H__ #define __LX12864_H__ #include #define uchar unsigned char #define uint unsigned int /********************************************************
RS ----> PD0; WR--->PD1; E--->PD2; Led--->PD3 //背光控制管脚 *********************************************************/ #define LCD_DB0 GPIO_Pin_8 #define LCD_DB1 GPIO_Pin_9 #define LCD_DB2 GPIO_Pin_10 #define LCD_DB3 GPIO_Pin_11 #define LCD_DB4 GPIO_Pin_12 #define LCD_DB5 GPIO_Pin_13 #define LCD_DB6 GPIO_Pin_14 #define LCD_DB7 GPIO_Pin_15 #define LCD_DATA_PORT GPIOE #define LCD_DATA_PIN LCD_DB0|LCD_DB1|LCD_DB2|LCD_DB3|LCD_DB4|LCD_DB5|LCD_DB6|LCD_DB7 #define LCD_RS_0 GPIO_ResetBits(GPIOD,GPIO_Pin_0) #define LCD_RS_1 GPIO_SetBits(GPIOD,GPIO_Pin_0) #define LCD_WR_0 GPIO_ResetBits(GPIOD,GPIO_Pin_1) #define LCD_WR_1 GPIO_SetBits(GPIOD,GPIO_Pin_1)
#define LCD_E_0 GPIO_ResetBits(GPIOD,GPIO_Pin_2) #define LCD_E_1 GPIO_SetBits(GPIOD,GPIO_Pin_2) #define LCD_led_0 GPIO_ResetBits(GPIOD,GPIO_Pin_3) #define LCD_led_1 GPIO_SetBits(GPIOD,GPIO_Pin_3) void write_Data(u8 data); void delay(u8 dd); //延时函数 void LCD_GPIO_Configeration(void); void LCD_WriteConmand(uchar com); void LCD_WriteDada(uchar dat); void LCD_Clear(u8 temp); void LCD12864_Init(void); void LCD12864_Position(u8 X, u8 Y) ; void DisPlayString(u8 X,u8 Y,u8 *str) ; #endif 2)下面是"LX12864.c 文件, #include"LX12864.h" /***************************************** *函数名:void LCD_GPIO_Configeration(void) *功能: LCD GPIO 配置 * 参数:
*************************************/ void LCD_GPIO_Configeration(void) { GPIO_InitTypeDef GPIO_InitStructre; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_A PB2Periph_AFIO,ENABLE); /*open GPIO clock*/ /**********ÅäÖÿØÖÆIO¶Ë¿Ú************/ GPIO_InitStructre.GPIO_Pin= GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructre.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructre.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructre); /**********ÅäÖÃÊý¾ÝIO¶Ë¿Ú************/ GPIO_InitStructre.GPIO_Pin=LCD_DATA_PIN; GPIO_InitStructre.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructre.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructre); } /***************************************** *函数名:void _NOP_(void) * ÃèÊö £º¼òµ¥ÑÓʱ * ÊäÈë £º * Êä³ö £ºÎÞ
* µ÷Óà £º *************************************/ void delay(u8 dd) { u8 i; for(;dd>0;dd--) for(i=110;i>0;i--); } /***************************************** *函数名:void write_Data(u8 data) * ÃèÊö £ºµ÷Óÿâ¿âº¯Êý * ÊäÈë £º * Êä³ö £ºÎÞ * µ÷Óà £º *************************************/ void write_Data(u8 data) { } GPIO_Write(GPIOE,data<<8); //该函数直接调用 stm32f10x_GPIO.c 中的库函数 /***************************************** *函数名:void LCD_WriteConmand(uchar com)
* ÃèÊö £ºÐ´Ö¸ÁîÊý¾Ý¸øLCD ,RS=L,RW=L,E=¸ßÂö³å,D0-D7=Ö¸ÁîÂë * ÊäÈë £º * Êä³ö £ºÎÞ * µ÷Óà £º *************************************/ void LCD_WriteConmand(uchar com) { LCD_RS_0; //RS=0 LCD_WR_0; //WR=0 LCD_E_0;//E=0 write_Data(com) ; delay(15); LCD_E_1;//E=1 delay(15); LCD_E_0;//E=0 } /***************************************** *函数名:void LCD_WriteDada(uchar dat) * ÃèÊö £ºÐ´Ö¸ÁîÊý¾Ý¸øLCD ,RS=H,RW=L,E=¸ßÂö³å,D0-D7=Êý¾Ý * ÊäÈë £º
分享到:
收藏