.С неделю назад пришли мне с Китая аш 10 дисплеев JLX12864G-109 ver-2 на контроллере ST7565.
Думал будет просто запустить но нет уже вожусь пять дней но эффекта ноль.
Все делаю по даташу там есть пример кода, но не фига не работает
По пунктам мои действие.
1 Напряжение питания 3.3 в
2 Шина данных 5 в(прямо с порта мк serial).
3 Пробовал подключать регулятор контрастности внешний делитель на V0(не какого эффекта).
Код: Выделить всё
#define L_PORT PORTA
#define L_DDR DDRA
#define L_PIN PINA
#define L_CS 4
#define L_RESET 3
#define L_RS 2
#define L_SCL 1
#define L_SID 0
void TransferCom(uint8_t com)
{
uint8_t i;
L_PORT&=~(1<<L_CS);
L_PORT&=~(1<<L_RS);
for(i=0;i<8;i++)
{
//L_PORT&=~(1<<L_SCL);
if(com & 0x80)
L_PORT|=(1<<L_SID);
else
L_PORT&=~(1<<L_SID);
L_PORT&=~(1<<L_SCL);
delay_us(1);
L_PORT|=(1<<L_SCL);
delay_us(1);
com=com<<=1;
}
L_PORT=(1<<L_CS);
}
void TransferData(uint8_t data)
{
uint8_t i;
L_PORT&=~(1<<L_CS);
L_PORT|=(1<<L_RS);
for(i=0;i<8;i++)
{
//L_PORT&=~(1<<L_SCL);
if(data&0x80)
L_PORT|=(1<<L_SID);
else
L_PORT&=~(1<<L_SID);
L_PORT&=~(1<<L_SCL);
delay_us(1);
L_PORT|=(1<<L_SCL);
delay_us(1);
data=data<<=1;
}
L_PORT|=(1<<L_CS);
}
void LCD_Init()
{
L_DDR|=(1<<L_CS)|(1<<L_RS)|(1<<L_SCL)|(1<<L_SID)|(1<<L_RESET);
// L_PORT&=~(1<<L_CS)|(1<<L_RS)|(1<<L_SCL)|(1<<L_SID)|(1<<L_RESET);
L_PORT&=~(1<<L_CS)|(1<<L_RESET);
delay_ms(50);
L_PORT|=(1<<L_RESET);
TransferCom(0xe2); /*(14)Reset*/
delay_us(100);
TransferCom(0x2c); /*(19)static indicator on/off static indicator rehister set*/
delay_us(100);
TransferCom(0x2e); /*(13)End*/
delay_us(100);
TransferCom(0x2f); /*???*/
delay_us(100);
TransferCom(0x23);
TransferCom(0x81); /*Точная настойка контрасности*/
TransferCom(0x1f); /*Точная настройка контрастности значение может быть установлено в диапазоне 0x00 ~ 0x3f*/
TransferCom(0xa2); /*1/9 отношение сдвига (смещения)*/
TransferCom(0xc8); /*Линия сканирования последовательности: сверху вниз*/
TransferCom(0xa0); /*Колонка сканирования порядке: слева направо*/
TransferCom(0x60); /*Линия старта: начало первой строки*/
TransferCom(0xaf); /*Отображение дисплея*/
}
void LCD_Wtite(char* c)
{
int i,j;
for(i=0;i<8;i++)
{
TransferCom(0xb0+i); //set page address,
TransferCom(0x10);
TransferCom(0x00);
for(j=0;j<128;j++)
{
TransferData(*c);
c++;
}
}
}
void LCD_Clear()
{
unsigned char i,j;
for(i=0;i<9;i++)
{
L_PORT&=~(1<<L_CS);
TransferCom(0xb0+i);
TransferCom(0x10);
TransferCom(0x00);
for(j=0;j<132;j++)
{
TransferData(0x00);
}
}
}