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

2019-08-14 17:21发布

感觉没有错的地方啊,可是它为什么就没有显示呢?这个学起来真的好难啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
3314lzp
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++);
        }
}

一周热门 更多>