плисссс Коти помогите нет сил у меня уже к етому дисплею от 3310...(((( в протеусе пашет как и должно прошиваю МК а в реале даже ни одной точки на дисплее нет!! грешу на исходник посмотрите очень прошу Вас ..исходник писали под мегу8 у меня 16 ...почему не работает в реале?(((((( у вас качал на 5 странице под 16 мегу прект и прошивку шил тоже самое что и с моим исходником дисплей робочий 100% та как подключал к телу он пашет...
Код: Выделить всё
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
// Mega8 port B pinout for LCD.
#define LCD_DC_PIN PORTB.6 //D/C
#define LCD_CE_PIN PORTB.4 //SCE
#define SPI_MOSI_PIN PORTB.5 //SDIN
#define LCD_RST_PIN PORTB.0 //RES
#define SPI_CLK_PIN PORTB.7 //SCLK
//Настройки контроллера дисплея и перменные для работы с ним
unsigned char lcd_buf[14]; //текстовый буфер для вывода на LCD
unsigned char LcdCache [504]; //массив всех точек (504 оригинал 816 китай)
unsigned int LcdCacheIdx; //Cache index
#define LCD_CMD 0
#define LCD_DATA 1
//void LcdChrBold (int ch); Печатает символ на текущем месте, большой и жирный)
//void LcdStringBold (unsigned char x, unsigned char y);Печатает большую и жирную строку
//void LcdChrBig (int ch); Печатает символ на текущем месте, большой
//void LcdStringBig (unsigned char x, unsigned char y); Печатает большую строку
//ASCII
const char table[455]= //615
{
0x00, 0x00, 0x00, 0x00, 0x00,// 20 space
0x00, 0x00, 0x5F, 0x00, 0x00,// 21 !
0x00, 0x07, 0x00, 0x07, 0x00,// 22 "
0x14, 0x7F, 0x14, 0x7F, 0x14,// 23 #
0x24, 0x2A, 0x7F, 0x2A, 0x12,// 24 $
0x23, 0x13, 0x08, 0x64, 0x62,// 25 %
0x36, 0x49, 0x55, 0x22, 0x50,// 26 &
0x00, 0x05, 0x03, 0x00, 0x00,// 27 '
0x00, 0x1C, 0x22, 0x41, 0x00,// 28 (
0x00, 0x41, 0x22, 0x1C, 0x00,// 29 )
0x14, 0x08, 0x3E, 0x08, 0x14,// 2a *
0x08, 0x08, 0x3E, 0x08, 0x08,// 2b +
0x00, 0x50, 0x30, 0x00, 0x00,// 2c ,
0x08, 0x08, 0x08, 0x08, 0x08,// 2d -
0x00, 0x60, 0x60, 0x00, 0x00,// 2e .
0x20, 0x10, 0x08, 0x04, 0x02,// 2f /
0x3E, 0x51, 0x49, 0x45, 0x3E,// 30 0
0x00, 0x42, 0x7F, 0x40, 0x00,// 31 1
0x42, 0x61, 0x51, 0x49, 0x46,// 32 2
0x21, 0x41, 0x45, 0x4B, 0x31,// 33 3
0x18, 0x14, 0x12, 0x7F, 0x10,// 34 4
0x27, 0x45, 0x45, 0x45, 0x39,// 35 5
0x3C, 0x4A, 0x49, 0x49, 0x30,// 36 6
0x01, 0x71, 0x09, 0x05, 0x03,// 37 7
0x36, 0x49, 0x49, 0x49, 0x36,// 38 8
0x06, 0x49, 0x49, 0x29, 0x1E,// 39 9
0x00, 0x36, 0x36, 0x00, 0x00,// 3a :
0x00, 0x56, 0x36, 0x00, 0x00,// 3b ;
0x08, 0x14, 0x22, 0x41, 0x00,// 3c <
0x14, 0x14, 0x14, 0x14, 0x14,// 3d =
0x00, 0x41, 0x22, 0x14, 0x08,// 3e >
0x02, 0x01, 0x51, 0x09, 0x06,// 3f ?
0x32, 0x49, 0x79, 0x41, 0x3E,// 40 @
0x7E, 0x11, 0x11, 0x11, 0x7E,// 41 A
0x7F, 0x49, 0x49, 0x49, 0x36,// 42 B
0x3E, 0x41, 0x41, 0x41, 0x22,// 43 C
0x7F, 0x41, 0x41, 0x22, 0x1C,// 44 D
0x7F, 0x49, 0x49, 0x49, 0x41,// 45 E
0x7F, 0x09, 0x09, 0x09, 0x01,// 46 F
0x3E, 0x41, 0x49, 0x49, 0x7A,// 47 G
0x7F, 0x08, 0x08, 0x08, 0x7F,// 48 H
0x00, 0x41, 0x7F, 0x41, 0x00,// 49 I
0x20, 0x40, 0x41, 0x3F, 0x01,// 4a J
0x7F, 0x08, 0x14, 0x22, 0x41,// 4b K
0x7F, 0x40, 0x40, 0x40, 0x40,// 4c L
0x7F, 0x02, 0x0C, 0x02, 0x7F,// 4d M
0x7F, 0x04, 0x08, 0x10, 0x7F,// 4e N
0x3E, 0x41, 0x41, 0x41, 0x3E,// 4f O
0x7F, 0x09, 0x09, 0x09, 0x06,// 50 P
0x3E, 0x41, 0x51, 0x21, 0x5E,// 51 Q
0x7F, 0x09, 0x19, 0x29, 0x46,// 52 R
0x46, 0x49, 0x49, 0x49, 0x31,// 53 S
0x01, 0x01, 0x7F, 0x01, 0x01,// 54 T
0x3F, 0x40, 0x40, 0x40, 0x3F,// 55 U
0x1F, 0x20, 0x40, 0x20, 0x1F,// 56 V
0x3F, 0x40, 0x38, 0x40, 0x3F,// 57 W
0x63, 0x14, 0x08, 0x14, 0x63,// 58 X
0x07, 0x08, 0x70, 0x08, 0x07,// 59 Y
0x61, 0x51, 0x49, 0x45, 0x43,// 5a Z
0x00, 0x7F, 0x41, 0x41, 0x00,// 5b [
0x02, 0x04, 0x08, 0x10, 0x20,// 5c Yen Currency Sign
0x00, 0x41, 0x41, 0x7F, 0x00,// 5d ]
0x04, 0x02, 0x01, 0x02, 0x04,// 5e ^
0x40, 0x40, 0x40, 0x40, 0x40,// 5f _
0x00, 0x01, 0x02, 0x04, 0x00,// 60 `
0x20, 0x54, 0x54, 0x54, 0x78,// 61 a
0x7F, 0x48, 0x44, 0x44, 0x38,// 62 b
0x38, 0x44, 0x44, 0x44, 0x20,// 63 c
0x38, 0x44, 0x44, 0x48, 0x7F,// 64 d
0x38, 0x54, 0x54, 0x54, 0x18,// 65 e
0x08, 0x7E, 0x09, 0x01, 0x02,// 66 f
0x0C, 0x52, 0x52, 0x52, 0x3E,// 67 g
0x7F, 0x08, 0x04, 0x04, 0x78,// 68 h
0x00, 0x44, 0x7D, 0x40, 0x00,// 69 i
0x20, 0x40, 0x44, 0x3D, 0x00,// 6a j
0x7F, 0x10, 0x28, 0x44, 0x00,// 6b k
0x00, 0x41, 0x7F, 0x40, 0x00,// 6c l
0x7C, 0x04, 0x18, 0x04, 0x78,// 6d m
0x7C, 0x08, 0x04, 0x04, 0x78,// 6e n
0x38, 0x44, 0x44, 0x44, 0x38,// 6f o
0x7C, 0x14, 0x14, 0x14, 0x08,// 70 p
0x08, 0x14, 0x14, 0x18, 0x7C,// 71 q
0x7C, 0x08, 0x04, 0x04, 0x08,// 72 r
0x48, 0x54, 0x54, 0x54, 0x20,// 73 s
0x04, 0x3F, 0x44, 0x40, 0x20,// 74 t
0x3C, 0x40, 0x40, 0x20, 0x7C,// 75 u
0x1C, 0x20, 0x40, 0x20, 0x1C,// 76 v
0x3C, 0x40, 0x30, 0x40, 0x3C,// 77 w
0x44, 0x28, 0x10, 0x28, 0x44,// 78 x
0x0C, 0x50, 0x50, 0x50, 0x3C,// 79 y
0x44, 0x64, 0x54, 0x4C, 0x44};// 7a z
void LcdSend (unsigned char data, unsigned char cmd) //Sends data to display controller
{
LCD_CE_PIN = 0; //Enable display controller (active low)
if (cmd) //если команда, то
LCD_DC_PIN = 1; //LCD_DC_PIN = 1
else LCD_DC_PIN = 0; //SPI Data Register (SPDR)
SPDR = data; //Send data to display controller
while ( (SPSR & 0x80) != 0x80 ); //Wait until Tx register empty
LCD_CE_PIN = 1; //Disable display controller
}
void LcdUpdate (void) //Copies the LCD cache into the device RAM
{
int i;
LcdSend(0x80, LCD_CMD); //команды установки указателя памяти дисплея на 0,0
LcdSend(0x40, LCD_CMD);
for (i = 0; i < 504; i++) //грузим данные (504 оригинал или 816 китай)
{
LcdSend(LcdCache[i], LCD_DATA);
}
}
void LcdClear (void) //Clears the display
{
int i;
//(504 оригинал или 816 китай)
for (i = 0; i < 504; i++) LcdCache[i] = 0; //забиваем всю память 0
}
void LcdInit ( void ) //инициализация SPI и дисплея
{
LCD_RST_PIN = 1; //настроили порты ввода/вывода
delay_ms(50); //SPI Control Register – SPCR
SPCR = 0x50; //Enable SPI: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4
LCD_RST_PIN = 0; //дернули ресет
delay_ms(500);
LCD_RST_PIN = 1;
LCD_CE_PIN = 1; //Disable LCD controller
LcdSend( 0x21, LCD_CMD ); //LCD Extended Commands
LcdSend( 0x06, LCD_CMD ); //Set Temp coefficent
LcdSend( 0x13, LCD_CMD ); //LCD bias mode 1:48
LcdSend( 0xAA, LCD_CMD ); //Set LCD Vop (Contrast)0xC5 или 0xC8 - китай 0xAA - ориг.
LcdSend (0x20, LCD_CMD ); //Horizontal addressing mode.
LcdSend (0x0C, LCD_CMD ); //normal mode.
//LcdClear(); //лишняя после нее переходит на while (1)
}; //где снова очистка
//Sets cursor location to xy location. Range: 1,1 .. 14,6
void LcdGotoXYFont (unsigned char x, unsigned char y)
{
if (x <= 14 && y<= 6) LcdCacheIdx = ((int)(y)-1)*84 + ((int)(x)-1)*6;
}
void clean_lcd_buf (void) //очистка текстового буфера
{
char i;
for (i=0; i<14; i++) lcd_buf[i] = 0;
}
//Displays a bold character at current cursor location and increment cursor location
void LcdChrBold (int ch)
{
unsigned char i;
unsigned char a = 0, b = 0, c = 0;
for ( i = 0; i < 5; i++ )
{
c = table[((ch*5)-160+i)]; //выделяем столбец из символа
b = (c & 0x01) * 3; //"растягиваем" столбец на два байта
b |= (c & 0x02) * 6;
b |= (c & 0x04) * 12;
b |= (c & 0x08) * 24;
c >>= 4;
a = (c & 0x01) * 3;
a |= (c & 0x02) * 6;
a |= (c & 0x04) * 12;
a |= (c & 0x08) * 24;
LcdCache[LcdCacheIdx] = b; //копируем байты в экранный буфер
LcdCache[LcdCacheIdx+1] = b; //дублируем для получения жирного шрифта
LcdCache[LcdCacheIdx+84] = a;
LcdCache[LcdCacheIdx+85] = a;
LcdCacheIdx = LcdCacheIdx+2;
}
LcdCache[LcdCacheIdx++] = 0x00; //для пробела между символами
LcdCache[LcdCacheIdx++] = 0x00;
}
//Displays a string at current cursor location
void LcdStringBold (unsigned char x, unsigned char y)
{
unsigned char i;
LcdGotoXYFont (x, y);
for ( i = 0; i < 14-x; i++ ) if (lcd_buf[i]) LcdChrBold (lcd_buf[i]);
clean_lcd_buf();
}
void main(void)
{
DDRB=0b11110001; //PORTB.0, PORTB.2 - PORTB.5 на вых.
PORTB=0b11100000; //подтягивающие резисторы 1 вкл.
LcdInit();
LcdClear();
sprintf (lcd_buf, "I"); //вывод напряжения
LcdStringBold(4,3);
LcdUpdate();
}