Я работаю с программируемой платой разработки XBee для взаимодействия с LCD HD44780 (20x4). Я получаю беспроводную рамку на XBee и отображаю ее на ЖК-дисплее.
Это прекрасно работает, когда длина в 80 символов, потому что я не могу отобразить больше, чем это. Для этого я хочу отображать кадр за символом, чтобы при отображении последнего символа курсор снова перемещался на 0,0, а затем перезаписывался. Таким образом, я мог отображать столько, сколько я могу, в зависимости от ОЗУ XBee.
Приведенный ниже код подходит для кадра, длина которого не превышает 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();
}
}