M
Mindaugasu
Guest
Я намагаюся інтерфейс AVR за допомогою двох проводів шляхом перенесення даних в регістр зсуву 74HC164.Але я нахиляє отримати код для правильної роботи:
Код:# Включити <inttypes.h>
# Включити <avr/io.h>
# Включити <avr/interrupt.h>
# Включити <avr/signal.h>
# Включити <avr/delay.h>
# Включити <avr/iom8.h>
# Визначити частоту 8000000
# Визначити datapin 0 / / визначити datapin з atmega8 на 74HC164
# Визначити clockpin 1 / / визначити години Сцепляющій з atmega8 по 74HC164
# Визначити регістра R16
/ *
LCD штирями підключений до 74hc164:
Q0 -> LCD_D4
Q1 -> LCD_D5
Q2 -> LCD_D6
Q3 -> LCD_D7
Q4 -> NC
Q5 -> NC
Q6 -> LCD_RS
Q7 -> LCD_E* /atmega8init недійсним (недійсними)
(
DDRC = (1 <<DDC0) | (1 <<DDC1);
)
недійсним sendByteToLCD (uint8_t LCDdata)
(
uint8_t I;PORTC І = ~ (1 <<0); / / встановлює datapin для виводу низького
для (i = 0; I <= 8; I ) / / явний зсув 74HC164 зареєструватися
(
PORTC | = (1 <<1); / / встановлює clockpin для виведення на ВисокомуPORTC І = ~ (1 <<1); / / встановлює clockpin для виводу низького)
для (i = 0; I <= 7; I ) / / запису 8bit LCDdata до 74HC164 зареєструватися
(
якщо (LCDdata І І 0x01)
(PORTC | = (1 <<0); / / встановлює datapin для виведення на ВисокомуPORTC | = (1 <<1); / / встановлює clockpin для виведення на Високому_delay_us (100);
PORTC І = ~ (1 <<1); / / встановлює clockpin для виводу низькогоPORTC І = ~ (1 <<0); / / встановлює datapin для виводу низького)
ще
(
PORTC І = ~ (1 <<0); / / встановлює datapin для виводу низькогоPORTC | = (1 <<1); / / встановлює clockpin для виведення на Високому_delay_us (100);
PORTC І = ~ (1 <<1); / / встановлює clockpin для виводу низького)
LCDdata = LCDdata>> 1;
якщо (I == 7)
(
PORTC І = ~ (1 <<1);
PORTC | = (1 <<0);
PORTC | = (1 <<0);
)))
недійсним sendChar (uint8_t topack) / / форма дані готові до відправки на 74HC164
(
uint8_t упакований;
/ * Перші 4 біти байт містить ЖК-D4-D7 біт
4 та 5 бітів не використовується
Біт 6 призначена для РК-RS
розрядних 7 призначена для ЖК-E
* /
упаковані = (topack І 0xF0) | 0x03;
sendByteToLCD(packed);
_delay_us (100);
упаковані = (topack <<4) | 0x03;
sendByteToLCD (упакований);
_delay_us (100);
)
недійсним sendCommand (uint8_t topack) / / форма дані готові до відправки на 74HC164
(
uint8_t упакований;
/ * Перші 4 біти байт містить ЖК-D4-D7 біт
4 та 5 бітів не використовується
Біт 6 призначена для РК-RS
розрядних 7 призначена для ЖК-E
* /
упаковані = (topack І 0xF0) | 0x01;
sendByteToLCD (упакований);
_delay_us (100);
упаковані = (topack <<4) | 0x01;
sendByteToLCD (упакований);
_delay_us (100);
)
LCDinit недійсним (недійсними)
(
_delay_ms (30); / / чекати poverup
sendByteToLCD (0x31); / / 1
_delay_ms (10);
sendByteToLCD (0x31); / / 2
_delay_ms (10);
sendByteToLCD (0x31); / / 3
_delay_ms (20);
sendByteToLCD(0x21);//sends 00100001 to enable 4 bit mode
_delay_ms (15);
sendByteToLCD (0x21);
_delay_ms (5);
sendByteToLCD (0x01);
_delay_ms (5);
sendByteToLCD (0x11); / / чіткий дисплей
_delay_ms (5);
sendByteToLCD (0x01);
_delay_ms (5)INT основних (вакууму)
(
atmega8init ();
LCDinit ();
sendChar (0x49);/ * Цикл назавжди, переривання роблять інші * /
для (; / * Примітка [6] * /повернути (0);
)
Код:# Включити <inttypes.h>
# Включити <avr/io.h>
# Включити <avr/interrupt.h>
# Включити <avr/signal.h>
# Включити <avr/delay.h>
# Включити <avr/iom8.h>
# Визначити частоту 8000000
# Визначити datapin 0 / / визначити datapin з atmega8 на 74HC164
# Визначити clockpin 1 / / визначити години Сцепляющій з atmega8 по 74HC164
# Визначити регістра R16
/ *
LCD штирями підключений до 74hc164:
Q0 -> LCD_D4
Q1 -> LCD_D5
Q2 -> LCD_D6
Q3 -> LCD_D7
Q4 -> NC
Q5 -> NC
Q6 -> LCD_RS
Q7 -> LCD_E* /atmega8init недійсним (недійсними)
(
DDRC = (1 <<DDC0) | (1 <<DDC1);
)
недійсним sendByteToLCD (uint8_t LCDdata)
(
uint8_t I;PORTC І = ~ (1 <<0); / / встановлює datapin для виводу низького
для (i = 0; I <= 8; I ) / / явний зсув 74HC164 зареєструватися
(
PORTC | = (1 <<1); / / встановлює clockpin для виведення на ВисокомуPORTC І = ~ (1 <<1); / / встановлює clockpin для виводу низького)
для (i = 0; I <= 7; I ) / / запису 8bit LCDdata до 74HC164 зареєструватися
(
якщо (LCDdata І І 0x01)
(PORTC | = (1 <<0); / / встановлює datapin для виведення на ВисокомуPORTC | = (1 <<1); / / встановлює clockpin для виведення на Високому_delay_us (100);
PORTC І = ~ (1 <<1); / / встановлює clockpin для виводу низькогоPORTC І = ~ (1 <<0); / / встановлює datapin для виводу низького)
ще
(
PORTC І = ~ (1 <<0); / / встановлює datapin для виводу низькогоPORTC | = (1 <<1); / / встановлює clockpin для виведення на Високому_delay_us (100);
PORTC І = ~ (1 <<1); / / встановлює clockpin для виводу низького)
LCDdata = LCDdata>> 1;
якщо (I == 7)
(
PORTC І = ~ (1 <<1);
PORTC | = (1 <<0);
PORTC | = (1 <<0);
)))
недійсним sendChar (uint8_t topack) / / форма дані готові до відправки на 74HC164
(
uint8_t упакований;
/ * Перші 4 біти байт містить ЖК-D4-D7 біт
4 та 5 бітів не використовується
Біт 6 призначена для РК-RS
розрядних 7 призначена для ЖК-E
* /
упаковані = (topack І 0xF0) | 0x03;
sendByteToLCD(packed);
_delay_us (100);
упаковані = (topack <<4) | 0x03;
sendByteToLCD (упакований);
_delay_us (100);
)
недійсним sendCommand (uint8_t topack) / / форма дані готові до відправки на 74HC164
(
uint8_t упакований;
/ * Перші 4 біти байт містить ЖК-D4-D7 біт
4 та 5 бітів не використовується
Біт 6 призначена для РК-RS
розрядних 7 призначена для ЖК-E
* /
упаковані = (topack І 0xF0) | 0x01;
sendByteToLCD (упакований);
_delay_us (100);
упаковані = (topack <<4) | 0x01;
sendByteToLCD (упакований);
_delay_us (100);
)
LCDinit недійсним (недійсними)
(
_delay_ms (30); / / чекати poverup
sendByteToLCD (0x31); / / 1
_delay_ms (10);
sendByteToLCD (0x31); / / 2
_delay_ms (10);
sendByteToLCD (0x31); / / 3
_delay_ms (20);
sendByteToLCD(0x21);//sends 00100001 to enable 4 bit mode
_delay_ms (15);
sendByteToLCD (0x21);
_delay_ms (5);
sendByteToLCD (0x01);
_delay_ms (5);
sendByteToLCD (0x11); / / чіткий дисплей
_delay_ms (5);
sendByteToLCD (0x01);
_delay_ms (5)INT основних (вакууму)
(
atmega8init ();
LCDinit ();
sendChar (0x49);/ * Цикл назавжди, переривання роблять інші * /
для (; / * Примітка [6] * /повернути (0);
)