Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   ATmega8 и LCD (http://www.tehnari.ru/f22/t70802/)

WOLF007 20.03.2012 12:06

ATmega8 и LCD
 
Решил попробовать разобраться как сей девайс работает источник тут
код
Код:

/****Тестовая программа для LCD****/
 
#include <io.h>
#include <delay.h>  //используем стандартную процедуру задержки
 
#define RS PC0          //RS подключаем к PC0 микроконтроллера
#define EN PC2          //EN подключаем к PC2 микроконтроллера
 
/***Функция записи команды в LCD***/
 
void lcd_com(unsigned char p) //'p' байт команды
{
PORTC &= ~(1<<RS);  // RS = 0
PORTC |= (1<<EN);    // EN = 1 (начало записи команды в LCD)
PORTD = p;            // вывод команды на шину DB0-7 LCD
delay_us(100);        // длительность сигнала EN
PORTC &= ~(1 << EN);  // EN = 0 (конец записи команды в LCD)
delay_us(100);        // пауза для выполнения команды
}
 
/***Функция записи данных в LCD***/
 
void lcd_dat(unsigned char p)  //'p' байт команды
{
PORTC |= (1 << RS)|(1 << EN);  //RS = 1, EN = 1 (начало записи команды в LCD)
PORTD = p;                    //вывод команды на шину DB0-7 LCD
delay_us(100);                // длительность сигнала EN
PORTC &= ~(1 << EN);          // EN = 0 (конец записи команды в LCD)
delay_us(100);                // пауза для выполнения команды
}
 
/***Функция инициализации LCD***/
 
void lcd_init(void)
{
lcd_com(0x08);          // полное выключение дисплея
lcd_com(0x38);          // 8 бит 2 строки
delay_us(100);
lcd_com(0x38);          // 8 бит 2 строки
delay_us(100);
lcd_com(0x38);          // 8 бит 2 строки
lcd_com(0x38);
lcd_com(0x01);          // очистка дисплея
delay_us(100);
lcd_com(0x06);          // сдвиг курсора вправо
lcd_com(0x0D);          // включение дисплея, мигающий курсор
}
 
/***Основная программа***/
 
int main (void)
{
DDRC |= (1 << PC2)|(1 << PC1)|(1 << PC0); // PC0-3 выходы
PORTC = 0x00;                      // лог. 0 на выходе
DDRD = 0xff;                      // PD0-7 выходы
PORTB = 0x00;
 
lcd_init();      // инициализация дисплея
lcd_dat('H');    // выводим символы на экран
lcd_dat('e');
lcd_dat('l');
lcd_dat('l');
lcd_dat('o');
lcd_dat(' ');
lcd_dat('w');
lcd_dat('o');
lcd_dat('r');
lcd_dat('l');
lcd_dat('d');
lcd_dat('!');
}

при компиляции в CodeVisionAvr ругается
Error: C:\Users\dog\Desktop\test\test_cld.c(13): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(14): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(15): undefined symbol 'PORTD'
Error: C:\Users\dog\Desktop\test\test_cld.c(17): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(25): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(26): undefined symbol 'PORTD'
Error: C:\Users\dog\Desktop\test\test_cld.c(28): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(51): the 'main' function must return 'void' type
Error: C:\Users\dog\Desktop\test\test_cld.c(54): undefined symbol 'PORTC'
Error: C:\Users\dog\Desktop\test\test_cld.c(55): undefined symbol 'DDRD'

boogyman 10.04.2012 22:40

Ну что, разобрался?

WOLF007 19.04.2012 09:57

разобрался. Больше читать маны надо=)

Bydlokoder 20.04.2012 19:31

В чем был косяк?

kreol 20.04.2012 21:58

Ну один из косяков это то, что функция main объявлена как int но ничего не вернула. т.е. в конец функции ндо было вставить
Код:

return 0;
к примеру

Bydlokoder 22.04.2012 13:54

А почему компилятор на порт C ругается?

WOLF007 24.04.2012 13:15

Немножко апнем темку
подключение
Микросхема | Дисплей
PB0 -> RS
PB1 -> RW
PB2 -> E
PB4 -> D4
PB5 -> D5
PB6 -> D6
PB7 -> D7
Код:

#include <mega8.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
////////////////////////////////////////////////////////////////////////////////////
short int i;

void main(void)
{
PORTB=0x00;
DDRB=0xFF;


lcd_init(16);  //initialization
// Global enable interrupts
#asm("cli") //delay 
       
        lcd_gotoxy(0,0); //тут мы шагаем на первую строку к первому символу
          lcd_putsf("Технический");
          lcd_putsf("        OTDEL");
}


WOLF007 24.04.2012 13:28

Добавлю адреса портов
/********
По поводу портов описаны они в даташите к atmega8
укажу здесь список портов и их 16-тиричный адрес
PORTB = 0x18;
PORTC = 0x15;
PORTD = 0x12;


Часовой пояс GMT +4, время: 08:19.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.