STM32/STM8技术william hill官网
直播中

huhu12

5年用户 190经验值
私信 关注
[问答]

LCD1602不显示

#include "lcd1602.h"
#include "delay.h"
void GPIO_Configuration()
{
    GPIO_InitTypeDef  GPIO_InitStrue;                                
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOF,ENABLE); //使能GPIOA时钟
    GPIO_InitStrue.GPIO_PuPd = GPIO_PuPd_UP ;                                   //推挽输出
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStrue);
   
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStrue.GPIO_OType = GPIO_OType_PP ;     
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOF,&GPIO_InitStrue);
    LCD1602_Write_Cmd(0x38);    /*显示模式设置*/
    delay_ms(5);
    LCD1602_Write_Cmd(0x38);
    delay_ms(5);
    LCD1602_Write_Cmd(0x38);
    delay_ms(5);  
    LCD1602_Write_Cmd(0x38);  
    LCD1602_Write_Cmd(0x08);    /*显示关闭*/
    LCD1602_Write_Cmd(0x01);    /*显示清屏*/
    LCD1602_Write_Cmd(0x06);    /*显示光标移动设置*/
    delay_ms(5);
    LCD1602_Write_Cmd(0x0C);    /*显示开及光标设置*/
    LCD1602_Write_Cmd(0x01);    /*显示清屏*/
    delay_ms(5);
}
void LCD_busy()
{
   
    LCD_RS_Clr();
    LCD_RW_Set();
    LCD_EN_Clr();
    delay_us(50);
    LCD_EN_Set();
    while(GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_7))
    {}
}

/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值 */
void LCD1602_Write_Cmd(u8 cmd)
{
    LCD_busy();
    GPIO_Write(GPIOF,0X00FF&cmd);
    delay_us(50);
    LCD_RS_Clr();
    LCD_RW_Clr();
    delay_us(2);
    LCD_EN_Set();
    delay_us(50);
    LCD_EN_Clr();
    delay_us(50);
}

/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */
void LCD1602_Write_Dat(u8 dat)
{
    LCD_busy();
    GPIO_Write(GPIOF,0X00FF&dat);
    delay_us(5);
    LCD_RS_Set();   
    LCD_RW_Clr();
    delay_us(50);
    LCD_EN_Set();
    delay_us(50);
    LCD_EN_Clr();   

}

#ifndef   __lcd1602_H
#define   __lcd1602_H
#include "sys.h"
//1602液晶指令/数据选择引脚
#define    LCD_RS_Set()    GPIO_SetBits(GPIOA, GPIO_Pin_6)
#define    LCD_RS_Clr()    GPIO_ResetBits(GPIOA, GPIO_Pin_6)
//1602液晶读写引脚
#define    LCD_RW_Set()    GPIO_SetBits(GPIOA, GPIO_Pin_4)
#define    LCD_RW_Clr()    GPIO_ResetBits(GPIOA, GPIO_Pin_4)
//1602液晶使能引脚
#define    LCD_EN_Set()    GPIO_SetBits(GPIOA, GPIO_Pin_5)
#define    LCD_EN_Clr()    GPIO_ResetBits(GPIOA, GPIO_Pin_5)
void GPIO_Configuration(void);
void LCD1602_Write_Cmd(u8 cmd);
void LCD1602_Write_Dat(u8 dat);


主函数
int main(void)
{

    delay_init(168);          //初始化延时函数
    LED_Init();
    GPIO_Configuration();
    LED0=0;        
    LED1=1;   
    LCD1602_Write_Cmd(0x06);
    LCD1602_Write_Dat(92);

    while(1)
    {
    }
}

这样写为什么显示不了,我觉得是正确的啊?还是什么地方出问题了。





已退回20积分

回帖(5)

人中狼

2020-3-20 11:46:17
stm32的引脚在读写功能改变的时候需要重新设置引脚模式的
1 举报
  • huhu12: 仿真过了,不影响啊,改成这样了,还是不行
    void LCD_busy()
    {
            u8 sta;
            GPIO_Write(GPIOF,0X00FF);
            LCD_RS_Clr();
            LCD_RW_Set();
            do{
            LCD_EN_Set();
            delay_ms(5);
            sta=GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_7);
            LCD_EN_Clr();
            }while(sta&0x80);
                   
    }

人中狼

2020-3-24 13:39:06
LCD1602_Write_Cmd(0x06);
    LCD1602_Write_Dat(92);
这两行如果是显示数据的话,显示地址错了,1602第一行的地址是0x80开始,第二行是0xc0开始
1 举报
  • huhu12: 我试过LCD1602_Write_Cmd(0x82);
        LCD1602_Write_Dat(92);     但是这样也不行,可能那个LCD坏了吧。现在不能比较比较麻烦。

人中狼

2020-3-24 14:48:08
试试这个程序吧,应该可以的,你的程序还是觉得在查忙时没有把数据引脚设置为输入模式
2 举报
  • huhu12: 好的好的,谢谢啊
  • huhu12: 这个也不可以啊??实测过了吗

    lcd1602.rar (2020-3-24 14:48 上传)

    4.07 MB, 下载次数: 30

人中狼

2020-3-24 16:26:50
LCD1602需要调节对比度,在LCD上电后,单片机未能正确操作LCD时,LCD会显示一行方块
3 举报
  • huhu12: 对对对,是的,会产生一行方块,那个对比度那个脚我直接插在3.3V上面的,应该不影响吧
  • 人中狼 回复 huhu12: 对比度最好接一个可调电阻,不过可以以后再改,等程序调通了,执行清屏命令和显示数据后,只要不该亮的点不会亮就可以了,对比度就是调整这个
  • huhu12 回复 人中狼: 好的,我等会试试,谢谢啊!!!!!!!!

人中狼

2020-3-30 15:19:26
程序实测可以的,引脚配置有点杂
LCD_RS         PA_Pin_11
LCD_RW         PB_Pin_11
LCD_EN         PA_Pin_12
LCD_DB0         PA_Pin_15
LCD_DB1         PC_Pin_10
LCD_DB2         PC_Pin_11
LCD_DB3        PC_Pin_12
LCD_DB4        PD_Pin_2
LCD_DB5        PB_Pin_3
LCD_DB6        PB_Pin_4
LCD_DB7        PB_Pin_5
3 举报
  • huhu12: 应该是可以的,我仿真一步步都没有问题,就是显示不出来
  • 人中狼 回复 huhu12: 可以的话,换一块屏对比一下,最好能先确定屏是不是好的
  • huhu12 回复 人中狼: lcd1602可以直接和stm32f103c8t6直接相连接吧,不需要接上拉电阻吧,屏肯定好的,但就是显示不了,仿真一步步也没什么问题,所以就很难找问题

更多回帖

发帖
×
20
完善资料,
赚取积分