打印

为什么LCD1602无法显示超过127的数呢

[复制链接]
690|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘刘牛|  楼主 | 2020-4-27 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tianxj01| | 2020-4-27 16:58 | 只看该作者
谁说的?
1602字符模式,单行可以显示16个字符,你准备显示多少数据?1亿够了不?才9位字符好吧。

使用特权

评论回复
板凳
刘刘牛|  楼主 | 2020-4-27 17:02 | 只看该作者
超过127的数字就显示乱码了,我也不知道为什么

使用特权

评论回复
地板
刘刘牛|  楼主 | 2020-4-27 17:04 | 只看该作者
tianxj01 发表于 2020-4-27 16:58
谁说的?
1602字符模式,单行可以显示16个字符,你准备显示多少数据?1亿够了不?才9位字符好吧。 ...

超过127的数字就显示乱码了,我也不知道为什么

使用特权

评论回复
5
tyw| | 2020-4-27 17:14 | 只看该作者
本帖最后由 tyw 于 2020-4-27 17:15 编辑

跟我学51单片机_七_LCD1602液晶显示模块.pdf (1.52 MB)
LCD1602_PDF_cn.RAR (928.5 KB)

使用特权

评论回复
6
Cjy_JDxy| | 2020-4-27 17:32 | 只看该作者
你是不是定义的char型数据
改成unsigned char

使用特权

评论回复
7
tianxj01| | 2020-4-27 17:49 | 只看该作者
刘刘牛 发表于 2020-4-27 17:04
超过127的数字就显示乱码了,我也不知道为什么

什么叫超过127?难道你是直接用8位内码来显示想显示的数据?
1602,是字符显示器,字符0-9是对应的字符内码。
给你看个1602的核心驱动吧:
// **************************** //
// ***八位数据分2次写入 LCD *** //
// **************************** //
void LCD_WriteData (unsigned char Data)
  {
      LCD_Busy();                   // 测试LCD空闲
      SET_LCD_OUT;                  // LCD 端口定义为输出
      LCD_WD_PORT=(Data >>4);         // 输出高四位数据到LCD数据端口
      LCD_CLEAR_RW() ;              // 设置LCD为写模式
      LCD_SET_RS();                 // 设置LCD为数据模式
      LCD_SET_EN();                  // 激活片选,写数据到LCD
      asm("nop");
      asm("nop");
      asm("nop");
      asm("nop");
      LCD_CLEAR_EN();                // 关闭LCD片选
      LCD_WD_PORT=(Data&0x0f);        // 出低四位数据到LCD数据端口
      LCD_CLEAR_RW() ;              // 设置LCD为写模式
      LCD_SET_RS();                 // 设置LCD为数据模式
      LCD_SET_EN();                  // 激活片选,写数据到LCD
      asm("nop");
      asm("nop");
      asm("nop");
      asm("nop");
      LCD_CLEAR_EN();                // 关闭LCD片选
  }
// ****************************************************************** //
// *** Display a single character, at the current cursor location *** //
// ****************************************************************** //
void LCD_DisplayCharacter (char Char)
  {
      LCD_WriteData (Char);
  }
// ********************************************************************* //
// *** Display a string at the specified row and column, using FLASH *** //
// ********************************************************************* //
void LCD_DisplayString_F (char row, char column , unsigned char __flash *string)
  {
      LCD_Cursor (row, column);
      while (*string)
        {
            LCD_DisplayCharacter (*string++);
        }
  }
// ******************************************************************* //
// *** Display a string at the specified row and column, using RAM *** //
// ******************************************************************* //
void LCD_DisplayString (char row, char column , unsigned char *string)
  {
      LCD_Cursor (row, column);
      while (*string)
          LCD_DisplayCharacter (*string++);
  }


调用过程:
定义数据:
__flash unsigned char txt_eq13[]="  Bass-boost 1  ";
显示命令:
LCD_DisplayString_F(2,1,txt_eq13);
然后显示就是:  Bass-boost 1  

使用特权

评论回复
8
ningling_21| | 2020-4-27 22:07 | 只看该作者
刘刘牛 发表于 2020-4-27 17:04
超过127的数字就显示乱码了,我也不知道为什么

ASC码惹的祸

使用特权

评论回复
9
chunyang| | 2020-4-29 16:23 | 只看该作者
显然楼主编程错误,注意数制的定义别搞错了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

12

帖子

0

粉丝