20.03.2012, 12:06 | #1 (permalink) |
Member
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
|
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('!'); } 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' |
20.03.2012, 12:06 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти топики создавались ранее и они могут вам помочь Часы с термометром на ATmega8 Вариант платы для часов на ATmega8 Проблемы с запуском часов на ATmega8 |
20.04.2012, 21:58 | #5 (permalink) |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
Ну один из косяков это то, что функция main объявлена как int но ничего не вернула. т.е. в конец функции ндо было вставить
Код:
return 0; |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
24.04.2012, 13:15 | #7 (permalink) |
Member
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
|
Немножко апнем темку
подключение Микросхема | Дисплей 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:23 |
24.04.2012, 13:28 | #8 (permalink) |
Member
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
|
Добавлю адреса портов
/******** По поводу портов описаны они в даташите к atmega8 укажу здесь список портов и их 16-тиричный адрес PORTB = 0x18; PORTC = 0x15; PORTD = 0x12; |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|