【问题标题】:Lcd displaying old data with new data液晶显示旧数据和新数据
【发布时间】:2019-05-28 23:20:24
【问题描述】:

我已将可编程 xbee 与 16x2 字符 LCD 连接。我在另一个 xbee 的帮助下传输无线帧并将其显示在接收 xbee 上。 当我一个接一个地发送两个无线帧时,就会出现问题。 考虑到我在第一帧中发送了 24 个字符,这将正常显示(显示末尾有一个随机的额外字符,我不知道为什么) 例如,当我发送小于第一帧的第二帧时,就会出现问题。 6 个字符。 LCD 显示 6 个字符,但在 6 个字符之后的第一帧中添加了另外 18 个字符。 显示如下:

Frame1 显示:这是一条检查消息。 Frame2 显示:您好!是一条检查消息。 (原文:你好!)

我在不同位置的帧之间尝试了 clearall() lcd 函数,但它不起作用。我也有你在代码中看到的不同的东西,但它们不起作用。

目前的代码是这样的; 在此输入代码

  #include <xbee_config.h>

  #include <types.h>

  #include <string.h>

  #include <ctype.h>

  #define char_lcd_writ_str(a)      char_lcd_writ(a, strlen(a))

   static uint8_t test_stage = 0;
   static uint8_t test_stage_done = 0;
   static const char str[] = "abcdefghijklmnopqrstuvwxyz012345";

   #if defined(RTC_ENABLE_PERIODIC_TASK)
    void rtc_periodic_task(void)
   {
test_stage++;
if (test_stage == 8)
    test_stage = 0;
test_stage_done = 0;
  }
  #endif

 #ifdef ENABLE_XBEE_HANDLE_RX
  int xbee_transparent_rx(const wpan_envelope_t FAR *envelope, void FAR       *context)
  {

int c=0;
char addrbuf[ADDR64_STRING_LENGTH];
char_lcd_init(CHAR_LCD_CFG);
char_lcd_clear();

addr64_format(addrbuf, &envelope->ieee_address);
sys_watchdog_reset();

while (c<4)
{
char_lcd_writ_str(envelope->payload);
delay_ticks(2*HZ);

    char_lcd_clear();
    char_lcd_goto_xy(0, 0); 
    c++;

    }


  }
   #endif



  void main(void)
  {
   uint8_t i, j;



sys_hw_init();
sys_xbee_init();
sys_app_banner();

char_lcd_init(CHAR_LCD_CFG);

for (;;) {
    if (!test_stage_done) {
        switch (test_stage) {


        case 0:
            char_lcd_goto_xy(0, 0);
            char_lcd_writ_str("All working fine");

            break;
        }
        test_stage_done = 1;
    }

    sys_watchdog_reset();
    sys_xbee_tick();
  }
 }

ssize_t char_lcd_writ(const uint8_t *data, size_t len)
 {
   size_t written = 0;


while (written < len) {
    char_lcd_putchar(*data++);
    written++;

    if ( written == 32 || written == 64  || written == 96 || written == 128 || written == 160  || written == 192 )
    {
        delay_ticks(2*HZ);
        char_lcd_clear();
        char_lcd_goto_xy(0, 0);     
    }
    }
while (written < len) {
written = 0;
memset(*data++, '\0', len);
written++;
}
return (ssize_t)written;
  }

【问题讨论】:

    标签: eclipse-cdt display overwrite xbee lcd


    【解决方案1】:

    如果您超出信封中指定的有效负载长度,可能就像envelope-&gt;payload 不以空结尾并且实际上包含这些额外字符一样简单。尝试将 char_lcd_writ() 函数与有效负载的长度一起使用,而不是 char_lcd_writ_str(),后者将使用 strlen() 来查找长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多