OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6822|回复: 18

stm32 驱动12864 程序 不显示

[复制链接]

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
发表于 2015-4-6 19:55:15 | 显示全部楼层 |阅读模式
5金钱
小弟刚学stm32不懂,把stm32的B8-B15作为数据口 使用开漏输出;B0,B1是RS  RW;EN PSB RST接到E3 E4 E5   现在不显示,请教什么问题呢 大神们
具体程序如下:void LCD12864_InitPort(void)
{
GPIO_InitTypeDef  GPIO_InitStructure; 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE |RCC_APB2Periph_GPIOB, ENABLE);  
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);   

GPIO_InitStructure.GPIO_Pin  = LCD_GPIO_DAT; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_Init(GPIOB , &GPIO_InitStructure);    

//RS /RW
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB , &GPIO_InitStructure); 

//EN /PSB/RST
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //???ì????   
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE , &GPIO_InitStructure); 

//GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);   
//GPIO_Write(LCD12864_GPIO ,0xffff);  
}
/************************************************************************************************
@f_name: void NOP(void)
@brief: ???±????
@param: None
@return: None
************************************************************************************************/
void NOP(void)
{ u8 i; for(i=0; i<100; i++); } 
/************************************************************************************************
@f_name: u8 LCD12864_busy(void)
@brief: ?ì????×???
@param: None
@return: None
************************************************************************************************/
u8 LCD12864_busy(void)
{
u8 x;
LCD_RS(0); 
LCD_RW(1);  
LCD_EN(1); 
NOP();
NOP(); 
x=Text_Busy;
LCD_EN(0); 
return x;
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief: ??????
@param: u8 dat  ????????
@return: None
************************************************************************************************/
void LCD12684_Wcmd(u8 dat)
{
while(LCD12864_busy()); //???ì??
LCD_RS(0);      
LCD_RW(0);
LCD_EN(0);
//   NOP();
//   NOP();
LCD_WriteData(dat);  
  delay_ms(5);
// NOP();
// NOP();
LCD_EN(1);
 // NOP();
 // NOP();
delay_ms(5);
LCD_EN(0);
}
/************************************************************************************************
@f_name: void LCD12684_Wcmd(u8 dat)
@brief: ??????
@param: u8 dat ????????
@return: None
************************************************************************************************/
void LCD12684_Wdat(u8 dat)
{
while(LCD12864_busy()); //???ì??
LCD_RS(1);      
LCD_RW(0);
LCD_EN(0);
// NOP();
//   NOP();
LCD_WriteData(dat);
  delay_ms(5);
// NOP();
// NOP();
LCD_EN(1);
delay_ms(5);
// NOP();
// NOP();
LCD_EN(0);
}
/************************************************************************************************
@f_name: void LCD12864_Init(void)
@brief: ???§??????
@param: None
@return: None
************************************************************************************************/
void LCD12864_Init(void)
{
LCD_PSB(1);   //????·???    
LCD_RST(0);   //???§???? ?????????§
    delay_ms(3);                  
    LCD_RST(1);   //????????????????
    delay_ms(3);

LCD12684_Wcmd(0x34);    //?©????????×÷
    delay_ms(5);
    LCD12684_Wcmd(0x30);    //?ù±???????×÷
    delay_ms(5);
    LCD12684_Wcmd(0x0c);   //????????????±ê
    delay_ms(5);
    LCD12684_Wcmd(0x01);   //????LCD??????????
    delay_ms(5); 
}
/************************************************************************************************
@f_name: void LCD12864_Clr(void)
@brief: ????
@param: None
@return: None
************************************************************************************************/
void LCD12864_Clr(void)
{
LCD12684_Wcmd(0x34);   //?©????????×÷ ?°?????±
    delay_ms(5);
    LCD12684_Wcmd(0x30);    //?ù±???????×÷
    delay_ms(5);
LCD12684_Wcmd(0x01);   //????
    delay_ms(5);

/************************************************************************************************
@f_name: void LCD12864_Pos(u8 x,u8 y)
@brief: ?è??????????
@param: u8 x??X?á    u8 y:Y?á  
@return: None
************************************************************************************************/
void LCD12864_Pos(u8 x,u8 y)
{
u8  pos;
if (x==1)   {x=0x80;}  
else if (x==2) {x=0x90;}
else if (x==3) {x=0x88;}  
else if (x==4)   {x=0x98;}  
else x=0x80;
pos = x+y ;
LCD12684_Wcmd(pos);  //???????·  
}
/************************************************************************************************
@f_name: void LCD12864_PhotoDis(u8 *bmp)
@brief: ????????
@param: u8 *bmp ??????×é
@return: None
************************************************************************************************/
void LCD12864_PhotoDis(u8 *bmp)
{
u8 i,j;
LCD12684_Wcmd(0x34); //??±?????????

for(i=0;i<32;i++)
{
LCD12684_Wcmd(0x80+i);  //???????®??×?±ê??
LCD12684_Wcmd(0x80);      //???????±×?±ê??
for(j=0;j<16;j++)    //??????????8??????????    
LCD12684_Wdat(*bmp++);     
delay_ms(1);
}

for(i=0;i<32;i++)

LCD12684_Wcmd(0x80+i);
LCD12684_Wcmd(0x88);
for(j=0;j<16;j++)         
LCD12684_Wdat(*bmp++);    
delay_ms(1);
}
LCD12684_Wcmd(0x36);       //???ê????,??????????
}
/************************************************************************************************
@f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p)
@brief: ????×?·??®
@param: u8 *bmp ??????×é
@return: None
************************************************************************************************/
void LCD_ShowString(u8 x,u8 y,const u8 *p)
{
u8 temp;
if(x>4) {x=1;}
if(y>4) {y=0;}
LCD12864_Pos(x,y);
temp=*p;
while(temp!='\0')
{
LCD12684_Wdat(temp);
temp=*(++p);

}

头文件如下:#ifndef __12864_H_
#define __12864_H_
#include "sys.h"  

//?????¨??????????????
//**************************************************************************************************************************
// #define  LCD12864_GPIO    GPIOB
// #define  GPIOCLK          RCC_APB2Periph_GPIOB

#define  RS     GPIO_Pin_0
#define  RW     GPIO_Pin_1
#define  EN     GPIO_Pin_3
#define  SB     GPIO_Pin_4
#define  RST     GPIO_Pin_5
#define  Busy        GPIO_Pin_15
#define  LCD_GPIO_DAT   GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10 |GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
// #define  LCD_GPIO_CMD GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5



#define    LCD_RS(x)   x ? GPIO_SetBits(GPIOB,RS):  GPIO_ResetBits(GPIOB,RS)
#define    LCD_RW(x)   x ? GPIO_SetBits(GPIOB,RW):  GPIO_ResetBits(GPIOB,RW)
#define    LCD_EN(x)   x ? GPIO_SetBits(GPIOE,EN):  GPIO_ResetBits(GPIOE,EN)
#define    LCD_PSB(x)  x ? GPIO_SetBits(GPIOE,PSB): GPIO_ResetBits(GPIOE,PSB)
#define    LCD_RST(x)  x ? GPIO_SetBits(GPIOE,RST): GPIO_ResetBits(GPIOE,RST)


#define  Text_Busy         GPIO_ReadInputDataBit(GPIOB,Busy)  //PBin(7)  
#define  LCD_WriteData(x)    {GPIOB->ODR = GPIOB->ODR-(GPIOB->ODR & 0xff00);GPIOB->ODR |= x<<8;} //{GPIOB->BSRR = x<<8 & 0xff00;GPIOB->BRR = ((~x)<<8) & 0xff00;}  //??8????????
//#define  LCD_WriteData(x)   {LCD12864_GPIO->BSRR = x    & 0x00ff;LCD12864_GPIO->BRR = ((~x)<<8) & 0x00ff;}  //??8????????

void LCD12864_InitPort(void);   
void NOP(void); 
u8 LCD12864_busy(void);
void LCD12684_Wcmd(u8 dat); 
void LCD12684_Wdat(u8 dat);
void LCD12864_Init(void); 
void LCD12864_Clr(void); 
void LCD12864_Pos(u8 x,u8 y); 
void LCD12864_PhotoDis(u8 *bmp); 
void LCD_ShowString(u8 x,u8 y,const u8 *p); 
//**********************************************************************************************************************
#endif




最佳答案

查看完整内容[请看2#楼]

楼主设置上啦输出试下吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-4-6 19:55:16 | 显示全部楼层
楼主设置上啦输出试下吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-6 21:01:40 | 显示全部楼层
首先12864好几种型号你得说用的那种型号,你说了大家就不需要直接看你代码了,然后你得根据手册和示波器开始调试,学会方法了,找到大致问题点然后还没解决上论坛问,这样,大家就比较好回答了
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-6 21:03:37 | 显示全部楼层

刚好五个字
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-6 21:13:44 | 显示全部楼层
回复【3楼】cornrn:
---------------------------------
谢谢楼主的提示,我用的是12864B  V2.0 液晶!!测试了这么久就是不显示
回复

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-6 21:18:16 | 显示全部楼层
回复【4楼】为梦想领航:
---------------------------------
兄弟,我问你驱动芯片型号,无数厂家的12864都叫12864B ,你为什么设成开漏输出理由?
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-6 21:21:29 | 显示全部楼层
http://www.openedv.com/posts/list/47575.htm这里一款常用的12864可能和你这差不多你看看的
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-7 09:22:13 | 显示全部楼层
回复【5楼】cornrn:
---------------------------------
我用推挽输出时写数据时一直处于忙状态检测,而写指令却不处于;用开漏输出它不能输出高电平,也导致 液晶都不显示!!这款液晶看不到它的驱动 封装里面了
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-7 09:23:06 | 显示全部楼层
回复【7楼】八度空间:
---------------------------------
这上拉和下拉只是针对输入,没有输出吧
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-7 09:24:22 | 显示全部楼层
、回复【6楼】cornrn:
---------------------------------
谢谢了我先看看
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-7 09:31:44 | 显示全部楼层
回复【5楼】cornrn:
---------------------------------
小弟再请教个问题,stm32与12864的通讯,stm32的时钟需要降低其频率吗??
回复

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-7 11:30:36 | 显示全部楼层
不需要,降到最低都可以满足12864,一般12864都是属于低速LCD
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-7 15:15:44 | 显示全部楼层
回复【12楼】cornrn:
---------------------------------
也就是stm32时钟现在是72MHZ,这频率比12864高,导致12864没有读到数据就结束了??现在程序 都能运行 就是不显示?
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-7 16:09:39 | 显示全部楼层
回复【12楼】cornrn:
---------------------------------

谢谢了  小弟调试出来了  数据端口开漏输出 是由于我要检测忙状态;然后我对比度调了一下 感谢 感谢
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-4-7 16:10:21 | 显示全部楼层
回复【7楼】八度空间:
---------------------------------
感谢 小弟听了你们的  调出来了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-5-21
在线时间
0 小时
发表于 2015-6-4 17:28:31 | 显示全部楼层
是不是你的对比度调了下就出来了么?我也遇到你一样的问题了,,,,
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-6-7
在线时间
0 小时
发表于 2015-6-7 20:04:18 | 显示全部楼层
回复【14楼】为梦想领航:
---------------------------------
回复【14楼】为梦想领航:
---------------------------------
你好,我最近也一直在写12864的液晶,始终调试不出来,能把你程序给我看下嘛?我邮箱1255339418@qq.com
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-6-9 17:50:53 | 显示全部楼层
回复【16楼】海天浅色:
---------------------------------
恩 是的
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-4-6
在线时间
0 小时
 楼主| 发表于 2015-6-9 17:51:25 | 显示全部楼层
回复【17楼】汉子fh:
---------------------------------
是不是对比度的原因呢??接个电位器调调对比度
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 10:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表