在XBee开发板上的LCD显示屏上显示字符

时间:2018-11-19 15:43:47

标签: pointers character display xbee lcd

我正在使用可编程XBee开发板与LCD HD44780(20x4)进行接口。我在XBee上收到一个无线帧,并将其显示在LCD上。

当的长度为80个字符时,它可以正常工作,因为我不能显示更多。为此,我想逐个字符显示帧,以便在显示最后一个字符时,光标再次移至0,0,然后覆盖。这样,我可以显示尽可能多的内容,具体取决于XBee RAM。

以下代码适用于少于或等于80个字符的框架。关于如何为帧逐个字符地做任何提示?

#include <xbee_config.h>
#include <types.h>
#include <string.h>
#include <ctype.h>

#define char_lcd_write_str(a)       char_lcd_write(a, strlen(a))

static uint8_t test_stage = 0;
static uint8_t test_stage_done = 0;


  #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,k; 
char addrbuf[ADDR64_STRING_LENGTH];
char_lcd_init(CHAR_LCD_CFG);
char_lcd_clear();

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


char_lcd_write_str(envelope->payload);
delay_ticks(HZ / 10);



return 0;
}
 #endif



void main(void)
{
uint8_t i, j;
int data,l;

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_write_str("All working fine");

            break;
        }
        test_stage_done = 1;
    }

    sys_watchdog_reset();
    sys_xbee_tick();
}
}

1 个答案:

答案 0 :(得分:0)

wpan_envelope_t结构包括您可以利用的有效载荷长度。

uint16_t length = envelope->length;
uint16_t offset = 0;
while (offset < length) {
    uint16_t write = length - offset;
    if (write > 80) write = 80;
    char_lcd_goto_xy(0, 0);
    char_lcd_write(&envelope->payload[offset], write);
    offset += write;
}

请注意,这看起来有点奇怪,因为字符串的末尾将与以前打印的80个字符重叠。您可能希望在最后一个char_lcd_write()调用之后写出足够的空格以清除该数据(或添加一个特殊字符以指示消息的结尾)。

相关问题