OpenEdv-开源电子网

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

stm32驱动液晶12864的程序,液晶不显示

[复制链接]

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
发表于 2012-10-11 12:15:31 | 显示全部楼层 |阅读模式

编译也没错误,液晶就是不显示,线路连接也没错,请大侠看看程序有木有问题


工程上传了,小弟还是再贴一份吧。  用的是原子的system文件夹

/*********************************************/
下面是主函数

#include<stm32f10x_lib.h>
#include"delay.h"
#include"sys.h"
#include"usart.h"
#include"lcd_12864.h"

int main(void)
{
 Stm32_Clock_Init(9);
 delay_init(72);
 LCD_Init();
 JTAG_Set(JTAG_SWD_ENABLE);
 init_lcd_12864();
 while(1)
 {
  JTAG_Set(SWD_ENABLE);
  display_lcd12864();
 }

}
/*********************************************/
下面是液晶.c
#include<stm32f10x_lib.h>
#include"lcd_12864.h"
#include"delay.h"

void LCD_Init(void)
{
 RCC->APB2ENR|=1<<2;   //使能PORTA时钟
 RCC->APB2ENR|=1<<3;   //使能PORTB时钟


 GPIOA->CRL&=0XF000FFFF;  //将PORTA的4-6置零 初始化该位
 GPIOA->CRL|=0X03330000;  //设置4-6为推挽输出模式
 GPIOA->ODR|=1<<4;
 GPIOA->ODR|=1<<5;   //端口数据输出寄存器,向该就寄存器写数据可以控制IO的输出电平
 GPIOA->ODR|=1<<6;   // 上拉模式设置

// GPIOB->CRL&=0X00000000;  //将PORTB的0-7置零
 GPIOB->CRL|=0X33333333;  //0-7  推挽输出
 GPIOB->ODR|=0X0000FFFF;  //上拉
}

void write_com(u8 com)
{
 LCD_RS=0; //写指令
 DATAOUT(com);
 delay_ms(5);
 LCD_EN=1;
 delay_ms(5);
 LCD_EN=0;
}


void write_dat(u8 dat)
{
 LCD_RS=1; //写数据
 DATAOUT(dat);
 delay_ms(5);
 LCD_EN=1;
 delay_ms(5);
 LCD_EN=0;
}

void init_lcd_12864(void)
{
 LCD_EN=0;
 LCD_RW=0;
 write_com(0x30); //基本指令操作
 delay_ms(5);
 write_com(0x0c);//开显示,关光标
 delay_ms(5);
 write_com(0x01);//清屏
 delay_ms(5);
}

void display_lcd12864(void)
{
 write_com(0x80);
 write_dat('Z');

}
/*******************************************/
下面是液晶.h
#ifndef __LCD_12864_H__
#define __LCD_12864_H__

#include"sys.h"

#define LCD_RS PAout(4)
#define LCD_RW PAout(5)
#define LCD_EN PAout(6)

//#define pb0 PBout(0)
//#define pb1 PBout(1)
//#define pb2 PBout(2)
//#define pb3 PBout(3)
//#define pb4 PBout(4)
//#define pb5 PBout(5)
//#define pb6 PBout(6)
//#define pb7 PBout(7)
#define DATAOUT(x) GPIOB->ODR=(GPIOB->ODR&0XFF00)|(x&0X00FF)   //大侠看看这句,并口传输数据给液晶,这样可以达到目的吗?

void LCD_Init(void);
void write_com(u8 com);
void write_dat(u8 dat);
extern void init_lcd_12864(void);
extern void display_lcd12864(void);

#endif
/**********************************************************/

yejing_1.uvproj

15.33 KB, 下载次数: 175

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

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2012-10-11 12:27:57 | 显示全部楼层
http://www.openedv.com/posts/list/8968.htm
往事随风!
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-10-11 12:49:39 | 显示全部楼层
回复【2楼】zsk:
---------------------------------
有个疑问,你提供的程序貌似是串行发送的数据,小弟写的是并口的
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2012-10-11 14:02:07 | 显示全部楼层
是的
回复 支持 反对

使用道具 举报

233

主题

958

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1796
金钱
1796
注册时间
2011-10-9
在线时间
223 小时
发表于 2012-10-11 16:23:46 | 显示全部楼层
奇怪 你的并口屏  不需要 RD和 WR的么  没看到操作这2个口的?
回复 支持 反对

使用道具 举报

233

主题

958

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1796
金钱
1796
注册时间
2011-10-9
在线时间
223 小时
发表于 2012-10-11 16:25:21 | 显示全部楼层
老觉得是你的时序有问题
回复 支持 反对

使用道具 举报

233

主题

958

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1796
金钱
1796
注册时间
2011-10-9
在线时间
223 小时
发表于 2012-10-11 16:25:58 | 显示全部楼层
没看到你的屏的时序图  但是  你定义了 lcd_rw 但是读写命令都没用他
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-10-11 17:00:43 | 显示全部楼层
回复【7楼】simms01:
---------------------------------
LCD_RW在void init_lcd_12864(void)中使用的,以前写51的时候都是在初始化中置零
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-10-11 17:02:22 | 显示全部楼层
回复【5楼】simms01:
---------------------------------
你说的RD和WR,在我液晶上是RS和RW,这个口在函数中用了
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-10-11 17:33:57 | 显示全部楼层
回复【6楼】simms01:
---------------------------------
玩51的时候,就用的这个时序
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-10-11 18:29:35 | 显示全部楼层
大侠们,小弟调了一下午了,还是不见成效,求助。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
 楼主| 发表于 2012-10-11 18:30:45 | 显示全部楼层
回复【4楼】zsk:
---------------------------------
如果小弟想用并口,能实现吗,调了一下午了,就是不见成效啊。。。。。
回复 支持 反对

使用道具 举报

23

主题

143

帖子

1

精华

高级会员

Rank: 4

积分
933
金钱
933
注册时间
2012-4-23
在线时间
68 小时
发表于 2012-10-11 20:01:21 | 显示全部楼层
回复【12楼】电子狼:
---------------------------------
慢慢试.我当时试了两天才调出来
回复 支持 反对

使用道具 举报

7

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2011-9-3
在线时间
4 小时
发表于 2012-10-12 00:19:55 | 显示全部楼层
回复【楼主位】电子狼:
---------------------------------
我这里有高8位的写法:
#define MonoDATAOUT(x) GPIOE->ODR=x<<8|(GPIOE->ODR&0X00FF); //数据输出PE8-E15

写法是否正确可以去测量数据口的电平是否正常。
http://shop60782849.taobao.com/显示屏专卖
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 05:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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