stm32液晶12864驱动,不显示,有程序
时间:10-02
整理:3721RD
点击:
编译也没错误,液晶就是不显示,线路连接也没错,请大侠看看程序有木有问题
工程上传了,小弟还是再贴一份吧。 用的是原子的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
/**********************************************************/
工程上传了,小弟还是再贴一份吧。 用的是原子的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
/**********************************************************/
管脚的连接关系都没有说明
并行数据口PB0-7,RS PA4 ;RW PA5, EN PA6;程序不是有写吗,呵呵呵
KAN BU DONG
好多看不懂
我也在学习中,谢谢。
STM32单片机怎么驱动3.2寸240x400液晶 求大神的程序代码借鉴一下 本人是新手
完全看不明白。
。。