打印

lcd1602显示屏显示不了

[复制链接]
437|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
//lcd1602.h

#include "./lcd1602/lcd1602.h"
#include "./sys/sys.h"

void GPIO_Configuration(void)

{
        
GPIO_InitTypeDef        GPIO_InitStructure;
        
        

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);//打开时钟
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_GPIOB);
//        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA)
//dataIO GPIOA4~11 初始化
        
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        
        

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
        

GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);                        

        

// RS RW E IO初始化
        
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
        
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        
        

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
        

GPIO_Init(GPIOA, &GPIO_InitStructure);                                
}


void LCD1602_Wait_Ready(void)
{
        
        int16_t  sta;//u16 sta;
         

        DATAOUT(0xff00);
        LCD_RS_Clr();
        LCD_RW_Set();
        do
        {
                LCD_EN_Set();
                SysTick_Delay_ms(5);       //延时5ms,非常重要
                sta = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15);//读取状态字
                LCD_EN_Clr();
        }while(sta & 0x8000);  //bit15等于1表示忙,重复检测到其为0停止
}

/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值 */
void LCD1602_Write_Cmd(u16 cmd)
{
        LCD1602_Wait_Ready();
        LCD_RS_Clr();
        LCD_RW_Clr();
        DATAOUT(cmd);
        LCD_EN_Set();
        LCD_EN_Clr();
}

/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */
void LCD1602_Write_Dat(u16 dat)
{
        LCD1602_Wait_Ready();
        LCD_RS_Set();
        LCD_RW_Clr();
        DATAOUT(dat);
        LCD_EN_Set();
        LCD_EN_Clr();
}

/* 清屏 */
void LCD1602_ClearScreen(void)
{
        LCD1602_Write_Cmd(0x0100);         //显示清零,数据指针清零
}

/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */
void LCD1602_Set_Cursor(u8 x, u8 y)
{
        u16 addr;

        if (y == 0)
                addr = 0x0000 + (x<<8);  //<<
        else
                addr = 0x4000 + (x<<8);
        LCD1602_Write_Cmd(addr | 0x8000);
}

/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
void LCD1602_Show_Str(u8 x, u8 y, u8 *str)
{
        LCD1602_Set_Cursor(x, y);
        while(*str != '\0')
        {
                LCD1602_Write_Dat(*str++);
        }
}

/* 初始化1602液晶 */
void LCD1602_Init(void)
{
        LCD1602_Write_Cmd(0x3800);        //16*2显示,5*7点阵,8位数据口
             LCD1602_Write_Cmd(0x3800);        //16*2显示,5*7点阵,8位数据口
        LCD1602_Write_Cmd(0x0c00);        //开显示,光标关闭
        LCD1602_Write_Cmd(0x0600);        //文字不动,地址自动+1
        LCD1602_Write_Cmd(0x0100);        //清屏
        
        
        
        
}

//LCD1602.H

#ifndef     _LCD1602_H
#define     _LCD1602_H

#include "stm32f10x.h"

#define LCD_DATA_PORT GPIOB   //1602指令/数据 引脚





#define        LCD_RS_Set()        GPIO_SetBits(GPIOA, GPIO_Pin_8)
#define        LCD_RS_Clr()        GPIO_ResetBits(GPIOA, GPIO_Pin_8)

//1602液晶读写引脚
#define        LCD_RW_Set()        GPIO_SetBits(GPIOA, GPIO_Pin_9)
#define        LCD_RW_Clr()        GPIO_ResetBits(GPIOA, GPIO_Pin_9)

//1602液晶使能引脚
#define        LCD_EN_Set()        GPIO_SetBits(GPIOA, GPIO_Pin_10)
#define        LCD_EN_Clr()        GPIO_ResetBits(GPIOA, GPIO_Pin_10)

//1602液晶数据端口        
#define        DATAOUT(x)        GPIO_Write(LCD_DATA_PORT, x)

void GPIO_Configuration(void);
void LCD1602_Wait_Ready(void);
void LCD1602_Write_Cmd(u16 cmd);
void LCD1602_Write_Dat(u16 dat);
void LCD1602_ClearScreen(void);
void LCD1602_Set_Cursor(u8 x, u8 y);
void LCD1602_Show_Str(u8 x, u8 y, u8 *str);
void LCD1602_Init(void);


#endif








上面程序显示不了数据,求 告知哪里有问题

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

437

主题

437

帖子

0

粉丝