Бегущая строка

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

Привет! :)) Подскажите, как сделать, чтобы при выводе бегущей строки на ЖКИ символ, который исчезает из поля зрения, стразу же появлялся с противоположной части экрана?
Реклама
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Сообщение otest »

Надо понимать с тыльной стороны экрана???
Реклама
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

otest писал(а):Надо понимать с тыльной стороны экрана???
Нет, просто в ЖКИ количество символов в строке больше количества знакомест на экране, поэтому когда строка бежит ВЛЕВО и исчезает, то проходит некоторое время, прежде чем она появляется СПРАВА, вот я и спрашиваю, как сделать чтобы она сразу появлялась справа? :)) :))
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

goodking, где тип МК, ваш проект с граблями, где язык на котором Вы все это ваяете.

Не будете указывать, тогда кроме флуда и указателей на Гугл ничего не увидите.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

Danko писал(а):goodking, где тип МК, ваш проект с граблями, где язык на котором Вы все это ваяете.

Не будете указывать, тогда кроме флуда и указателей на Гугл ничего не увидите.
тип SiLabs c8051F120

пишу на языке си, код не вставляю т.к. это не играет роли, важен алгоритм. Я делаю следующим образом: отправляю строку, затем генерирую прерывания с определенной частотой, в обработчике прерываний ставлю сдвиг курсора на одну позицию. Как ограничить количество символов в строке количеством знакомест на экране??
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

первое: я стараюсь не использовать библиотечные функции вывода строки.

второе: строка это массив символов и что мешает с определенным интервалом выводить символы в строку на экране с 1 по 16 потом со 2 по 17 и т.д. (экран 1 строка на 16 символов) конечно же отслеживая конец строки.

А вот алгоритм как раз и зависит от того, как Вы выводите строку на экран.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение 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); // команда сдвига курсора влево
}
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»