реклама на сайте
подробности

 
 
> LCD через регистр сдвига, Как реализовать?
SergeyM
сообщение Jun 8 2005, 08:28
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654



Помогите пожалуйста реализовать работу МК с ЖКИ через регистр сдвига. Что то пробовал и не хотит ничего отображатьsad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SergeyM
сообщение Jun 8 2005, 14:34
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654



ЖК совместимый с 44780 16 символов 2 строки, регистр 74LS174, стирание перед каждой записью использую побитно, можно использовать третью ногу для подачи сигнала очистки, а можно как в моем примере. Причем пример взят из книги, но нифига он не работает ни на Пике ни на АВР.
Go to the top of the page
 
+Quote Post
SergeyM
сообщение Jun 8 2005, 14:47
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654



Вот примеры
Для Пика (как в книге)
Код
// Глобальные переменные
volatile unsigned int RTC = 0; //Счетчик реального времени

int Dlay;    //длительность задержки
         
static volatile bit Clock  @ (unsigned)&PORTB*8+1;
static volatile bit ClockTRIS    @ (unsigned)&TRISB*8+1;
static volatile bit Data  @ (unsigned)&PORTB*8+2;
static volatile bit DataTRIS    @ (unsigned)&TRISB*8+2;


char Message[13] = "Hello World!";    //строка сообщения выводимая на          //дисплей

// Служебные подпрограммы
LCDNybble(char Nybble, char RS){    // запись полубайта в ЖКИ
    unsigned int i;
    Data = 0;    // очистка сдвигового регистра
    for (i = 0;i < 6; i++){
 Clock = 1;    //строб clock
 Clock = 0;    //для записи нулевых разрядов
 }
 Data = 1;    // строб Е
 Clock = 1;    // строб clock
 Clock = 0;
 
 Data = RS;    // бит RS
 Clock = 1;
 Clock = 0;
 
 for (i = 0; i < 4; i++){    // запись 4 бита
   if ((Nybble & 0x008) != 0)
       Data = 1;
   else
       Data = 0;
   Clock = 1;
   Clock = 0;
   Nybble = Nybble << 1;    // сдвиг влево перед записью нового  
 }          //полубайта
 Data = 1;    // строб Е
 Data  = 0;
} // конец подпрограммы LSDNybble

LCDByte(char Byte, char RS){    //запись байта в ЖКИ
    int LBDlay;    
    LCDNybble((Byte >> 4)& 0x00F, RS);    // старшая тетрада
    LCDNybble( Byte & 0x00F, RS);  // младшая тетрада
    
    if ((Byte < 4) && (RS == 0))
 LBDlay = RTC + 6;
    else
 LBDlay = RTC + 2;
    while (LBDlay != RTC);
    
} // конец LCDByte



//Обработчик прерываний от таймера:
void interrupt tmr0_int(void)
{
    char temp;
    //TMR0 = 0x0F0;
    if (T0IF)    //если запрос на прерывание  поступил от таймера TMR0
    {
 T0IF = 0;    //то сбросить флаг прерывания
 RTC++;  //и выполнить инкремент счетчика времени
 
 
    }
    
    
}

//Главная программа
void main(void)
{
    int i;
    TMR0 = 0;//x0F0;      //Начальное значение счетчика
     //реального времени
    OPTION = 0x0D1;  //использовать предделитель совместно
     // с таймером TMR0, коэффициент деления 4
    T0IE = 1;      // Разрешить прерфывание от таймера
    GIE = 1;      // Разрешить обработку прерываний
    
    
    
    Dlay = RTC + 20;
    while (Dlay != RTC);
    
    LCDNybble(0x003, 0);
    Dlay = RTC + 6;
    while (Dlay != RTC);
    
    LCDNybble(0x003, 0);
    Dlay = RTC + 1;
    while (Dlay != RTC);
    
    LCDNybble(0x003, 0);
    Dlay = RTC + 1;
    while (Dlay != RTC);
    
    LCDNybble(0x002, 0);
    Dlay = RTC + 1;
    while (Dlay != RTC);
    
    LCDByte(0x028, 0);
    LCDByte(0x008, 0);
    LCDByte(0x001, 0);
    LCDByte(0x006, 0);
    LCDByte(0x00E, 0);
    
    for (i = 0; i < 12; i++)
 LCDByte(Message[i], 1);
 
 
    while (1 == 1)  // Бесконечный цикл
    {
 
    }
}


