关于STM32-LCD1602的显示问题

2019-07-14 18:53发布

第一次尝试用STM32写LCD1602程序,但1602就是不显示,已经绞尽脑汁了没解决才麻烦各位大神的,请问是哪的问题呢?
#ifndef __LCD_H
#define __LCD_H        
#include "stm32f10x.h"
#include "sys.h"



//LED端口定义
#define EN PAout(13)
#define RS PAout(14)
#define RW PAout(15)
#define DATAOUT(x) GPIO_Write(GPIOB, x)

void IO_Init(void);
void write_com(u16);
void write_data(u16);
void LCD_Init(void);//初始化        



#endif


#include "lcd.h"        
#include "delay.h"

void IO_Init(void)
{
        RCC->APB2ENR|=1<<2;    //使能PORTD时钟,RCC->APB2ENR操作时钟寄存器  GPIOA口时钟使能
        RCC->APB2ENR|=1<<3;    //GPIOB口时钟使能
                   
        GPIOA->CRH&=0XFF0FFFFF;
        GPIOA->CRH|=0X00300000;//PA.13 推挽输出           
  //GPIOD->ODR=1;      //PA.13 输出高
                                                                                          
        GPIOA->CRH&=0X00FFFFFF;
        GPIOA->CRH|=0X33000000;//PA.1415推挽输出
        //GPIOD->ODR|=0XC001;      //PG.14输出高
        
        GPIOB->CRH&=0X00000000;//PB8~15推挽输出
        GPIOB->CRH|=0X33333333;
        //GPIOE->ODR|=0XFF<<8;
}   //这一段对寄存器操作实际就相当于是对GPIO_Init进行操作
//写指令函数
//入口:com
//出口:无

void write_com(u16 com)
{
        RS=0;
        RW=0;
        EN=0;
        //GPIOB->ODR=com<<8;
        DATAOUT(com);
        delay_ms(10);
        EN=1;
        delay_ms(10);
        EN=0;
}
//写数据
//入口:data
//出口:无
void write_data(u16 data)
{
        RS=1;
        RW=0;
        EN=0;
        //GPIOB->ODR=data<<8;         //输入一个16位的数据,移掉高8位就还剩低8位(此时低8位移位到高8位,低8位补0)
        DATAOUT(data);
        delay_ms(10);
        EN=1;
        delay_ms(10);
        EN=0;
}
//初始化函数
//入口:无
//出口:无
void LCD_Init(void)
{
        EN=0;//使能端为低电平
        write_com(0X3800);//显示模式设置
        delay_ms(1);
        write_com(0X0800);//显示开关及光标设置
        delay_ms(1);
        write_com(0X0100);;//地址指针自动+1,光标+1,屏幕不懂
        delay_ms(1);
        write_com(0X0600);
        delay_ms(1);
        write_com(0X0c00);
        delay_ms(1);
}

#include "lcd.h"
#include "delay.h"
//按键输入实验  
int main(void)
{                                                                  
        //u8 t;
//        u32 i;        
//        i=0;
//        Stm32_Clock_Init(9);        //系统时钟设置
//        delay_init(72);                            //延时初始化
        delay_init();
        IO_Init();                //初始化与LED连接的硬件接口
        LCD_Init();
        write_com(0x8100);
        write_data(0x3000);
        write_com(0xc000);
        write_data(0x3000+1);

}





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。