OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4053|回复: 0

STM32mini开发板驱动LCD1602,写入程序后只显示最上面一行方格

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2021-11-25
在线时间
2 小时
发表于 2021-11-27 16:25:25 | 显示全部楼层 |阅读模式
RS-----PC8
RW----PC7
EN-----PC6
D0~D7---------------PB0~PB7
VDD接5.5v
VO接地
A接5.5v
k接地


***********************************************LCD1602.c******************************

#include "lcd1602.h"
#include "sys.h"
#include "delay.h"       
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
       
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Pin=LCDDATA;                          
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStruct);
        GPIO_SetBits(GPIOB,LCDDATA);
       
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Pin=LCDDATA1;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStruct);
        GPIO_SetBits(GPIOC,LCDDATA1);                           
}
//初始化液晶屏
void LCD1602_Init()
{
     GPIO_Configuration();           //初始化引脚
          delay_ms( 15 );
     LCD1602_Write_Cmd( 0x38 );      //显示模式设置
          delay_ms( 5 );
     LCD1602_Write_Cmd( 0x0C );      //显示开及光标设置
          delay_ms( 5 );
         LCD1602_Write_Cmd( 0x01 );      //显示清屏
          delay_ms( 5 );
     LCD1602_Write_Cmd( 0x06 );      //显示光标移动位置
          delay_ms( 5 );
         LCD1602_Write_Cmd( 0x80 );  
          delay_ms( 5 );
}
//判忙                 
//写命令函数                                                           
void LCD1602_Write_Cmd( u8 cmd ){
     LCD_RS = 0;
     LCD_RW = 0;
     LCD_EN = 1;
     DATAOUT( cmd );
     delay_ms( 5 );
     LCD_EN = 0;
}
//写数据函数                                                      
void LCD1602_Write_Dat( u8 data )
{
     LCD_RS = 1;
     LCD_RW = 0;
     LCD_EN = 1;
     DATAOUT( data );
     delay_ms( 5 );
     LCD_EN = 0;
}
//函数功能:1602清屏函数                                                            
void LCD1602_ClearScreen(){
     LCD1602_Write_Cmd( 0x01 );
}
//函数功能:设置1602位置函数                                                   
void LCD1602_Set_Cursor( u8 x, u8 y )
{
     u8 addr;
     if ( y == 0 )
         addr = 0x00 + x;
     else
         addr = 0x40 + x;
     LCD1602_Write_Cmd( addr | 0x80 );
}
//函数功能:指定位置显示字符串函数                                                   
void LCD1602_Show_Str( u8 x, u8 y, u8 *str ){
     LCD1602_Set_Cursor( x, y );
     while ( *str != '\0' )
     {
         LCD1602_Write_Dat( *str++ );
     }
}
        **************************LCD1602.h***************************
#ifndef __LCD1602_H
#define __LCD1602_H         
#include "sys.h"

#define LCD_RS    PCout(8)
#define LCD_RW    PCout(7)
#define LCD_EN    PCout(6)
#define LCDDATA    GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
#define LCDDATA1   GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8
#define DATAOUT( x )    GPIO_Write( GPIOB, x ) //1602的8条数据控制线

void GPIO_Configuration(void);

void LCD1602_Init(void);

void LCD1602_Write_Cmd( u8 cmd );

void LCD1602_Write_Dat( u8 data );

void LCD1602_ClearScreen(void);

void LCD1602_Set_Cursor( u8 x, u8 y );

void LCD1602_Show_Str( u8 x, u8 y, u8 *str );
#endif


****************************************main.c****************************
#include "lcd1602.h"
int main(void)
{
        u8 word[]={"I LOVE YOU"};
        LCD1602_Init();
        LCD1602_Show_Str(2,0,word);
        while(1)
        {}
}


       
       

实验现象只有上面一行方格亮

实验现象只有上面一行方格亮
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 22:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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