Re: Дисплеи от мобильных телефонов- осцилограммы работы
Добавлено: Сб апр 13, 2013 14:41:21
Спасибо большое! Попробую рассчитать функцию.)
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
#define uint unsigned int
#define uchar unsigned char
#define RST PB1
#define RS PB0
#define CS PB2
#define CLK PB3
#define DATA PB5
#define cmd 0
#define dat 1
void sendToLcd(uint SendType, uchar sendData)
{
int i;
if (SendType==cmd)
{PORTB &=~(1<<RS);}
else
{PORTB |=(1<<RS);}
_delay_ms(20);
for (i = 7; i >= 0; i--)
{
if ((sendData >> i) & 1)
{PORTB |=(1<<DATA);}
else
{PORTB &=~(1<<DATA);}
_delay_ms(20);
PORTB |=(1<<CLK);
_delay_ms(20);
PORTB &=~(1<<CLK);
}
_delay_ms(5);
}
void lcdInit(void) {
PORTB &=~(1<<RST);
_delay_ms(2500);
PORTB |=(1<<RST);
sendToLcd(cmd, 0x01);
sendToLcd(cmd, 0x36); //Memory Access Control
sendToLcd(dat, 0x80);
sendToLcd(cmd, 0x11); //Sleep out
sendToLcd(cmd, 0x3a); //Interfase pixel format--
sendToLcd(dat, 0x02); //8bit/pixel
sendToLcd(cmd, 0x29); //Display ON
}
void putPixel(uchar x, uchar y, uchar color) {
sendToLcd(cmd, 0x2a);
sendToLcd(dat, y);
sendToLcd(dat, 132);
sendToLcd(cmd, 0x2b);
sendToLcd(dat, x);
sendToLcd(dat, 176);
sendToLcd(cmd, 0x2c);
PORTB |=(1<<RS);
sendToLcd(dat, color);
}
void main( void )
{PORTB |= 0xFF;
_delay_ms(10);
lcdInit();
_delay_ms(10);
putPixel(100,100,128);
}
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
#define uint unsigned int
#define uchar unsigned char
#define RST PB1
#define RS PB0
#define CS PB2
#define CLK PB3
#define DATA PB5
#define cmd 0
#define dat 1
void sendToLcd(uint SendType, uchar sendData)
{
int i;
PORTB &=~(1<<CS);
if (SendType==cmd)
{PORTB &=~(1<<RS);}
else
{PORTB |=(1<<RS);}
for (i = 0; i <= 7; i++)
{
if ((sendData >> i) & 1)
{PORTB |=(1<<DATA);}
else
{PORTB &=~(1<<DATA);}
_delay_ms(20);
PORTB |=(1<<CLK);
_delay_ms(20);
PORTB &=~(1<<CLK);
}
PORTB |=(1<<CS);
}
void send16ToLcd(uint sendData)
{
int i;
PORTB &=~(1<<CS);
PORTB |=(1<<RS);
for (i = 0; i <= 15; i++)
{
if ((sendData >> i) & 1)
{PORTB |=(1<<DATA);}
else
{PORTB &=~(1<<DATA);}
_delay_ms(20);
PORTB |=(1<<CLK);
_delay_ms(20);
PORTB &=~(1<<CLK);
}
PORTB |=(1<<CS);
}
void lcdInit(void) {
PORTB |= 0x00;
PORTB &=~(1<<RST);
_delay_ms(2500);
PORTB |=(1<<RST);
sendToLcd(cmd, 0x01);
sendToLcd(cmd, 0x36); //Memory Access Control
sendToLcd(dat, 0x80);
sendToLcd(cmd, 0x11); //Sleep out
sendToLcd(cmd, 0x3a); //Interfase pixel format--
sendToLcd(dat, 0x55); //16bit/pixel
sendToLcd(cmd, 0x29); //Display ON
}
void putPixel(uchar x, uchar y, uint color) {
sendToLcd(cmd, 0x2a);
sendToLcd(dat, y);
sendToLcd(dat, 132);
sendToLcd(cmd, 0x2b);
sendToLcd(dat, x);
sendToLcd(dat, 176);
sendToLcd(cmd, 0x2c);
PORTB |=(1<<RS);
send16ToLcd(color);
}
void main( void )
{DDRB |= 0xFF;
_delay_ms(10);
lcdInit();
_delay_ms(10);
putPixel(100,100,128);
}Ээ? И при этом МК от 5 В питается? Хорошо, если дисплей еще живой.IvanVoyan писал(а):******Все выводы экрана подключаю напрямую к мк, безо всяких диодов, резисторов и кондеров.
Код: Выделить всё
Pin description
---------------------------------------------------------
# Name Function
---------------------------------------------------------
1 RS Low=CMD, High=DATA
2 ~RST Reset input, active low
3 ~CS Chip select, active low
4 SYNC External frame synchorization input, unused by default
5 CLK SPI Clock-in signal (High-to-Low)
6 DATA SPI Data-in signal (MSB first)
7 VCC Power supply, normally 2.9V (I tested with 3.3V)
8 GND Ground
9 LED+ Backlight voltage, approx. 12V (depends on required current)
10 LED- Backlight common pin

