Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <util/delay.h>
- //порт к которому подключена шина данных ЖКД
- #define PORT_DATA PORTB
- #define PIN_DATA PINB
- #define DDRX_DATA DDRB
- //порт к которому подключены управляющие выводы
- #define PORT_SIG PORTD
- #define PIN_SIG PIND
- #define DDRX_SIG DDRD
- //номера выводов микроконтроллера
- //к которым подключены управляющие выводы ЖКД
- #define RS 0
- #define RW 2
- #define EN 1
- //макросы для работы с битами
- #define ClearBit(reg, bit) reg &= (~(1<<(bit)))
- #define SetBit(reg, bit) reg |= (1<<(bit))
- #define F_CPU 8000000
- //#define _delay_us(us) __delay_cycles((F_CPU / 1000000) * (us));
- //#define _delay_ms(ms) __delay_cycles((F_CPU / 1000) * (ms));
- //функция записи команды
- void LcdWriteCom(unsigned char data)
- {
- _delay_us(60);
- ClearBit(PORT_SIG, RS); // устанавливаем RS в 0
- PORT_DATA = data; // выводим данные на шину
- SetBit(PORT_SIG, EN); // устанавливаем Е в 1
- _delay_us(60);
- ClearBit(PORT_SIG, EN); // устанавливаем Е в 0
- _delay_us(60);
- }
- //функция записи данных
- void LcdWriteData(unsigned char data)
- {
- _delay_us(100);
- SetBit(PORT_SIG, RS); //устанавливаем RS в 1
- _delay_us(100);
- PORT_DATA = data; //выводим данные на шину
- _delay_us(100);
- SetBit(PORT_SIG, EN); //устанавливаем Е в 1
- _delay_us(100);
- ClearBit(PORT_SIG, EN); // устанавливаем Е в 0
- }
- //функция инициализации
- void InitLcd(void)
- {
- //настраиваем порты ввода/вывода
- DDRX_DATA = 0xff;
- PORT_DATA = 0xff;
- DDRX_SIG = 0xff;
- PORT_SIG |= (1<<RW)|(1<<RS)|(1<<EN);
- ClearBit(PORT_SIG, RW);
- _delay_ms(60);
- LcdWriteCom(0x38); //0b00111000 - 8 разрядная шина, 2 строки
- _delay_ms(60);
- LcdWriteCom(0x0c); //0b00001111 - дисплей, курсор, мерцание включены
- _delay_ms(60);
- LcdWriteCom(0x01); //0b00000001 - очистка дисплея
- _delay_ms(60);
- LcdWriteCom(0x06); //0b00000110 - курсор движется вправо, сдвига нет
- _delay_ms(60);
- }
- int main( void )
- {
- InitLcd();
- LcdWriteData('1');
- LcdWriteData('2');
- LcdWriteData('3');
- LcdWriteData('4');
- LcdWriteData('5');
- LcdWriteData('6');
- LcdWriteData('7');
- LcdWriteData('8');
- _delay_ms(60);
- LcdWriteCom(0xc0);
- LcdWriteData('9');
- LcdWriteData('0');
- LcdWriteData('1');
- LcdWriteData('2');
- LcdWriteData('3');
- LcdWriteData('4');
- LcdWriteData('5');
- LcdWriteData('6');
- while(1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement