Страница 1 из 1

LCD WM-1611-62c

Добавлено: Вс авг 17, 2008 15:55:54
gri
Написал программу:
program tes16f628a;

var
i,j,k:byte;
d:word;

procedure LCD1611cv110(x,d:byte);

begin
SetBit(PORTB,7);
ClearBit(PORTB,6);
if x=0 then x:=10;
for j:=1 to 10 do
for i:=3 downto 0 do
begin
VDelay_ms(5*d);
if TestBit(x,i)=1 then SetBit(PORTB,6);
VDelay_ms(1*d);
ClearBit(PORTB,7);
VDelay_ms(2*d);
SetBit(PORTB,7);
ClearBit(PORTB,6)
end;
{ClearBit(PORTB,7)}
end;


begin
CMCON:=7;
TRISA:=$10;
PORTA:=$F;

TRISB:=$3F;
PORTB:=$00;

for i:=0 to 16 do
begin
PORTA:=i;
d:=200+10*i;
VDelay_ms(d);
end ;
k:=0;
LCD1611cv110(k,10);
repeat
if TestBit(PORTA,4)=0 then
begin
k:=k+1;
LCD1611cv110(k,10);
end;
until false;

end.
Для этой маленькой дешевенько радости))) Есть два бага. Для указанных в даташите временных промежутков последовательного интерфейса обмена микроконтроллера с дисплеем ничего не работает. Питаю все хозяйство 20 см шлейфом - может длинно? Увеличил задержки в 10 раз - все работает но 10 цифр долго загоняются. Это в принципе ерунда, может удастся с коротким шлейфом.
Основаная запарка - это то то через несколько секунд этот шалопай переходит в режим часов. В даташите написано After all the data sent to the HT1611c, the _SC pin is set to avoid switching to the timer mode. Я оставлял его и так и сяк а он все равно свитчинг и хоть шо ты хочешь с ним делай :cry:

Добавлено: Вс авг 17, 2008 22:42:22
gri
Думал обезжучивание на этот раз затянется на всегда а оказалось....
Вот правильный текст программы:
program tes16f628a;
var
i,j,k:byte;
d:word;

procedure LCD1611cv110(x:byte);

begin {7 нога PORTB - CLOCK}
{6 нога PORTB - Data}
SetBit(PORTB,7);
ClearBit(PORTB,6);
if x=0 then x:=10;
for j:=1 to 10 do
begin
VDelay_ms(10); {Возможно понадобится коррекция задержек}
for i:=3 downto 0 do
begin
SetBit(PORTB,7);
if TestBit(x,i)=1 then SetBit(PORTB,6)
else ClearBit(PORTB,6);
VDelay_ms(10);
ClearBit(PORTB,7);
VDelay_ms(10);
end
end;
end;


begin
CMCON:=7;
TRISA:=$10;
PORTA:=$F;

TRISB:=$3F;
PORTB:=$00;

for i:=0 to 16 do
begin
PORTA:=i;
d:=200+10*i;
VDelay_ms(d);
end ;
k:=7;
for k:=15 downto 5 do
begin
VDelay_ms(2000);
LCD1611cv110(k);
end;
{ LCD1611cv110(k,1);
repeat
if TestBit(PORTA,4)=0 then
begin
k:=k+1;
LCD1611cv110(k,1);
end;
until false;}

end.

Добавлено: Ср авг 20, 2008 14:21:47
gri
К сожалению проблема не разрешена. НЕ могу разделить посылки. Получается шлю разряды последовательно (как бы в двоично десятично коде) но при посылке следующей цифры предыдущая просто сдвигается и получается абракадабра - можно ли вообще в таком экранчике както сбросить показания или нет или придется мудрить с программной чисткой. Оно и так не быстро обновляется а тут в два разы дольше придется се это делать. А еще эта мистика с переходом или не переходом в режим таймера. Неужели никто хотябы краем уха не слышал ничего про программирование для экранчиков таких - их ведь вроде на АОНы ставят часто?

Добавлено: Пт авг 22, 2008 10:28:34
gri
Вопрос снят - сам разобрался. Обращаемся за прогой, если кому надо. Только она на микропаскале. 800 слов.