7726|19

91

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于STM32驱动液晶的问题 [复制链接]

我的液晶到现在无法驱动。
用的是RA8835 驱动320240液晶,
供电电压3.3V,数据口曾试过加上拉电阻。
此帖出自stm32/stm8论坛

最新回复

                                 没有问题。方法:ResetBits(GPIOA,GPIO_Pin_All);SetBits(GPIOA,GPIO_Pin_All);测量相关的数据口没有发现问题。   详情 回复 发表于 2008-7-19 09:12
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

下面是lcd.h

#ifndef __LCD_H

#define __LCD_H
#include "stm32f10x_lib.h"

#define LCD_WR         GPIOC, GPIO_Pin_8
#define LCD_RD         GPIOC, GPIO_Pin_6
#define LCD_A0         GPIOC, GPIO_Pin_9
#define LCD_CS         GPIOC, GPIO_Pin_7
#define LCD_ON         GPIO_ResetBits(LCD_CS);
#define LCD_OFF        GPIO_SetBits(LCD_CS);

#define LAMP_ON        GPIO_SetBits(GPIOC, GPIO_Pin_13);
#define LAMP_OFF       GPIO_ResetBits(GPIOC, GPIO_Pin_13);

#define DB0            GPIOA, GPIO_Pin_0
#define DB1            GPIOA, GPIO_Pin_1
#define DB2            GPIOA, GPIO_Pin_4
#define DB3            GPIOA, GPIO_Pin_5
#define DB4            GPIOA, GPIO_Pin_6
#define DB5            GPIOA, GPIO_Pin_7
#define DB6            GPIOA, GPIO_Pin_8
#define DB7            GPIOA, GPIO_Pin_12

#define LCD_C_Init     0x40
#define LCD_C_Free     0x53
#define LCD_C_DisOn    0x59
#define LCD_C_DisOff   0x58
#define LCD_C_Scroll   0x44
#define LCD_C_Cur      0x5D
#define LCD_C_CGRAM    0x5C
#define LCD_C_CurMove  0x4C
#define LCD_Right      0x00
#define LCD_Left       0x01
#define LCD_Up         0x02
#define LCD_Down       0x03
#define LCD_C_Dot      0x5A
#define LCD_C_Scr      0x5B
#define LCD_C_SetC     0x46
#define LCD_C_ReadC    0x47
#define LCD_C_WrDat    0x42
#define LCD_C_RdDat    0x43

void LCD_Data_O(u8 Dat);
u8 LCD_Data_I(void);
u8 LCD_RdStat(void);
void LCD_Com_W(u8 Com);
u8 LCD_Com_R(void);
void LCD_Dat_W(u8 Dat);
u8 LCD_Dat_R(void);
void LCD_Init(void);
void LCD_Gotoxy(u8 x,u8 y);
void LCD_Clrscr(void);
#endif
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

下面是lcd.c


#include "LCD.h"

void LCD_Data_O(u8 Dat)
{
  if(Dat & 0x01)
    GPIO_SetBits(DB0);
  else
     GPIO_ResetBits(DB0);
  
  if(Dat & 0x02)
    GPIO_SetBits(DB1);
  else
     GPIO_ResetBits(DB1);
  
  if(Dat & 0x04)
    GPIO_SetBits(DB2);
  else
     GPIO_ResetBits(DB2);
  
  if(Dat & 0x08)
    GPIO_SetBits(DB3);
  else
     GPIO_ResetBits(DB3);
  
  if(Dat & 0x10)
    GPIO_SetBits(DB4);
  else
     GPIO_ResetBits(DB4);
  
  if(Dat & 0x20)
    GPIO_SetBits(DB5);
  else
     GPIO_ResetBits(DB5);
  
  if(Dat & 0x40)
    GPIO_SetBits(DB6);
  else
    GPIO_ResetBits(DB6);
  
  if(Dat & 0x80)
    GPIO_SetBits(DB7);
  else
    GPIO_ResetBits(DB7);
}