Для АВР (тупое копирование с небольшой коррекцией)
Код
#include <90s8515.h>


#include <delay.h>


char Message[13] = "Hello World!";
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

}

// Declare your global variables here

LCDNybble(char Nybble, char RS)
{
unsigned int i;
PORTA.0 = 0;
for (i=0; i<6; i++)
       {
       PORTA.1 = 1;
       PORTA.1 = 0;
       }        
PORTA.0 = 1;
PORTA.1 = 1;
PORTA.1 = 0;

PORTA.0 = RS;
PORTA.1 = 1;
PORTA.1 = 0;
for (i=0; i<4; i++)
       {
       if ((Nybble & 0x08) != 0)
               PORTA.0 = 1;
       else
               PORTA.0 = 0;
       PORTA.1 = 1;
       PORTA.1 = 0;
       Nybble = Nybble << 1;
       }
PORTA.0 = 1;
PORTA.0 = 0;
}

LCDByte(char Byte, char RS)
{
//int LBDlay;
LCDNybble((Byte >> 4) & 0x0F, RS);
LCDNybble(Byte & 0x0F, RS);
if ((Byte < 4) & (RS ==0))
       //LBDlay = RTC + 6;
       delay_ms(5);
else
       //LBDlay = RTC + 2;
       delay_ms(1);
}
void main(void)
{
// Declare your local variables here
int i;
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0x03;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
TCCR0=0x05;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// LCD module initialization

PORTA.1 = 0;
PORTA.0 = 0;

delay_ms(20);
LCDNybble(0x03,0);
delay_ms(5);
LCDNybble(0x03,0);
delay_ms(1);
LCDNybble(0x03,0);
delay_ms(1);
LCDNybble(0x02,0);
delay_ms(1);
LCDByte(0x28,0);
LCDByte(0x08,0);
LCDByte(0x01,0);
LCDByte(0x06,0);
LCDByte(0x0E,0);

// Global enable interrupts
#asm("sei")

for (i=0; i<12; i++)
       LCDByte(Message[i],1);
while (1)
     {
     // Place your code here

     };
}


Ни один пример реально не работает
если надо могу кинуть схему подключения
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 8 2005, 15:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SergeyM @ Jun 8 2005, 20:47)
если надо могу кинуть схему подключения
*

