我最近在用STM32驱动240128液晶,搞了几天了,一直没反应,有会的,或者搞过类型的请帮我解决一下。液晶是直接5V供电,我是用四线串行时序,信号线直接和探索者开发板的GPIO口相连。下面是我的程序,望帮小弟解决一下。
/******************************************************************
²âÊÔLCD240128Òº¾§Çý¶¯Í·Îļþ
******************************************************************/
#ifndef __LCD240128_H__
#define __LCD240128_H__
#include "sys.h"
#include "delay.h"
/********************************************
LCD¹Ü½Å¶¨Òå
********************************************/
//#define LCD240128_CS PAout(12)
//#define LCD240128_RST PAout(13)
//#define LCD240128_RS PAout(14)
//#define LCD240128_SCL PAout(15)
//#define LCD240128_SDA PBout(15)
//#define LCD240128_CS PDout(14)
//#define LCD240128_RST PDout(11)
//#define LCD240128_RS PDout(15)
//#define LCD240128_SCL PEout(8)
//#define LCD240128_SDA PEout(9)
#define LCD240128_CS_L GPIO_ResetBits(GPIOD, GPIO_Pin_14)
#define LCD240128_CS_H GPIO_SetBits(GPIOD, GPIO_Pin_14)
#define LCD240128_RST_L GPIO_ResetBits(GPIOD, GPIO_Pin_11)
#define LCD240128_RST_H GPIO_SetBits(GPIOD, GPIO_Pin_11)
#define LCD240128_RS_L GPIO_ResetBits(GPIOD, GPIO_Pin_15)
#define LCD240128_RS_H GPIO_SetBits(GPIOD, GPIO_Pin_15)
#define LCD240128_SCL_L GPIO_ResetBits(GPIOE, GPIO_Pin_8)
#define LCD240128_SCL_H GPIO_SetBits(GPIOE, GPIO_Pin_8)
#define LCD240128_SDA_L GPIO_ResetBits(GPIOE, GPIO_Pin_9)
#define LCD240128_SDA_H GPIO_SetBits(GPIOE, GPIO_Pin_9)
#define DIS_ON 0X3D
#define DIS_OFF 0X3C
#define REST 0X76
#define LCD240128_ClrAll 128
#define LCD240128_Direction 0 //ĬÈÏÇé¿öÏÂÊǺáÆÁÏÔʾ
/*********************************************
LCDÏà¹Øº¯Êý¶¨Òå
**********************************************/
void LCD240128_WriteCommand(u8 Command);
void LCD240128_WriteData(u8 Sdata);
void LCD240128_ClearDisplay(u8 page);
void LCD240128_Draw(u8 line,u8 list,u8 pw,u8 ph,u8 *Draw,u8 fbit);
void DrawPicture(u8 line,u8 list,const u8 *Sk,u8 fbit);
void LCD240128_Init(void);
void SetXY(u8 x, u8 y);
void ShowString(u8 x, u8 y, u8* str);
#endif
#include "lcd240128.h"
/*******************************************************************************************
* º¯ÊýÃèÊö£º·¢ËÍÖ¸ÁÊý£¬¸ßλÏÈËÍ
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£º°ËλָÁîÂë
* º¯Êý·µ»Ø£ºÎÞ
*******************************************************************************************/
void LCD240128_WriteCommand(u8 Command)
{
u8 i;
LCD240128_CS_L;
delay_ms(5);
LCD240128_RS_L;
delay_ms(5);
for(i = 0; i < 8; i++)
{
LCD240128_SCL_L;
if(Command & 0x80) { LCD240128_SDA_H; }
else { LCD240128_SDA_L; }
delay_ms(5);
LCD240128_SCL_H;
Command <<= 1;
}
delay_ms(5);
LCD240128_CS_H;
delay_ms(5);
}
/*******************************************************************************************
* º¯ÊýÃèÊö£º·¢ËÍÊý¾Ýº¯Êý£¬¸ßλÏÈËÍ
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£º°ËλÊý¾Ý
* º¯Êý·µ»Ø£ºÎÞ
*******************************************************************************************/
void LCD240128_WriteData(u8 Sdata)
{
u8 i;
LCD240128_CS_L;
delay_ms(5);
LCD240128_RS_H;
delay_ms(5);
for(i = 0; i < 8; i++)
{
LCD240128_SCL_L;
if(Sdata & 0x80) {LCD240128_SDA_H;}
else {LCD240128_SDA_L;}
delay_ms(5);
LCD240128_SCL_H;
Sdata <<= 1;
}
delay_ms(5);
LCD240128_CS_H;
delay_ms(5);
}
/*****************************************************************************************
ÏÔʾ×Ö·û´®
*****************************************************************************************/
void SetXY(u8 x, u8 y)
{
LCD240128_WriteCommand(0X01);
LCD240128_WriteCommand(x);
LCD240128_WriteCommand(0xC0);
LCD240128_WriteCommand(y);
}
/********************************************************************************************
ÏÔʾ×Ö·û´®
*********************************************************************************************/
void ShowString(u8 x, u8 y, u8* str)
{
SetXY(x, y);
while(*str!=' ')
{
LCD240128_WriteData(*str++);
}
}
/*******************************************************************************************
* º¯ÊýÃèÊö£ºÇåÏÔʾ£¬°´Ò³Çå³ý¡£Èç¹ûÊäÈëÒ³Êý´óÓÚ7£¨LCD240128_ClrAll£©£¬ÕûÆÁÇå³ý
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£ºÒ³£¬page¡££¨LCD240128_ClrAll£©
* º¯Êý·µ»Ø£º
*******************************************************************************************/
void LCD240128_ClearDisplay(u8 page)
{
u8 i;
u8 j;
if(page > LCD240128_ClrAll - 1)
{
//ÇåÆÁ
for(i = 0; i < LCD240128_ClrAll; i++)
{
LCD240128_WriteCommand(0X01); //ÉèÖÃҪдÈëµÄÒ³µØÖ·
LCD240128_WriteCommand(i); //Ò³µØַдÈë
LCD240128_WriteCommand(0XC0); //ÉèÖÃҪдÈëµÄÁеØÖ·
LCD240128_WriteCommand(0); //ÁеØַдÈë
for(j = 0; j < 32; j++)
{
LCD240128_WriteData(0x00); //ÇåÆÁ
}
}
}
else{ //ÇåÖ¸¶¨Ò³
LCD240128_WriteCommand(0X01); //ÉèÖÃҪдÈëµÄÒ³µØÖ·
LCD240128_WriteCommand(page); //Ò³µØַдÈë
LCD240128_WriteCommand(0XC0); //ÉèÖÃҪдÈëµÄÁеØÖ·
LCD240128_WriteCommand(0); //ÁеØַдÈë
for(j = 0; j < 32; j++)
{
LCD240128_WriteData(0x00); //ÇåÆÁ
}
}
}
/*******************************************************************************************
* º¯ÊýÃèÊö£ºÔÚÖ¸¶¨Î»ÖÃÏÔʾͼ±ê¡¢×ÖÄ£
ͼ±êÔÚºáÆÁʱ¿í±ØÐëÊÇ8µÄÕûÊý£¬¼áÆÁʱ¸ß±ØÐëÊÇ8µÄÕûÊý¡£
* È«¾Ö×ÊÔ´£ºÂÔ
* ÊäÈë²ÎÊý£ººá×ø±ê£¬×Ý×ø±ê£¬Í¼±ê¿í£¬Í¼±ê¸ß£¬Í¼±êÖ¸Õ룬·´ÏÔ±ê־λ¡£
* º¯Êý·µ»Ø£ºÎÞ
*******************************************************************************************/
void DrawPicture(u8 line,u8 list,const u8 *Sk,u8 fbit)
{
u8 i,j;
u8 skdata;
for(i=0;i<128;i++) //ͼƬ¸ß¶È
{
LCD240128_WriteCommand(0X01); //ÉèÖÃÒªÏÔʾµÄÐеØÖ·
LCD240128_WriteCommand(line+i); //µØַдÈë
LCD240128_WriteCommand(0XC0); //ÉèÖÃÒªÏÔʾµÄÁеØÖ·
LCD240128_WriteCommand(list); //µØַдÈë
for(j=0;j<30;j++) //ͼƬ¿í¶È=240/8
{
skdata=*(Sk+j+i*30);
if(fbit) //Èç¹û·´ÏÔλΪ1£¬·´ÏÔÊý¾Ý
{
skdata=~skdata;
}
LCD240128_WriteData(skdata);
}
}
}
/**************************************************************************************
»µãº¯Êý
**************************************************************************************/
void LCD240128_Draw(u8 line,u8 list,u8 pw,u8 ph,u8 *Draw,u8 fbit)
{
u8 i, j;
u8 lie, page;
u8 plie, ppage;
switch(LCD240128_Direction)
{
case 0://ºáÆÁ
plie = pw / 8;
ppage = ph;
lie = line / 8 + 2;
page = list + 1;
break;
case 1://¼áÆÁ
plie = ph / 8;
ppage = pw;
lie = list / 8 + 2;
page = line + 1;
break;
case 2:
break;
case 3:
break;
}
for(i = 0; i < ppage; i++) //ͼռҳÊý£¨Í¼±êÔÚºáÆÁʱ¸ß±ØÐëÊÇ8µÄÕûÊý£¬¼áÆÁʱ¿í±ØÐëÊÇ8µÄÕûÊý£©
{
LCD240128_WriteCommand(0X01); //ÉèÖÃҪдÈëµÄÒ³µØÖ·
LCD240128_WriteCommand(page + i); //Ò³µØַдÈë
LCD240128_WriteCommand(0XC0); //ÉèÖÃҪдÈëµÄÁеØÖ·
LCD240128_WriteCommand(lie); //ÁеØַдÈë
for(j = 0; j < plie; j++)
{
if(fbit)
{
LCD240128_WriteData(~(*Draw));
}
else
{
LCD240128_WriteData(*Draw);
}
Draw++;
}
}
}
/*******************************************************************************************
* º¯ÊýÃèÊö£ºÒº¾§ÆÁ³õʼ»¯º¯Êý
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£º
* º¯Êý·µ»Ø£º
*******************************************************************************************/
void LCD240128_Init(void)
{
//³õʼ»¯LCDµÄ¸÷¸öIO¿Ú
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15; //
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStruct);
GPIO_SetBits(GPIOD, GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;//
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStruct);
GPIO_SetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_9);
LCD240128_RST_L;
delay_ms(50);
LCD240128_RST_H;
delay_ms(20);
delay_ms(20);
LCD240128_WriteCommand(REST);
delay_ms(30);
LCD240128_WriteCommand(0X2F); //µçÔ´¿ØÖÆ0 0 0 0 1 0 1 VS VC VF
LCD240128_WriteCommand(0X3A); //0 0 1 1 1 0 1 OSCOFF
LCD240128_WriteCommand(0X35); //LCDƫѹ0 0 1 1 0 BS2 BS1 BS0 30=1/7, 31=1/8, 32=1/9, 33=1/10, 34=1/11, 35=1/12, 36=1/13, 37=1/14
LCD240128_WriteCommand(0X38); //SLEEP 0 0 1 1 1 0 0 SLP
LCD240128_WriteCommand(0X44); //GRAY CONTROL 44H=MONO 45H=4GRAY ÁÁ¶È¼¶±ð
LCD240128_WriteCommand(0X6C); //ÏÔʾÇý¶¯¿ØÖÆ£¬°üÀ¨·½Ïò£¬È«ÆÁ£¬·´ÏÔ£¬
LCD240128_WriteCommand(0X74); //ÉèÖÃÊÓ´°µÄ´¹Ö±ÏÔʾ·¶Î§.¸ù¾ÝÆÁµÄÏñËضø¶¨
LCD240128_WriteCommand(0X00); //¿ªÊ¼µØÖ·
LCD240128_WriteCommand(0X7F); //½áÊøµØÖ·Y=128
LCD240128_WriteCommand(0X75); //ÉèÖÃÊÓ´°µÄˮƽÏÔʾ·¶Î§.¸ù¾ÝÆÁµÄÏñËضø¶¨
LCD240128_WriteCommand(0X00); //¿ªÊ¼µØÖ·
LCD240128_WriteCommand(0XEF); //½áÊøµØÖ·x=240
LCD240128_WriteCommand(0X90); //ÉèÖÃDUTY COM×ÜÊý
LCD240128_WriteCommand(0X80); //128
LCD240128_WriteCommand(0XB1); //ÉèÖñ¶Ñ¹Öµ£¬Í¨¹ý´ËÖµ¿ÉÒÔµ÷Õû¶Ô±È¶È
LCD240128_WriteCommand(0X58); //дÈë
LCD240128_WriteCommand(0XB2); //Frame¿ØÖÆ£¬ÉèÖÃÏÔʾˢÐÂƵÂÊ
LCD240128_WriteCommand(0X3C); //
LCD240128_WriteCommand(0X01);
LCD240128_WriteCommand(0XE1); //ζȲ¹³¥¿ª
LCD240128_WriteCommand(0X88);
LCD240128_WriteCommand(0X88);
LCD240128_WriteCommand(0X88);
LCD240128_WriteCommand(0X88);
LCD240128_WriteCommand(0X8A);
LCD240128_WriteCommand(0X60);
LCD240128_WriteCommand(0x41); //¶àÔö¼ÓÒÔÏÂÈýÌõÖ¸Áî
LCD240128_WriteCommand(0x19); //
LCD240128_WriteCommand(0x2F); //
LCD240128_WriteCommand(0XE3); //¿Õ²Ù×÷Ö¸Áî
LCD240128_WriteCommand(0X00);
LCD240128_WriteCommand(0X7F);
LCD240128_WriteCommand(0X75);
LCD240128_WriteCommand(0X02);
LCD240128_WriteCommand(0X1F);
LCD240128_WriteCommand(0XC0); //ÉèÖÃÒªÏÔʾµÄÊ×ÁеØÖ·
LCD240128_WriteCommand(0X02); //µØַдÈë
LCD240128_WriteCommand(0X01); //ÉèÖÃÒªÏÔʾµÄÊ×ÐеØÖ·
LCD240128_WriteCommand(0X00); //µØַдÈë
delay_ms(50);
// LCD_CmdWrite(0xE3);
LCD240128_WriteCommand(DIS_ON);//¿ªÏÔʾ
delay_ms(50);
}
#include "lcd240128.h"
#include "lcd240128font.h"
/************************************************
************************************************/
u8 str1[]= "baofeng";
int main(void)
{
delay_init();
LCD240128_Init();
//LCD240128_ClearDisplay(LCD240128_ClrAll);
//DrawPicture(0, 2, logo, 1);
ShowString(5,0,str1);
while(1);
}
#ifndef __LCD240128FONT_H__
#define __LCD240128FONT_H__
#include "sys.h"
const u8 logo[]={
0x01,0x02,0x10,0x00,0x7D,0x01,0x67,0x80,0x05,0xF0,0x44,0x80,0x46,0x10,0x44,0x80,
0x2C,0x23,0x44,0x80,0x28,0x81,0x44,0x80,0x10,0x81,0x54,0x80,0x10,0x81,0x64,0x80,
0x29,0x41,0x45,0x80,0x29,0x41,0x04,0x00,0x42,0x21,0x04,0x00,0x04,0x12,0xFF,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
#endif
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你觉得主频高就试试降低数据的速率,看看效果会不会好些,有些点阵屏的某些指令需要有严格的时序要求,详细的看看数据手册,做对应的调整。
一周热门 更多>