找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1777|回复: 3
打印 上一主题 下一主题
收起左侧

stm8s003驱动lcd1602液晶 死活显示不出来,不知道哪里问题 求大神帮帮忙

[复制链接]
跳转到指定楼层
楼主
ID:543220 发表于 2021-12-25 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是lcd1602四线的驱动程序,下载后不收乱码 就是不显示,求大声指点
#include "lcd1602.h"

/******发送命令******/
void LCD1602_Cmd(uint8_t cmd)
{
  delay_ms(2000);
  EN_LOW;
  RS_LOW; /* RS=0,写入命令 */
  delay_us(10);
  GPIO_Write(Dx_PORT, (cmd&0xf0));     /* 接收高四位命令 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;

  GPIO_Write(Dx_PORT, (cmd&0xf0)<<4); /* 接收低四位命令 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;
}

/******发送数据******/
void LCD1602_Data(uint8_t data)
{  
  delay_ms(200);
  EN_LOW;
  RS_HIGH; /* RS=1,写入数据 */
  delay_us(10);

  GPIO_Write(Dx_PORT, (data&0xf0));     /* 接收高四位数据 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;
  delay_us(10);
  GPIO_Write(Dx_PORT, (data&0xf0)<<4); /* 接收低四位数据 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;
}

/******LCD初始化******/
void LCD1602_Init(void)
{

    delay_ms(200);
//  LCD1602_Cmd(0x20);
//  LCD1602_Cmd(0x32);
//  delay_ms(5);
//  LCD1602_Cmd(0x28);  // 最后发0x28,进入4线模式,设置16*2显示,115*7点阵,4位数据接口
//  delay_ms(5);
//  LCD1602_Cmd(0x28);
//  delay_ms(5);
//  EN_HIGH;
//  LCD1602_Cmd(0x28);
//  EN_LOW;
  LCD1602_Cmd(0x30);
  delay_ms(5);
  LCD1602_Cmd(0x30);
  delay_ms(5);
  LCD1602_Cmd(0x30);
  delay_ms(5);

  LCD1602_Cmd(0x28);
  LCD1602_Cmd(0x08);

  LCD1602_Cmd(0x01); /* 清屏 */
  LCD1602_Cmd(0x06);
  LCD1602_Cmd(0x0f);
  delay_ms(2);

  //LCD1602_Cmd(0x06); /* 写入数据光标右移,写入新数据显示屏不移动 */
  //LCD1602_Cmd(0x0C); /* 开显示,有光标,光标闪烁 */

}


/* 0x80和0xC0分别是两行的开始地址,将字符的序号加上行的地
   址作为命令发送给LCD1602会让下一个字符输出在指定的位置  */
/******发送地址******/
void LCD1602_SetCursor(uint8_t x, uint8_t y) // x:列坐标 y:行坐标
{
  LCD1602_Cmd(x + (y ? LINE1:LINE0));
}

/******连续发送数据******/
void LCD1602_PrintStr(uint8_t x, uint8_t y, uint8_t *str)
{
  LCD1602_SetCursor(x, y);
  while(*str != '\0')
  {
    LCD1602_Data(*str++);
  }
}

#ifndef __LCD1602_H
#define __LCD1602_H

/***********LCD1602 四线驱动***********/

#include "system.h"
#include "delay.h"

/***********Definition***********/
#define LINE0   0x80
#define LINE1   0xC0

#define Rx_PORT (GPIOD)//RS= PD6  RW=PD5 EN=PD4
#define RS_PIN (GPIO_PIN_6) /* PD6 */
//#define RW_PIN (GPIO_PIN_5) /* PD5 */ /* NOT USE(RW接地) */
#define EN_PIN (GPIO_PIN_4) /* PD4 */
#define Rx_FOUR_PINS (RS_PIN | EN_PIN)
//#define Rx_ALL_PINS (RS_PIN | RW_PIN | EN_PIN) /* NOT USE */

#define Dx_PORT (GPIOC)
//#define D0_PIN (GPIO_PIN_0) /* PC0 */ /* NOT USE */
//#define D1_PIN (GPIO_PIN_1) /* PC1 */ /* NOT USE */
//#define D2_PIN (GPIO_PIN_2) /* PC2 */ /* NOT USE */
//#define D3_PIN (GPIO_PIN_3) /* PC3 */ /* NOT USE */
#define D4_PIN (GPIO_PIN_4) /* PC4 */
#define D5_PIN (GPIO_PIN_5) /* PC5 */
#define D6_PIN (GPIO_PIN_6) /* PC6 */
#define D7_PIN (GPIO_PIN_7) /* PC7 */
#define Dx_FOUR_PINS (D4_PIN | D5_PIN | D6_PIN | D7_PIN)
//#define Dx_ALL_PINS (D0_PIN | D1_PIN | D2_PIN | D3_PIN | D4_PIN | \
                     D5_PIN | D6_PIN | D7_PIN) /* NOT USE */

#define RS_LOW  GPIO_WriteLow (Rx_PORT, RS_PIN)
#define RS_HIGH GPIO_WriteHigh(Rx_PORT, RS_PIN)
#define EN_LOW  GPIO_WriteLow (Rx_PORT, EN_PIN)
#define EN_HIGH GPIO_WriteHigh(Rx_PORT, EN_PIN)
#define Dx_CLR  GPIO_Write(Dx_PORT, 0x00)

/***********Function***********/
void LCD1602_Cmd(uint8_t cmd);
void LCD1602_Data(uint8_t data);
void LCD1602_Init(void);
void LCD1602_SetCursor(uint8_t x, uint8_t y);
void LCD1602_PrintStr(uint8_t x, uint8_t y, uint8_t *str);

#endif /* __LCD1602_H */



@4KCWRE~Q8JMRQA{XB)GRLP.png (81.73 KB, 下载次数: 44)

@4KCWRE~Q8JMRQA{XB)GRLP.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:285526 发表于 2023-2-21 07:24 | 只看该作者
你好,
我如何将我的 PIC16F876A 十六进制文件迁移到 stm8s003
回复

使用道具 举报

板凳
ID:161164 发表于 2023-2-21 09:15 | 只看该作者
umer94 发表于 2023-2-21 07:24
你好,
我如何将我的 PIC16F876A 十六进制文件迁移到 stm8s003

重写吧,为啥不开新贴问
回复

使用道具 举报

地板
ID:161164 发表于 2023-2-21 09:18 | 只看该作者
/******发送命令******/
void LCD1602_Cmd(uint8_t cmd)
{
  delay_ms(2000);
  EN_LOW;
  RS_LOW; /* RS=0,写入命令 */
  delay_us(10);
  GPIO_Write(Dx_PORT, (cmd&0xf0));     /* 接收高四位命令 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;

  GPIO_Write(Dx_PORT, (cmd&0x0f)<<4); /* 接收低四位命令 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;
}

/******发送数据******/
void LCD1602_Data(uint8_t data)
{  
  delay_ms(200);
  EN_LOW;
  RS_HIGH; /* RS=1,写入数据 */
  delay_us(10);

  GPIO_Write(Dx_PORT, (data&0xf0));     /* 接收高四位数据 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;
  delay_us(10);
  GPIO_Write(Dx_PORT, (data&0x0f)<<4); /* 接收低四位数据 */
  EN_HIGH;
  delay_ms(1);
  EN_LOW;
}

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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