u8 LCD_Data_I(void)
{
  u8 i;
  i=0;
  if(GPIO_ReadInputDataBit(DB0))
     i |= 0x01;
  if(GPIO_ReadInputDataBit(DB1))
     i |= 0x02;
  if(GPIO_ReadInputDataBit(DB2))
     i |= 0x04;
  if(GPIO_ReadInputDataBit(DB3))
     i |= 0x08;
  if(GPIO_ReadInputDataBit(DB4))
     i |= 0x10;
  if(GPIO_ReadInputDataBit(DB5))
     i |= 0x20;
  if(GPIO_ReadInputDataBit(DB6))
     i |= 0x40;
  if(GPIO_ReadInputDataBit(DB7))
     i |= 0x80;
  
  return i;
}

u8 LCD_RdStat(void)
{
  u8 i;
  GPIO_ResetBits(LCD_A0);
  GPIO_ResetBits(LCD_RD);
  GPIO_SetBits(LCD_WR);
  i = LCD_Data_I();
  GPIO_SetBits(LCD_RD);
  return i;
}

void LCD_Com_W(u8 Com)
{
  while(LCD_RdStat() & 0x40);
  GPIO_SetBits(LCD_A0);
  GPIO_SetBits(LCD_RD);
  LCD_Data_O(Com);
  GPIO_ResetBits(LCD_WR);
  GPIO_SetBits(LCD_WR);
}

u8 LCD_Com_R(void)
{
  u8 i;
  //while(LCD_RdStat() & 0x40);
  GPIO_ResetBits(LCD_A0);
  GPIO_ResetBits(LCD_RD);
  i = LCD_Data_I();
  GPIO_SetBits(LCD_RD);
  return i;
}

void LCD_Dat_W(u8 Dat)
{
  while(LCD_RdStat() & 0x40);
  GPIO_ResetBits(LCD_A0);
  GPIO_SetBits(LCD_RD);
  LCD_Data_O(Dat);
  GPIO_ResetBits(LCD_WR);
  GPIO_SetBits(LCD_WR);
}

u8 LCD_Dat_R(void)
{
  u8 i;
  //while(LCD_RdStat() & 0x40);
  GPIO_SetBits(LCD_A0);
  GPIO_ResetBits(LCD_RD);
  i = LCD_Data_I();
  GPIO_SetBits(LCD_RD);
  return i;
}

void LCD_Init(void)
{
  LCD_Com_W(LCD_C_Init);
  LCD_Dat_W(0x30);
  LCD_Dat_W(0x87);
  LCD_Dat_W(0x07);
  LCD_Dat_W(0x27);
  LCD_Dat_W(0x37);
  LCD_Dat_W(0xEF);
  LCD_Dat_W(0x28);
  LCD_Dat_W(0x00);
  
  LCD_Com_W(LCD_C_Scroll);
  LCD_Dat_W(0x00);
  LCD_Dat_W(0x00);
  LCD_Dat_W(0xF0);
  LCD_Dat_W(0x80);
  LCD_Dat_W(0x25);
  LCD_Dat_W(0xF0);
  LCD_Dat_W(0x00);
  LCD_Dat_W(0x3A);
  LCD_Dat_W(0x00);
  LCD_Dat_W(0x3A);
  
  LCD_Com_W(LCD_C_Dot);
  LCD_Dat_W(0x00);
  
  LCD_Com_W(LCD_C_DisOff);
  LCD_Dat_W(0x54);
  
  LCD_Com_W(LCD_C_Cur);
  LCD_Dat_W(0x00);
  LCD_Dat_W(0x00);
  
  LCD_Com_W(LCD_C_DisOn);
  LCD_Dat_W(0x54);
  
  LCD_Com_W(LCD_C_Scr);
  LCD_Dat_W(0xC0);
}

void LCD_Gotoxy(u8 x,u8 y)
{
  LCD_Com_W(LCD_C_SetC);
  LCD_Dat_W(x);
  LCD_Dat_W(y);
}

