KINGDOM MIDI BOARD - DISPLAY TEST
У миди процессора появился экранчик ^^3
<<man.h>>
#ifndef MAIN_H_
#define MAIN_H_
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include "lcd.h"
#endif /* MAIN_H_ */
**************
<<lcd.h>>
#ifndef LCD_H_
#define LCD_H_
#include "main.h"
//----------------------------------------
void LCD_ini(void);
void setpos(unsigned char x, unsigned y);
void str_lcd (char str1[]);
void clearlcd(void);
//----------------------------------------
#define e1 PORTL|=0b00001000 // установка линии E в 1
#define e0 PORTL&=0b11110111 // установка линии E в 0
#define rs1 PORTL|=0b00000100 // установка линии RS в 1 (данные)
#define rs0 PORTL&=0b11111011 // установка линии RS в 0 (команда)
//----------------------------------------
#endif /* LCD_H_ */
***
<<lcd.c>>
#include "lcd.h"
//----------------------------------------
void sendhalfbyte(unsigned char c)
{
c<<=4;
e1; //включаем линию Е
_delay_us(500);
PORTL&=0b00001111; //стираем информацию на входах DB4-DB7, остальное не трогаем
PORTL|=c;
e0; //выключаем линию Е
_delay_us(500);
}
//----------------------------------------
void sendbyte(unsigned char c, unsigned char mode)
{
if (mode==0) rs0;
else rs1;
unsigned char hc=0;
hc=c>>4;
sendhalfbyte(hc);
sendhalfbyte(c);
}
//----------------------------------------
void sendchar(unsigned char c)
{
sendbyte(c,1);
}
//----------------------------------------
void setpos(unsigned char x, unsigned y)
{
char adress;
adress=(0x40*y+x)|0b10000000;
sendbyte(adress, 0);
}
//----------------------------------------
void LCD_ini(void)
{
_delay_ms(150); //Ждем 15 мс (стр 45)
sendhalfbyte(0b00000011);
_delay_ms(40);
sendhalfbyte(0b00000011);
_delay_us(1000);
sendhalfbyte(0b00000011);
_delay_ms(10);
sendhalfbyte(0b00000010);
_delay_ms(10);
sendbyte(0b00101000, 0); //4бит-режим (DL=0) и 2 линии (N=1)
_delay_ms(10);
sendbyte(0b00001100, 0); //включаем изображение на дисплее (D=1), курсоры никакие не включаем (C=0, B=0)
_delay_ms(10);
sendbyte(0b00000110, 0); //курсор (хоть он у нас и невидимый) будет двигаться влево
_delay_ms(10);
}
//----------------------------------------
void clearlcd(void)
{
sendbyte(0b00000001, 0);
_delay_us(15000);
}
//----------------------------------------
void str_lcd (char str1[])
{
wchar_t n;
for(n=0;str1[n]!='\0';n++)
sendchar(str1[n]);
}
//-----------------------------------
****
<<main.c>>
#include "lcd.h"
***
LCD_ini(); //Инициализируем дисплей
setpos(4,0);
str_lcd("Kingdom>");
setpos(0,1);
str_lcd("MIDI Board ^_^");
***
СХЕМА:
Ножки 15-16 на дисплее - подсветка (+5В/земля),
Переменный резистор 10к регулирует контраст
Comments