Вот ее-то как раз желательно увидеть.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SergeyM   LCD через регистр сдвига   Jun 8 2005, 08:28
- - yung   Поподробней, пожалуйста. ЖКИ голый или с контролле...   Jun 8 2005, 09:07
- - Igor26   Цитата(SergeyM @ Jun 8 2005, 11:28)Помогите п...   Jun 8 2005, 10:04
|- - SergeyM   Тогда поставим вопрос по другому: Я проверял работ...   Jun 8 2005, 11:19
- - vvs157   Цитата(SergeyM @ Jun 8 2005, 11:28)Помогите п...   Jun 8 2005, 11:19
- - SergeyM   Да еще никто не подскажет как отдельным выводам по...   Jun 8 2005, 11:21
- - phantom   В CodeVision функции предполагают наличие ЖКИ с ко...   Jun 8 2005, 13:26
- - SergeyM   В принципе через регистр сдвига можно работать с Ж...   Jun 8 2005, 13:47
|- - vvs157   Цитата(SergeyM @ Jun 8 2005, 16:47)В принципе...   Jun 8 2005, 14:27
- - phantom   ЦитатаНаверное неправильно пишу. Наверное... Трудн...   Jun 8 2005, 14:25
|- - SergeyM   [/quote] Вот ее-то как раз желательно увидеть. [/...   Jun 8 2005, 15:21
- - rezident   Добавьте ее как обычный файл.   Jun 8 2005, 15:34
|- - SergeyM   Для меньшей запутанности схемы я не стал соединять...   Jun 9 2005, 06:57
|- - vvs157   Цитата(SergeyM @ Jun 9 2005, 09:57)На ЖКИ пит...   Jun 9 2005, 08:15
|- - vet   Цитата(vvs157 @ Jun 9 2005, 12:15)Цитата(Serg...   Jun 9 2005, 08:51
- - SergeyM   У меня в книге написано как инициализировать в чет...   Jun 9 2005, 09:05
|- - vvs157   Цитата(SergeyM @ Jun 9 2005, 12:05)Все вроде ...   Jun 9 2005, 11:18
|- - SergeyM   народ вы конечно советуете как надо сделать через ...   Jun 9 2005, 11:31
|- - vvs157   Цитата(SergeyM @ Jun 9 2005, 14:31)народ вы к...   Jun 9 2005, 11:36
|- - SergeyM   Поймите что у меня нет 74HCT595 дайте аналог и есл...   Jun 9 2005, 11:44
|- - vvs157   Цитата(SergeyM @ Jun 9 2005, 14:44)Поймите чт...   Jun 9 2005, 12:16
|- - SergeyM   увжаемый vss157 вы не моглибы мне дать конкретный ...   Jun 9 2005, 12:26
|- - vvs157   To phantom Да вроде тут выходы соединены со входам...   Jun 9 2005, 20:30
|- - SergeyM   Цитата(vvs157 @ Jun 9 2005, 23:30)Попробуйте ...   Jun 10 2005, 11:30
- - phantom   А кто сказал, что 74174 - регистр сдвига? Это прос...   Jun 9 2005, 11:16
- - phantom   ЦитатаКогда Вы записываете что-то в сдвиговый реги...   Jun 9 2005, 12:25
- - rat   На www.circuitdevelop.narod.ru есть прога на С для...   Jun 10 2005, 06:06
- - phantom   ЦитатаДа вроде тут выходы соединены со входами, по...   Jun 10 2005, 07:54
|- - rezident   Цитата(phantom @ Jun 10 2005, 13:54)ЦитатаДа ...   Jun 10 2005, 15:10
- - phantom   А что насчет Цитатапроверить любым вольтметром , ч...   Jun 10 2005, 11:45
|- - vvs157   Цитата(phantom @ Jun 10 2005, 14:45)А что нас...   Jun 10 2005, 12:04
- - SergeyM   На счет поменять регистр. Нашел я регистры 74194 и...   Jun 10 2005, 12:16
- - phantom   Вообще то 74194 - 4х разрядный регистр, а нужно ка...   Jun 10 2005, 12:57
- - SergeyM   В общем разобрался я с регистром, при проверке отд...   Jun 10 2005, 15:03
- - SergeyM   ЦитатаВ самом начале неплохо бы сбросить оба регис...   Jun 10 2005, 16:06
|- - rezident   Цитата(SergeyM @ Jun 10 2005, 22:06)дак мы тр...   Jun 10 2005, 16:24
- - phantom   Сорри, тормоз я! Извините, если кого обидел...   Jun 13 2005, 08:30
- - SergeyM   В общем все ОК, я реализовал данный случай. Немног...   Jun 13 2005, 11:39
- - pan_oleg   SergeyM, ти абсолятно прав, достаточно всего одну ...   Feb 4 2008, 09:28
- - aleksey_g   Ваша проблема уже решена и опубликована! Смотр...   Feb 4 2008, 16:31


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01441 секунд с 7
ELECTRONIX ©2004-2016