Обсуждаем цифровые устройства...
Ответить

Управление жк через ht1621

Сб дек 09, 2023 17:14:20

Добрый день! имеется жк от приборной панели с драйвером ht1621b. я накидал скетч для определения адресов и битов сегментов, и на основе него зажег 2 цифры дисплея. Но возникло 2 вопроса как допустим эти цифры сделать не статичными цифры , а динамичными (допустим отсчет секунд ). И второй как объединить 2 цифры (адрес первой 29, второй 27)в одну. Что бы я мог одной командой выводить на него 2-ух значное число, допустим с датчика температуры или ч сего нибудь ещё.
Прошу помочь с кодом.

#define CS 13 //Pin 13 as chip selection output
#define WR 12 //Pin 12 as read clock output
#define DATA 8 //Pin 7 as Serial data output

#define CS1 digitalWrite(CS, HIGH)
#define CS0 digitalWrite(CS, LOW)
#define WR1 digitalWrite(WR, HIGH)
#define WR0 digitalWrite(WR, LOW)
#define DATA1 digitalWrite(DATA, HIGH)
#define DATA0 digitalWrite(DATA, LOW)


#define sbi(x, y) (x |= (1 << y))
#define cbi(x, y) (x &= ~(1 <<y ))
#define uchar unsigned char
#define uint unsigned int

//定义HT1621的命令
#define ComMode 0x52 //4COM,1/3bias 1000 010 1001 0
#define RCosc 0x30 //1000 0011 0000
#define LCD_on 0x06 //1000 0000 0 11 0
#define LCD_off 0x04
#define Sys_en 0x02 //1000 0000 0010
#define CTRl_cmd 0x80
#define Data_cmd 0xa0


/*0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,H,h,L,n,N,o,P,r,t,U,-, ,*/

const char num[]={B11110101,B01100000,B10110110,B11110010,B01100011,B11010011,B11010111,B01110000,B11110111,B11110011}; // биты чисел
// 0 1 2 3 4 5 6 7 8 9
char dispnum[6]={0x00,0x00,0x00,0x00,0x00,0x00};



void SendBit_1621(uchar sdata,uchar cnt)
{
//data cnt HT1621
uchar i;
for(i=0;i<cnt;i++)
{
WR0;
if(sdata&0x80) DATA1;
else DATA0;
WR1;
sdata<<=1;
}
}

void SendCmd_1621(uchar command)
{
CS0;
SendBit_1621(0x80,4);
SendBit_1621(command,8);
CS1;
}

void Write_1621(uchar addr,uchar sdata)
{
addr<<=2;
CS0;
SendBit_1621(0xa0,3);
SendBit_1621(addr,6);
SendBit_1621(sdata,8);
CS1;
}

void HT1621_all_off(uchar num)
{
uchar i;
uchar addr=0;
for(i=0;i<num;i++)
{
Write_1621(addr,0x00);
addr+=2;
}
}

void Init_1621(void)
{
SendCmd_1621(Sys_en);
SendCmd_1621(RCosc);
SendCmd_1621(ComMode);
SendCmd_1621(LCD_on);
}

void setup() {
pinMode(CS, OUTPUT); //
pinMode(WR, OUTPUT); //
pinMode(DATA, OUTPUT); //
CS1;
DATA1;
WR1;
delay(50);
Init_1621();
HT1621_all_off(16);
delay(1000);

}

void loop() {

Write_1621( 29,num[8]); // зажигаем левую цифру
Write_1621( 27,num[8]);// зажигаем правую цифру

}

Re: Управление жк через ht1621

Сб дек 09, 2023 18:06:54

Создаем массив "видео ОЗУ" в котором делаем всю предподготовку данных, а драйвер дисплея просто периодически выводит готовый комплект данных из videoram в контроллер дисплея.
8)
Один из старых тест-проектов с таким контроллером (правда дисплейчик там несколько другой, но принцип формирования символов и вывода одинаков будет)
sketch_oct11a.zip
(115.23 KiB) Скачиваний: 37

8)
Ответить