Код: Выделить всё
#define PIN_RS 7
#define PIN_RESET 8
#define PIN_CS 9
#define PIN_CLK 13
#define PIN_DAT 11
#define LCD_C LOW
#define LCD_D HIGH
void LcdWrite(boolean dc, byte data)
{
if(dc == HIGH) digitalWrite(PIN_RS, dc);
else
{
digitalWrite(PIN_CS, HIGH);
digitalWrite(PIN_RS, dc);
digitalWrite(PIN_CS, LOW);
}
digitalWrite(PIN_CLK, LOW);
shiftOut(PIN_DAT, PIN_CLK, MSBFIRST, data);
}
void LcdInitialise(void)
{
pinMode(PIN_RS, OUTPUT);
pinMode(PIN_RESET, OUTPUT);
pinMode(PIN_CS, OUTPUT);
pinMode(PIN_CLK, OUTPUT);
pinMode(PIN_DAT, OUTPUT);
digitalWrite(PIN_RS, LOW);
digitalWrite(PIN_CS, HIGH);
digitalWrite(PIN_RESET, LOW);
delay(500);
digitalWrite(PIN_RESET, HIGH);
delay(500);
LcdWrite(LCD_C, 0x01 );
delay(20);
LcdWrite(LCD_C, 0x36 );
LcdWrite(LCD_D, 0x80 );
LcdWrite(LCD_C, 0x11 );
delay(20);
LcdWrite(LCD_C, 0x3a );
LcdWrite(LCD_D, 0x55 );
delay(20);
LcdWrite(LCD_C, 0x29 );
}
void setup()
{
LcdInitialise();
}
void loop()
{
}
Код: Выделить всё
flash const byte FontLookup [][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, /* space */
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, /* ! */
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, /* " */
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, /* # */
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, /* $ */
{ 0xc4, 0xc8, 0x10, 0x26, 0x46 }, /* % */
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, /* & */
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, /* ' */
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, /* ( */
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, /* ) */
{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, /* * */
{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, /* + */
{ 0x00, 0x00, 0x50, 0x30, 0x00 }, /* , */
{ 0x10, 0x10, 0x10, 0x10, 0x10 }, /* - */
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, /* . */
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, /* / */
{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, /* 0 */
{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, /* 1 */
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, /* 2 */
{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, /* 3 */
{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, /* 4 */
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, /* 5 */
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, /* 6 */
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, /* 7 */
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, /* 8 */
{ 0x06, 0x49, 0x49, 0x29, 0x1E }, /* 9 */
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, /* : */
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, /* ; */
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, /* < */
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, /* = */
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, /* > */
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, /* ? */
{ 0x32, 0x49, 0x59, 0x51, 0x3E }, /* @ */
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, /* A */
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, /* B */
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, /* C */
{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, /* D */
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, /* E */
{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, /* F */
{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, /* G */
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, /* H */
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, /* I */
{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, /* J */
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, /* K */
{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, /* L */
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, /* M */
{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, /* N */
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, /* O */
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, /* P */
{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, /* Q */
{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, /* R */
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, /* S */
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, /* T */
{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, /* U */
{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, /* V */
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, /* W */
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, /* X */
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, /* Y */
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, /* Z */
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, /* [ */
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, /* "Yen" */
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, /* ] */
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, /* ^ */
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, /* _ */
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, /* ' */
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, /* a */
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, /* b */
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, /* c */
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, /* d */
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, /* e */
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, /* f */
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, /* g */
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, /* h */
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, /* i */
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, /* j */
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, /* k */
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, /* l */
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, /* m */
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, /* n */
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, /* o */
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, /* p */
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, /* q */
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, /* r */
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, /* s */
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, /* t */
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, /* u */
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, /* v */
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, /* w */
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, /* x */
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, /* y */
{ 0x44, 0x64, 0x54, 0x4C, 0x44 } /* z */
};
Код: Выделить всё
for (i=0; i<80; i++)
{
for (j = 0; j<5; j++)
LcdSend(FontLookup[i][j], LCD_DATA);
LcdSend(0x00, LCD_DATA);
};
А поискать по форуму не пробовали почему именно библиотеку к "магическому Arduino" на ней какой МК стоит - AVR первая же страница поиска по LPH8731 http://radiokot.ru/forum/search.php?key ... 1%81%D0%BA показывает нам сообщениеnibiluk писал(а):Есть ли у кого библиотека lph8731-3c, для подключения к Arduino ....