OpenEdv-开源电子网

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

刚接触stm32,写了一个lcd12864的程序,上拉5v/10k电压,开漏模式输出。是从51修改的没有错误但是不能显示,跪请高手指导。

[复制链接]

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-4-24 14:18:50 | 显示全部楼层 |阅读模式
______________________________________12864.h___________________________________________________
#ifndef __LCD12864_H__
#define __LCD12864_H__
#include"sys.h"
/////////////// lcd12864端口定义 /////////////
// 复位脚直接接到vcc
#define lcd_rs PCout(10)
#define lcd_rw PCout(11)
#define lcd_e PCout(12)     //psb接5v选择并行
#define DATAOUT(x) GPIOD->ODR=(GPIOD->ODR&0XFF00)|(x&0x00FF)//输出 相当于pb各口与data相接  x是8位,位与前面补零

/////////////// lcd12864对应控制函数 /////////////
void lcd_w_com(u8 com);
void lcd_w_dat(u8 dat);
void Init(void);
void lcd_init(void);
void lcd_display(void);
#endif
———————————————————————————12864.c________________________________________________
#include<stm32f10x_lib.h>
#include"lcd12864.h"
#include"sys.h"
#include"usart.h"
#include"delay.h"

void lcd_w_com(u8 com)
{
lcd_rw=0;
lcd_rs=0;
delay_us(50);
DATAOUT(com);
lcd_e=1;
delay_us(500);
lcd_e=0;
delay_us(100);
}

void lcd_w_dat(u8 dat)
{
lcd_rw=0;
lcd_rs=1;
DATAOUT(dat);
lcd_e=1;
delay_us(500);
lcd_e=0;
delay_us(100);
}

void Init(void)
{

  RCC->APB2ENR|=1<<4;   //使能PORTC时钟
RCC->APB2ENR|=1<<5;   //使能PORTD时钟
GPIOC->CRH&=0XFFF000FF;  //将PORTD的10-12置零 初始化该位
GPIOC->CRH|=0X00077700;  //设置10-12为开漏输出模式
GPIOC->ODR|=1<<10;
    GPIOC->ODR|=1<<11;   //端口数据输出寄存器,向该就寄存器写数据可以控制IO的输出电平
  GPIOC->ODR|=1<<12;   //输出高电平 /上拉
GPIOD->CRL|=0X77777777;  //0-7  开漏输出
  GPIOD->ODR|=0X0000FFFF;  //上拉
}

void lcd_init(void)
{
    delay_ms(100);
lcd_w_com(0x30);
    delay_us(200);
lcd_w_com(0x30);
delay_us(200);
lcd_w_com(0x0f);
delay_us(200);
lcd_w_com(0x01);
delay_ms(12);
lcd_w_com(0x06);
delay_us(500);



void lcd_display(void)
{
 unsigned char i;
 unsigned char a;
 a=0x10;
 lcd_w_com(0x80);
 delay_us(50);
 for(i=0;i<16;i++)
 {
 lcd_w_dat(a);
 delay_us(50);
 a++;
 }
}
______________________________主程序————————————————————————————————————————————
#include <stm32f10x_lib.h>
#include"sys.h"
#include"usart.h"
#include"delay.h"
#include"lcd12864.h"

int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72);     //延时初始化
Init();            //i/o口设置初始化
lcd_init();        //液晶初始化
JTAG_Set(JTAG_SWD_DISABLE);
while(1)
{
JTAG_Set(SWD_ENABLE);
lcd_display();
while(1);
}

}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-24 14:28:51 | 显示全部楼层
有人吗?看了好长时间也找不到原因。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-24 14:36:26 | 显示全部楼层
自己顶,有人看出原因了吗?
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-24 14:56:28 | 显示全部楼层
有会的吗?我也在检查中,有时间的话帮我看下。非常感谢
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-24 17:16:09 | 显示全部楼层
请问坛主在吗?能看下吗?
回复 支持 反对

使用道具 举报

