找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2069|回复: 13
收起左侧

LCD1602显示总是出现空两格,比如字母P变成字母R的现象

[复制链接]
ID:834529 发表于 2020-10-26 00:45 来自手机 | 显示全部楼层 |阅读模式
stm32f103c8t6控制读取温湿度在LCD1602显示
LCD1602显示总是出现空两格,比如字母P变成字母R的现象,请问各位大神这是什么原因造成的呢
回复

使用道具 举报

ID:420836 发表于 2020-10-26 04:40 | 显示全部楼层
这可能不是由硬件引起的。
回复

使用道具 举报

ID:230442 发表于 2020-10-26 09:41 | 显示全部楼层
数据线接触不良
回复

使用道具 举报

ID:387641 发表于 2020-10-26 11:47 | 显示全部楼层
MCU或1602模块通信不成功!
回复

使用道具 举报

ID:834529 发表于 2020-10-26 12:03 来自手机 | 显示全部楼层
谢谢大家回复,我想知道是因为我的显示地址出问题了吗
回复

使用道具 举报

ID:834529 发表于 2020-10-26 12:05 来自手机 | 显示全部楼层
luzhongyi86 发表于 2020-10-26 11:47
MCU或1602模块通信不成功!

我用的a0-a7接的1602的d0到d7,rs,en,rw接的pc13-15,通信不成功指的什么意思呢
回复

使用道具 举报

ID:834664 发表于 2020-10-26 13:24 来自手机 | 显示全部楼层
代码有没有
回复

使用道具 举报

ID:387641 发表于 2020-10-26 13:59 来自手机 | 显示全部楼层
本帖最后由 luzhongyi86 于 2020-10-26 14:05 编辑
ybxdn 发表于 2020-10-26 12:05
我用的a0-a7接的1602的d0到d7,rs,en,rw接的pc13-15,通信不成功指的什么意思呢

1602只有11条指命用法你对下手册,AO-A7口要接上拉电阻
回复

使用道具 举报

ID:834529 发表于 2020-10-26 16:53 来自手机 | 显示全部楼层
1qaz2wsx.. 发表于 2020-10-26 13:24
代码有没有

有有有,马上就贴出来
回复

使用道具 举报

ID:834529 发表于 2020-10-26 19:00 | 显示全部楼层
ybxdn 发表于 2020-10-26 16:53
有有有,马上就贴出来

