关于LCD1602显示,真的搞不懂自己到底哪儿不对

2019-08-14 17:21发布

感觉没有错的地方啊,可是它为什么就没有显示呢?这个学起来真的好难啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
cromarti
1楼-- · 2019-08-14 21:49
 精彩回答 2  元偷偷看……
3314lzp
2楼-- · 2019-08-15 02:07
main.c

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

int main()
{
        u8 ch[]="Welcome ";
        delay_init();
        gpio_init();
        lcd_init();
        LcdShowStr(0,0,ch);
        while(1);
}
3314lzp
3楼-- · 2019-08-15 06:48
lcd.c

include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "lcd.h"

void lcd_init()
{
                delay_init();
    Lcd1602_Write_Cmd(0x38);    //打开,5*8,8位数据
    Lcd1602_Write_Cmd(0x0c);
    Lcd1602_Write_Cmd(0x06);
    Lcd1602_Write_Cmd(0x01);    //清屏   
}

void gpio_init()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);   
       
        GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
                                                //RS       //RW       //E        //D0       //D1        //D2        //D3
        GPIO_InitStructure.GPIO_Pin  =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|
                                GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
                                           //D4        //D5        //D6        //D7
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
       
        GPIO_ResetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_9|
                                                                        GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
}

void ReadBusy() //忙检测
{
        u8 sta;
        LCD_RS=0;
        LCD_RW=1;
        do
        {
                LCD_E=1;
                sta=LCD_D>>8;
                delay_ms(5);
                LCD_E=0;
        }while(sta&0x80);
}

void Lcd1602_Write_Cmd(u16 cmd)  //写命令
{
        ReadBusy();
        LCD_RS=0;
        LCD_RW=0;
        LCD_D=cmd<<8;
        LCD_E=1;
        LCD_E=0;
}

void Lcd1602_Write_Data(u16 dat)   //写数据
{
        ReadBusy();
        LCD_RS=1;
        LCD_RW=0;
        LCD_D=dat<<8;
        LCD_E=1;
        LCD_E=0;
}

void LcdSetCursor(u8 x,u8 y)   //坐标显示
{
        u8 addr;
        if(y==0) addr=0x00+x;
        else     addr=0x40+x;
        Lcd1602_Write_Cmd(addr|0x80);
}

void LcdShowStr(u8 x,u8 y,u8 *str)//显示字符串
{
        LcdSetCursor(x,y);
        while(*str!='')
        {
                Lcd1602_Write_Data(*str++);
        }
}
3314lzp
4楼-- · 2019-08-15 07:51
lcd.h


#ifndef __LCD_H
#define __LCD_H
#include "sys.h"
#define  LCD_RS  PBout(1)
#define  LCD_RW  PBout(2)
#define  LCD_E   PBout(0)
#define  LCD_D   GPIOB->ODR

void lcd_init(void);
void gpio_init(void);
void ReadBusy(void);  //忙检测
void Lcd1602_Write_Cmd(u16 cmd);   //写命令
void Lcd1602_Write_Data(u16 dat);   //写数据
void LcdSetCursor(u8 x,u8 y);//坐标显示
void LcdShowStr(u8 x,u8 y,unsigned char *str);//显示字符串

#endif

3314lzp
5楼-- · 2019-08-15 13:48
大腿在哪儿呀
人生几何
6楼-- · 2019-08-15 19:23
 精彩回答 2  元偷偷看……

一周热门 更多>