14

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2011-8-8
在线时间
15 小时
发表于 2014-4-24 20:05:47 | 显示全部楼层
好久没有按照正点原子那样的用法了,建议恩试试库函数,那样写起来麻烦点,但是很直观,至于代码,还是自己慢慢的调试,学的快些,大家都是这样过来的~~~
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8  ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_WriteBit(GPIOC, GPIO_Pin_8, Bit_RESET);
上帝之所以创造指纹,是因为他想让人们知道:其实,每个人都有伤痕。?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-24 22:51:49 | 显示全部楼层
参考下论坛别人的帖子
论坛有好几个朋友发过12864的代码了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-25 08:09:01 | 显示全部楼层
回复【6楼】小曾:
---------------------------------
谢谢你,因为我是做毕设用的,所以想用简单一些的方法先把功能实现。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-25 08:21:19 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
大家都是用库函数写的,我看的是《例说stm32》,所以很多都看不懂。。。。
有一个问题我很困惑,5v的12864用stm32驱动要上拉5v电平,10k电阻,然后输出方式为开漏输出   


 GPIOD->CRL|=0X77777777;  //0-7  开漏输出
 GPIOD->ODR|=0X0000FFFF;  //上拉   

就能用对吧?如果不行的话我想再淘个3.3v的12864试试。
回复 支持 反对

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-4-25 09:10:53 | 显示全部楼层
回复【9楼】天弦:
---------------------------------
最好测试一下,10K不接,你开漏输出高,测试下输出是否为0,是0才能证明你开漏没问题。(顺便最好测试下内部上拉输出是否可以输出高,证明没坏)
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-25 09:24:37 | 显示全部楼层
回复【10楼】dixdsqaid:
-----------------------------
谢谢你,刚试了下初始化高数据口确实输出0v,开漏模式下与推挽是不是编程方法不同,我只是改变了端口输出方式,其他没有改变。
回复 支持 反对

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-4-25 09:30:23 | 显示全部楼层
回复【11楼】天弦:
---------------------------------
一样的,不过我开漏只用在外部电压低于芯片电压场合,这个高于芯片场合不懂ST的芯片会不会问题。接上电阻到5V,开漏模式高就会是5V,低就会是0,倒灌不会挂的话。。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-25 09:35:36 | 显示全部楼层
回复【10楼】dixdsqaid:
---------------------------------
如果开漏模式输出低端口电压应该是多少?我测得好像也是零。
回复 支持 反对

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-4-25 09:39:44 | 显示全部楼层
回复【13楼】天弦:
---------------------------------
都是0,高需要外部上拉,低就自己下拉的意思,问题仅在外部5V灌到MCU,会不会导致MCU异常而已。

你这样我没用过,我都是自己加个OC门。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-25 09:47:07 | 显示全部楼层
回复【14楼】dixdsqaid:
---------------------------------
cpu数据端口加上5v上拉开漏模式ODR赋值0,给12864数据的电压应该是多少?为什么不管ODR输出设定高还是低 测得的电压都是5v呢?
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-25 09:49:22 | 显示全部楼层
回复【14楼】dixdsqaid:
---------------------------------
我问开发板的淘宝技术员和网上找资料都是说stm32驱动5v12864需要上拉5v/10k,开漏模式输出。所以就这样用了
回复 支持 反对

使用道具 举报

9

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2014-4-3
在线时间
18 小时
发表于 2014-4-25 09:51:41 | 显示全部楼层
回复【15楼】天弦:
---------------------------------
应该要是0.不是0说明有问题。开漏模式加了上拉就跟内部上拉输出基本没有区别,高就是高低就是低。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-25 10:34:01 | 显示全部楼层
回复【17楼】dixdsqaid:
---------------------------------
非常感谢你,有可能是板子有问题。直接推挽输出0都2.21v,下午让他们的技术员看看。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-4-24
在线时间
0 小时
 楼主| 发表于 2014-4-26 00:57:00 | 显示全部楼层
我在网上找到了一个程序改过后能在12864上显示了,由于是使用库函数,所以我会在恶补完库函数操作后把文件和心得写下来,谢谢大家的帮助。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-10 06:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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