LCD1602.C文件
  1. #include "LCD1602.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. //8位数按位逆序
  5. u8 BitReversed(u8 x)
  6. {
  7.         u8 temp[8];
  8.         u8 i = 0;
  9.         u8 j = 7;
  10.         u8 result = 0;
  11.         for(i = 0;i<8;i++)
  12.         {
  13.                 temp[i] = (x>>i)&0x01;
  14.         }
  15.         for(i = 0;i<8;i++)
  16.         {
  17.                 result = result|(temp[j]<<(i));
  18.                 j--;
  19.         }        
  20.         return result;
  21.         
  22. }

  23. void  LCD_Check_Busy(void)

  24. {
  25.   LCD1602_RS0;        //RS????
  26.         delay_us(1000);
  27.   LCD1602_RW1;    //RW????
  28.         delay_us(1000);
  29.   LCD1602_EN0;//EN????
  30.         delay_us(1000);
  31.   GPIO_Write(GPIOC,0Xff);   
  32.         delay_ms(1000);
  33.   LCD1602_EN1;    //EN????
  34.         delay_us(1000);
  35. }

  36. /*------------------------------------------------
  37.             写命令
  38. ------------------------------------------------*/
  39. void LCD_Write_Com(unsigned char com)
  40. {                               //????
  41.   LCD1602_RS0;         //RS???????
  42.         delay_us(1000);
  43.   LCD1602_RW0;
  44.   delay_us(1000);        //RW????
  45.   LCD1602_EN1;                    //EN????
  46.         delay_us(1000);
  47.         com = BitReversed(com);
  48.   GPIO_Write(GPIOA,com&0x00ff);//|(GPIO_ReadOutputData(GPIOA)&0XFF00));                    //????????
  49.         delay_us(1000);
  50.   LCD1602_EN0;
  51. }

  52. /*------------------------------------------------
  53.               写数据
  54. ------------------------------------------------*/
  55. void LCD_Write_Data(unsigned char Data)
  56. {                                    //????  
  57.   LCD1602_RS1;                    //RS?????????
  58.         delay_us(1000);
  59.   LCD1602_RW0;
  60.   delay_us(1000);        
  61.   LCD1602_EN1;                    //EN????
  62.         delay_us(1000);
  63.         Data = BitReversed(Data);
  64.   GPIO_Write(GPIOA,Data&0x00ff);//|(GPIO_ReadOutputData(GPIOA)&0XFF00));
  65.         delay_us(1000);
  66.   LCD1602_EN0;
  67. }
  68. /*------------------------------------------------
  69.               写字符串
  70. ------------------------------------------------*/
  71. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  72. {     
  73. if (y == 0)
  74.          {     
  75.          LCD_Write_Com(0x80 + x);   delay_ms(5);  
  76.          }
  77. else
  78.          {     
  79.          LCD_Write_Com(0xC0 + x);     delay_ms(5);
  80.          }        
  81. while (*s)
  82.          {     
  83. LCD_Write_Data( *s);  delay_ms(5);   
  84. s ++;     
  85.          }
  86. }
  87. /*------------------------------------------------
  88.               写字符
  89. ------------------------------------------------*/
  90. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  91. {     
  92. if (y == 0)
  93.          {     
  94.          LCD_Write_Com(0x80 + x);  delay_ms(5);   
  95.          }   
  96. else
  97.          {     
  98.          LCD_Write_Com(0xC0 + x);   delay_ms(5);  
  99.          }        
  100. LCD_Write_Data( Data);
  101. delay_ms(5);        
  102. }


  103. void LCD1602_write_long(unsigned char x,unsigned char y,u32 data,unsigned char num)
  104. {
  105.     unsigned char temp[12],i = 12;
  106.     while(i--)
  107.     {
  108.          temp[i] = ' ';
  109.     }
  110.     temp[num] = '\0';
  111.     while(num--)
  112.     {
  113.       if(data || data%10)
  114.          temp[num] = data % 10 + 0x30;
  115.       data = data/10;
  116.     }
  117.    LCD_Write_String(x,y,temp);   delay_ms(5);
  118. }

  119. /*------------------------------------------------
  120.                 清屏
  121. ------------------------------------------------*/
  122. void LCD_Clear(void)
  123. {
  124. LCD_Write_Com(0x01);
  125. delay_ms(5);
  126. }

  127. /*------------------------------------------------*/
  128. void LCD_Init(void)
  129. {
  130.           GPIO_InitTypeDef GPIO_InitStructure;
  131.          
  132.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);  
  133.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
  134.     GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  135.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  136.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  137.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  138.         
  139.         
  140.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14|GPIO_Pin_15;  
  141.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  142.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  143.     GPIO_Init(GPIOC, &GPIO_InitStructure);   //GPIOC
  144.         
  145.          delay_ms(15);
  146.          LCD_Write_Com(0x38);
  147.          delay_ms(5);
  148.          LCD_Write_Com(0x38);
  149.          delay_ms(5);
  150.          LCD_Write_Com(0x38);
  151.          //delay_ms(5);
  152.         
  153.    LCD_Write_Com(0x38);
  154.    
  155.          LCD_Write_Com(0x0C);    /*ÏÔ꾿a¼°1a±êéèÖÃ*/
  156.          delay_ms(5);
  157.          LCD_Write_Com(0x06);    /*ÏÔê¾1a±êòƶˉéèÖÃ*/
  158.          delay_ms(5);
  159.    //LCD_Write_Com(0x08);    /*ÏÔê¾1رÕ*/
  160.    //delay_ms(5);         
  161.    LCD_Write_Com(0x01);    /*ÏÔê¾ÇåÆá*/
  162.    delay_ms(5);         
  163.    
  164.     //LCD_Write_Com(0x80);
  165.                 //delay_ms(5);         
  166.                
  167. }

  168. 主函数
  169. int main(void)
  170. {        
  171.   u16 test=0;
  172.         u8 temperature=0;
  173.         u8 humidity=0;
  174.         
  175.         delay_init();                              
  176.         NVIC_Configuration();                                                                                 
  177.         delay_ms(400);
  178.         LCD_Init();        
  179.         USART3_Init(2400);
  180.         DHT11_Init();
  181.         delay_ms(100);
  182.         LCD_Write_String(0,0,"Pm2.5: 000ug/m3");delay_ms(5);
  183.         LCD_Write_String(0,1,"Tem:00C  Hum:00%");delay_ms(5);
  184.   while(1)
  185.         {
  186.                   if(test++ > 200)
  187.                         {
  188.                                 //LCD_Write_Com(0x80);
  189.                                   test = 0;
  190.                                         Get_PM();
  191.                                   if(PM25_Value > 999)PM25_Value=999;
  192.                                  
  193.                                   LCD_Write_Char(7,0,PM25_Value/100+0x30);
  194.                                   LCD_Write_Char(8,0,PM25_Value%100/10+0x30);
  195.                                   LCD_Write_Char(9,0,PM25_Value%10+0x30);
  196.                                 
  197.                                 //LCD_Write_Com(0xC0);
  198.                                   DHT11_Read_Data(&temperature,&humidity);
  199.                                   LCD_Write_Char(4,1,temperature%100/10+0x30);
  200.                                   LCD_Write_Char(5,1,temperature%10+0x30);
  201.                                   LCD_Write_Char(13,1,humidity%100/10+0x30);
  202.                                   LCD_Write_Char(14,1,humidity%10+0x30);
  203.                         }
  204.                         delay_ms(5);
  205.   }
  206. }
复制代码

回复

使用道具 举报

ID:834529 发表于 2020-10-27 21:15 来自手机 | 显示全部楼层
还有人吗,没解决这个问题
回复

使用道具 举报

ID:592807 发表于 2020-10-28 18:39 | 显示全部楼层
ybxdn 发表于 2020-10-27 21:15
还有人吗,没解决这个问题

这种事一般是你的显示地址有问题,在线调试几次就出结论了
回复

使用道具 举报

ID:834529 发表于 2020-10-28 20:04 来自手机 | 显示全部楼层
黄youhui 发表于 2020-10-28 18:39
这种事一般是你的显示地址有问题,在线调试几次就出结论了

显示地址我是从0x80和0xc0开始的,但就是不从第一个格开始显示
回复

使用道具 举报

ID:592807 发表于 2020-10-30 08:52 | 显示全部楼层
ybxdn 发表于 2020-10-28 20:04
显示地址我是从0x80和0xc0开始的,但就是不从第一个格开始显示

我有个帖子"用uc1617s驱动128*128的液晶屏,移位操作程序出错",看一下对你有用吗?在我主页
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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