Бегущая строка
Добавлено: Чт фев 04, 2010 12:58:13
Привет!
Подскажите, как сделать, чтобы при выводе бегущей строки на ЖКИ символ, который исчезает из поля зрения, стразу же появлялся с противоположной части экрана?
Нет, просто в ЖКИ количество символов в строке больше количества знакомест на экране, поэтому когда строка бежит ВЛЕВО и исчезает, то проходит некоторое время, прежде чем она появляется СПРАВА, вот я и спрашиваю, как сделать чтобы она сразу появлялась справа?otest писал(а):Надо понимать с тыльной стороны экрана???
тип SiLabs c8051F120Danko писал(а):goodking, где тип МК, ваш проект с граблями, где язык на котором Вы все это ваяете.
Не будете указывать, тогда кроме флуда и указателей на Гугл ничего не увидите.
Спасибо, вот код с пояснениями, что можно улучшить??Danko писал(а):первое: я стараюсь не использовать библиотечные функции вывода строки.
второе: строка это массив символов и что мешает с определенным интервалом выводить символы в строку на экране с 1 по 16 потом со 2 по 17 и т.д. (экран 1 строка на 16 символов) конечно же отслеживая конец строки.
А вот алгоритм как раз и зависит от того, как Вы выводите строку на экран.
Код: Выделить всё
#include "c8051F120.h"
sbit LCD_rs = P0^0;
sbit LCD_rw = P0^2;
sbit LCD_en = P0^4;
sfr16 RCAP2=0xca;
sfr16 TMR2=0xcc;
sfr16 RCAP3=202;
sfr16 TMR3=204;
sfr16 ADC0=0xbe;
sfr16 RCAP4=0xe4;
sfr16 TMR4=0xcc;
#define LCD_data P3
#define SYSCLK 3062500
void LCD_init();
void LCD_sendstring(unsigned char *var);
void LCD_build();
void LCD_command(unsigned char var);
void LCD_senddata(unsigned char var);
void delay (unsigned int time);
void Timer1_Init();
void main(void)
{
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = CONFIG_PAGE;
P0MDOUT = 0x15;
P3MDOUT = 0xFF;
XBR2 = 0xC0;
LCD_init();
LCD_command(0x8f);// адрес позиции курсора
LCD_sendstring("TEMPERATURE IS:");// собственно строка
EA=0;
Timer1_Init();
EA=1;
while (1);{}
}
void LCD_init()
{
delay (45000);
LCD_command (0x38);
delay (12300);
LCD_command (0x38);
delay (3000);
LCD_command (0x38);
delay (65535);
LCD_command (0x38);
delay (65535);
LCD_command (0x0C);
delay (65535);
LCD_command (0x06);
delay (65535);
LCD_command (0x01);
}
void delay (unsigned int time)
{
unsigned int i;
for (i=0; i<time>L
LCD_data = var1; //Function set: 2 Line, 8-bit, 5x7 dots
LCD_en = 0;
delay(3000);
}
void LCD_senddata(unsigned char var)
{
LCD_rs = 1; //Selected data register
LCD_rw = 0; //We are writing
LCD_en = 1; //Enable H->L
LCD_data = var;
LCD_en = 0;
delay(3000);
}
void LCD_sendstring(unsigned char *var)
{ while(*var) //till string ends
LCD_senddata(*var++); //send characters one by one
}
void Timer1_Init()
{
SFRPAGE = TIMER01_PAGE;
TCON = 0x10;
TMOD = 0x02;
CKCON = 0x02;
IE = 0x02;
}
void Timer0_ISR (void) interrupt 1
{
delay(100000);
LCD_command(0x1b); // команда сдвига курсора влево
}