Re: Дисплеи от мобильных телефонов- осцилограммы работы
Добавлено: Пт ноя 23, 2012 23:20:57
nikityan
Простите за то что спрашиваю лишнее, ведь я только начинающий. Накопал код для дисплея lph9157-2 на Си.
Спойлер
#define ENABLE_BIT_DEFINITIONS // enables the bit definitions, such as PD0, CS01, WGM02..
#include <intrinsics.h>
#include <iom32.h>
#define F_CPU 8000000 // Only for delay calculations
#define RST PB3 //Reset висит на порте B3
#define RS PB4 //RS висит на порте B4
#define CS PB2 //CS висит на порте B2
#define white 0xFFFF
#define yellow 0xFFE0
#define cyan 0x07FF
#define green 0x07E0
#define purple 0xF81F
#define red 0xF800
#define blue 0x001F
#define black 0x0000
#define gray 0x7800+0x0380+0x0F
__flash int colorbars[8]={white,yellow,cyan,green,purple,red,blue,black};
__flash char font6x8[576]=
{0x00,0x00,0x00,0x00,0x00,0x00, // Symbol 20
0x00,0x00,0x00,0x5F,0x00,0x00, // Symbol 21
0x00,0x00,0x03,0x00,0x03,0x00, // Symbol 22
0x22,0x7F,0x22,0x22,0x7F,0x22, // Symbol 23
0x00,0x24,0x2A,0x6B,0x2A,0x12, // Symbol 24
0x00,0x23,0x13,0x08,0x64,0x62, // Symbol 25
0x00,0x3A,0x45,0x45,0x3A,0x28, // Symbol 26
0x00,0x00,0x00,0x02,0x01,0x00, // Symbol 27
0x00,0x00,0x3E,0x41,0x00,0x00, // Symbol 28
0x00,0x00,0x41,0x3E,0x00,0x00, // Symbol 29
0x00,0x2A,0x1C,0x1C,0x2A,0x00, // Symbol 2A
0x00,0x08,0x08,0x3E,0x08,0x08, // Symbol 2B
0x00,0x00,0x80,0x40,0x00,0x00, // Symbol 2C
0x00,0x08,0x08,0x08,0x08,0x00, // Symbol 2D
0x00,0x00,0x00,0x40,0x00,0x00, // Symbol 2E
0x00,0x20,0x10,0x08,0x04,0x02, // Symbol 2F
0x00,0x3E,0x51,0x49,0x45,0x3E, // Symbol 30
0x00,0x00,0x42,0x7F,0x40,0x00, // Symbol 31
0x00,0x62,0x51,0x51,0x51,0x4E, // Symbol 32
0x00,0x21,0x41,0x45,0x45,0x3B, // Symbol 33
0x00,0x18,0x16,0x11,0x7F,0x10, // Symbol 34
0x00,0x27,0x45,0x45,0x45,0x39, // Symbol 35
0x00,0x3E,0x49,0x49,0x49,0x32, // Symbol 36
0x00,0x01,0x61,0x11,0x09,0x07, // Symbol 37
0x00,0x36,0x49,0x49,0x49,0x36, // Symbol 38
0x00,0x26,0x49,0x49,0x49,0x3E, // Symbol 39
0x00,0x00,0x00,0x12,0x00,0x00, // Symbol 3A
0x00,0x00,0x20,0x12,0x00,0x00, // Symbol 3B
0x00,0x08,0x14,0x22,0x41,0x00, // Symbol 3C
0x00,0x14,0x14,0x14,0x14,0x14, // Symbol 3D
0x00,0x41,0x22,0x14,0x08,0x00, // Symbol 3E
0x00,0x06,0x01,0x51,0x09,0x06, // Symbol 3F
0x00,0x3E,0x41,0x4D,0x4D,0x2E, // Symbol 40
0x00,0x78,0x16,0x11,0x16,0x78, // Symbol 41
0x00,0x7F,0x49,0x49,0x49,0x36, // Symbol 42
0x00,0x3E,0x41,0x41,0x41,0x22, // Symbol 43
0x00,0x7F,0x41,0x41,0x41,0x3E, // Symbol 44
0x00,0x7F,0x49,0x49,0x49,0x41, // Symbol 45
0x00,0x7F,0x09,0x09,0x09,0x01, // Symbol 46
0x00,0x3E,0x41,0x41,0x51,0x32, // Symbol 47
0x00,0x7F,0x08,0x08,0x08,0x7F, // Symbol 48
0x00,0x00,0x41,0x7F,0x41,0x00, // Symbol 49
0x00,0x30,0x40,0x41,0x41,0x3F, // Symbol 4A
0x00,0x7F,0x08,0x08,0x14,0x63, // Symbol 4B
0x00,0x7F,0x40,0x40,0x40,0x60, // Symbol 4C
0x00,0x7F,0x04,0x18,0x04,0x7F, // Symbol 4D
0x00,0x7F,0x04,0x08,0x10,0x7F, // Symbol 4E
0x00,0x3E,0x41,0x41,0x41,0x3E, // Symbol 4F
0x00,0x7F,0x09,0x09,0x09,0x06, // Symbol 50
0x00,0x3E,0x41,0x61,0x21,0x5E, // Symbol 51
0x00,0x7F,0x09,0x09,0x19,0x66, // Symbol 52
0x00,0x26,0x49,0x49,0x49,0x32, // Symbol 53
0x00,0x01,0x01,0x7F,0x01,0x01, // Symbol 54
0x00,0x3F,0x40,0x40,0x40,0x3F, // Symbol 55
0x00,0x07,0x18,0x60,0x18,0x07, // Symbol 56
0x00,0x1F,0x60,0x18,0x60,0x1F, // Symbol 57
0x00,0x63,0x14,0x08,0x14,0x63, // Symbol 58
0x00,0x03,0x04,0x78,0x04,0x03, // Symbol 59
0x00,0x61,0x51,0x49,0x45,0x43, // Symbol 5A
0x00,0x00,0x7F,0x41,0x00,0x00, // Symbol 5B
0x00,0x02,0x04,0x08,0x10,0x20, // Symbol 5C
0x00,0x00,0x41,0x7F,0x00,0x00, // Symbol 5D
0x00,0x00,0x00,0x00,0x00,0x00, // Symbol 5E
0x40,0x40,0x40,0x40,0x40,0x40, // Symbol 5F
0x00,0x00,0x00,0x01,0x02,0x00, // Symbol 60
0x00,0x20,0x54,0x54,0x54,0x78, // Symbol 61
0x00,0x7E,0x48,0x48,0x48,0x30, // Symbol 62
0x00,0x38,0x44,0x44,0x44,0x28, // Symbol 63
0x00,0x30,0x48,0x48,0x48,0x7E, // Symbol 64
0x00,0x38,0x54,0x54,0x54,0x18, // Symbol 65
0x00,0x10,0x7C,0x12,0x02,0x04, // Symbol 66
0x00,0x0C,0x52,0x52,0x3C,0x02, // Symbol 67
0x00,0x7E,0x08,0x08,0x08,0x70, // Symbol 68
0x00,0x00,0x00,0x74,0x00,0x00, // Symbol 69
0x00,0x40,0x80,0x80,0x74,0x00, // Symbol 6A
0x00,0x7E,0x10,0x10,0x10,0x6C, // Symbol 6B
0x00,0x00,0x02,0x7E,0x00,0x00, // Symbol 6C
0x00,0x7C,0x04,0x78,0x04,0x78, // Symbol 6D
0x00,0x7C,0x04,0x04,0x04,0x78, // Symbol 6E
0x00,0x38,0x44,0x44,0x44,0x38, // Symbol 6F
0x00,0xFC,0x24,0x24,0x24,0x18, // Symbol 70
0x00,0x18,0x24,0x24,0x24,0xFC, // Symbol 71
0x00,0x7C,0x08,0x04,0x04,0x08, // Symbol 72
0x00,0x48,0x54,0x54,0x54,0x20, // Symbol 73
0x00,0x08,0x3E,0x48,0x40,0x00, // Symbol 74
0x00,0x3C,0x40,0x40,0x40,0x3C, // Symbol 75
0x00,0x1C,0x20,0x40,0x20,0x1C, // Symbol 76
0x00,0x3C,0x40,0x30,0x40,0x3C, // Symbol 77
0x00,0x44,0x28,0x10,0x28,0x44, // Symbol 78
0x00,0x1C,0x20,0xA0,0xA0,0x7C, // Symbol 79
0x00,0x44,0x64,0x54,0x4C,0x44, // Symbol 7A
0x00,0x08,0x36,0x41,0x00,0x00, // Symbol 7B
0x00,0x00,0x00,0x7F,0x00,0x00, // Symbol 7C
0x00,0x00,0x41,0x36,0x08,0x00, // Symbol 7D
0x02,0x01,0x01,0x02,0x02,0x01, // Symbol 7E
0x00,0x7F,0x7F,0x7F,0x7F,0x7F}; // Symbol 7F
__flash char text0[]= "SONIK 2012";
__flash char text1[]= "Nikityan";
__flash char text2[]= "176x132 pixels, 16 bit mode";
void c75_alps_cmd(char cmd)
{
PORTB&=~(1<<RS); // RS=0
SPDR=cmd;
__delay_cycles(16+4);
}
void c75_alps_data16(char data_h, char data_l)
{
PORTB|=(1<<RS); // RS=1
SPDR=data_h;
__delay_cycles(16+4);
SPDR=data_l;
__delay_cycles(16+4);
}
void c75_alps_init(void)
{
__delay_cycles(F_CPU*0.1);// delay 100ms
PORTB|=(1<<RST); //Release Reset
__delay_cycles(F_CPU*0.057);// delay 57ms
PORTB&=~(1<<CS); // CS=0, chip selsect
c75_alps_cmd(0x00);
c75_alps_data16(0x00,0x01);
c75_alps_cmd(0x10);
c75_alps_data16(0x1F,0x92);
c75_alps_cmd(0x11);
c75_alps_data16(0x00,0x14);
c75_alps_cmd(0x00);
c75_alps_data16(0x00,0x01);
c75_alps_cmd(0x10);
c75_alps_data16(0x1F,0x92);
c75_alps_cmd(0x11);
c75_alps_data16(0x00,0x1C);
c75_alps_cmd(0x28);
c75_alps_data16(0x00,0x06);
c75_alps_cmd(0x02);
c75_alps_data16(0x00,0x00);
c75_alps_cmd(0x12);
c75_alps_data16(0x04,0x0F);
c75_alps_cmd(0x22);
for (int j=0; j<(132*176);j++) {c75_alps_data16(0x00,0x00);}//black
c75_alps_cmd(0x03);//Set Entry Mode
c75_alps_data16(0x78,0x30);
c75_alps_cmd(0x01);
c75_alps_data16(0x31,0xAF);//strange must be FF?
c75_alps_cmd(0x07);
c75_alps_data16(0x00,0x33);
PORTB|=(1<<CS); // CS=1 chip deselect
}
void c75_alps_put_char16(char x, char y, char symbol, int color, int bkcolor)
{
c75_alps_cmd(0x44);//Y range
c75_alps_data16(y+7,y);//Y2,Y1
c75_alps_cmd(0x47);//X range
c75_alps_data16(x+5,x);//X2,X1
c75_alps_cmd(0x21);//coordinates
c75_alps_data16(x,y);//X, Y
c75_alps_cmd(0x22);
int offset=6*(symbol-0x20);
for (char i=0;i<6;i++)
{
for (char j=0;j<8;j++) {if (((font6x8[offset+i]<<j)&0x80)==0x80) {c75_alps_data16(color>>8,color);} else {c75_alps_data16(bkcolor>>8,bkcolor);}}
}
}
void c75_alps_put_string16(char x, char y, char __flash * text, int color, int bkcolor)
{
char i=0;
char x0=0;
while (text!=0)
{
c75_alps_put_char16(x+x0,y,text, color , bkcolor);
i++;
x0+=6;
}
}
void c75_alps_rect(char x1, char y1, char x2, char y2, int color)
{
c75_alps_cmd(0x44);//Y range
c75_alps_data16(y2,y1);//Y2,Y1
c75_alps_cmd(0x47);//X range
c75_alps_data16(x2,x1);//X2,X1
c75_alps_cmd(0x21);//coordinates
c75_alps_data16(x1,y1);//X, Y
c75_alps_cmd(0x22);
for (int i=(y2-y1+1)*(x2-x1+1);i>0;i--) c75_alps_data16(color>>8,color);
}
void main( void )
{
DDRB=0xFF; //PortB is output
PORTB=(1<<CS)|(1<<RS);
SPCR=(1<<MSTR)|(1<<SPE);//SPI Interface
SPSR=1;
c75_alps_init();
PORTB&=~(1<<CS); // CS=0, chip selsect
c75_alps_put_string16(32,120,text0, white, black);
c75_alps_put_string16(4+3,120-10,text2, cyan, black);
c75_alps_rect(0,22,175,65,gray);//gray box
c75_alps_rect(10,34,165,54,white);
c75_alps_rect(12,36,163,52,red);
c75_alps_put_string16(22,40,text1, white, red);
for (char i=0;i<8;i++)//draw color bars
{
c75_alps_rect(i*22,0,i*22+21,21,colorbars);
}
for (char i=0;i<16;i++)//draw gradients
{
c75_alps_rect(i*11,66,i*11+10,75,i*2);//blue
c75_alps_rect(i*11,76,i*11+10,85,(i<<6)*2);//green
c75_alps_rect(i*11,86,i*11+10,95,(i<<11)*2);//red
}
PORTB|=(1<<CS); // CS=1 chip deselect
while(1)
{
}
}
Но здесь много лишнего. Что из этого кода достаточно взять для инициализации дисплея и вывода какой нибудь простенькой надписи? Я спрашиваю потому что когда я найду конкретный код для запуска, я смогу понять как он работает и как в него посылаются команды.