野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11881|回复: 5

lcd1602显示屏显示不了

[复制链接]
发表于 2018-11-26 19:09:46 | 显示全部楼层 |阅读模式
//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








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

回复

使用道具 举报

发表于 2018-11-27 09:56:03 | 显示全部楼层
如果是根据51单片机移植过来的代码,把延时调长一点试试看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-27 10:42:18 | 显示全部楼层
姬银瑶 发表于 2018-11-27 09:56
如果是根据51单片机移植过来的代码,把延时调长一点试试看

调整了,但是还是不行,不显示数据
回复 支持 反对

使用道具 举报

发表于 2020-4-11 00:55:33 | 显示全部楼层
wx_pxJAxxvv 发表于 2018-11-27 10:42
调整了,但是还是不行,不显示数据

楼主解决了吗,能否告知解决思路
回复 支持 反对

使用道具 举报

发表于 2022-9-18 15:31:43 | 显示全部楼层
发送命令和数据时,判忙结束后延时几毫秒再开始下一步操作,同时确定好不是因为对比度导致的显示问题
回复 支持 反对

使用道具 举报

发表于 2022-9-18 18:24:06 | 显示全部楼层
直接上LCD屏算了,价格也差不了几个钱
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-16 15:14 , Processed in 0.038076 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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