void LCD_Clrscr(void)
{
  u16 i;
  LCD_Com_W(LCD_C_CurMove);
  LCD_Gotoxy(0,0);
  LCD_Com_W(LCD_C_WrDat);
  for(i=0;i<0x7FFF;i++){
    LCD_Dat_W(0x00);
  }
}
此帖出自stm32/stm8论坛
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 

注解

数据口,为复合推挽
控制口,为推挽输出
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 

为什么数据口为复合推挽?

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 

不会是用复合极漏吧?

为什么呢?
您建议用什么方式?
至于其他的输入方式我都已经试过了。
似乎总是不能通过读系统忙处!又开始郁闷啦5555555555
(香主的回复速度真够快的)
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 

不明白你说的复合推挽或复合极漏是什么?

是否指复用功能,如果是就很奇怪了,你使用的是GPIO操作,没有必要用复用功能。

你应该把线路图贴出来讨论。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 

这就是液晶部分的原理图

液晶现在改用3V供电啦!香主或哪位大侠帮着看看吧!!!
[img]https://bbs.eeworld.com.cn/upfiles/img/20079/20079113248115.jpg
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 

不知道是否可以把数据端口设置为开路输出?

如果要读取 LCD 数据, 端口输出 0xFF
如果要写入 LCD 数据, 端口输出 欲写的数值。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 

开漏方式?

请问楼上怎么读数据口上的参数呢?
还望给解释一下!
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 

9楼的方法是对的

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 

如果是开漏

还可以准确地读出数据口上的参数值吗?
香主,帮助解释一下吧!
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 

有上拉电阻就可以。。。

7.1.8 Output configuration
When the I/O Port is programmed as Output:
● The Output Buffer is enabled:
– Open Drain Mode: A “0” in the Output register activates the N-MOS while a “1” in
the Output register leaves the port in Hi-Z. (the P-MOS is never activated)
– Push-Pull Mode: A “0” in the Output register activates the N-MOS while a “1” in the
Output register activates the P-MOS.
● The Schmitt Trigger Input is activated.
● The weak pull-up and pull-down resistors are disabled.
● ● ● The data present on the I/O pin is sampled into the Input Data Register every APB2 clock cycle
● A read access to the Input Data Register gets the I/O state in open drain mode
● A read access to the Output Data register gets the last written value in Push-Pull mode
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 

to:zyok

                                 这个方法已经试过了。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 

我以前就12楼的问题有一个解释

请参看我在下面这个帖子中5楼的解释:关于STM32的GPIO操作疑问
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

16
 

55555555……


晕死了!
为什么PA8总被拉高呢?
不会是uart1的原因吧?

另外试了一下
结果还是不行!
郁闷之极!
相关链接:https://bbs.eeworld.com.cn/club/bbs/list.asp?boardid=49&page=1&t=3035923&tp=%u9686%u91CD%u63A8%u51FASTM32F%u7684LCD320*240%u9A71%u52A8%u7A0B%u5E8F
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

17
 

你先把这个有问题的PA8所连接的电路,只保留上拉看看是否

如果也有问题,有可能是芯片管脚被烧坏。

从8楼给的电路看,你的LCD是5V器件;从2楼的程序看,DB0~DB7是双向的;因为你曾经把这些管脚配置为推挽输出,这样当LCD的DB0~DB7也是输出时,可能会烧坏STM32的管脚。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

18
 

猜测

  感觉楼主肯定 在之前的总线配置、和时钟初始化函数中 对uart配置了
只不过用户程序里没有用到 。
  检查一遍吧  我也犯过类似错误
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

19
 

再去查查程序

                                 同时,听香主的,换一个i/o口再试一下!
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

20
 

io口试过啦

没有问题。
方法:ResetBits(GPIOA,GPIO_Pin_All);
SetBits(GPIOA,GPIO_Pin_All);
测量相关的数据口没有发现问题。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表