HT1621
- Войдите на сайт для отправки комментариев
Чт, 07/08/2014 - 19:54
Добрый день господа, есть такой дисплей : http://www.ebay.com/itm/Arduino-kit-SPI-16-Digital-7Seg-LCD-LED-Module-with-Arduino-UNO-MEGA2560-example/281346816442?_trksid=p5411.c100167.m2940&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20140131123730%26meid%3D8868288178118560637%26pid%3D100167%26prg%3D20140131123730%26rk%3D2%26rkt%3D15%26sd%3D231041707524
Не как не могу завести, качал библеотку, и на пример продаца тоже ругается...
Ну бегите за хорошим кофе и что бы гущи побольше. Будем на ней гадать куда вы тот дисплей подключали.
Init` ы все прописал
void setup()
{
pinMode(CS, OUTPUT); //Pin 2
pinMode(WR, OUTPUT); //Pin 3
pinMode(DATA, OUTPUT); //Pin 4
}
void loop()
{
Init_1621() ;
while(1)
{
//display 0 to 99999
for(t=0;t<99999;t++)
{
displaydata(t);
delay(100) ;
}
ругается на строчку : Init_1621() ;
Мдааа.
Итог: пациент глух и туп. В морг.
Спасибо конечно за ваше знание паталогоонатомических свойств, но мне интересно знать, почему даже с инклудной библеотекой все равно пишет ошибку
001
#include "HT1621.h"
002
003
#define DATA_PIN 2
004
#define WR_PIN 3
005
#define CS_PIN 4
006
007
008
HT1621 ht1621(DATA_PIN, WR_PIN, CS_PIN);
009
010
byte
pos;
byte
val;
011
012
//массив констант для отображения цифр, минуса и пробела:
013
byte
arr[18][3]={
014
{ 6,12, 6},
//0
015
{ 0, 0, 6},
//1
016
{ 2,14, 4},
//2
017
{ 0,14, 6},
//3
018
{ 4, 2, 6},
//4
019
{ 4,14, 2},
//5
020
{ 6,14, 2},
//6
021
{ 0, 4, 6},
//7
022
{ 6,14, 6},
//8
023
{ 4,14, 6},
//9
024
{ 6, 6, 6},
//A
025
{ 6,10, 2},
//b
026
{ 6,12, 0},
//C
027
{ 2,10, 6},
//d
028
{ 6,14, 0},
//E
029
{ 6, 6, 0},
//F
030
{ 0, 2, 0},
//-
031
{ 0, 0, 0}
//
032
};
033
//массив констант для отображения цифр с точкой:
034
byte
arr_point[10][3]={
035
{ 6,12, 14},
//0.
036
{ 0, 0, 14},
//1.
037
{ 2,14, 12},
//2.
038
{ 0,14, 14},
//3.
039
{ 4, 2, 14},
//4.
040
{ 4,14, 10},
//5.
041
{ 6,14, 10},
//6.
042
{ 0, 4, 14},
//7.
043
{ 6,14, 14},
//8.
044
{ 4,14, 14}
//9.
045
};
046
//создаём новую функцию для отображения по шаблону "позиция-цифра":
047
void
writeDigit(
byte
pos,
byte
val){
048
for
(
byte
i = 0; i < 3; i++)
049
ht1621.writeMem(3*pos+5+i, arr[val][i]);
050
}
051
//а эта для отображения цифры с точкой:
052
void
writeDigitPoint(
byte
pos,
byte
val){
053
for
(
byte
i = 0; i < 3; i++)
054
ht1621.writeMem(3*pos+5+i, arr_point[val][i]);
055
}
056
057
void
setup
(){
058
pinMode(DATA_PIN, OUTPUT);
059
pinMode(WR_PIN, OUTPUT);
060
pinMode(CS_PIN, OUTPUT);
061
062
Serial
.begin(9600);
063
if
(! ht1621.begin()) {
064
Serial
.println(
"Could not init device!\n"
);
065
}
066
}
067
068
/**********************************************************************/
069
//эта короткая программка получает с аналогового входа 0 4-значное число
070
//от 0 до 1023 и отображает его в первых 4-х разрядах:
071
void
loop
()
072
{
073
int
AI0=analogRead(0);
074
for
(
byte
i=4; i>0; i--) {
075
writeDigit(i, AI0%10); AI0=(AI0-AI0%10)/10;
076
}
077
delay (100);
078
}
079
080
/******************************************************************/
081
//прикольная программка - как в американских боевиках "подбор кода":
082
//раскомментируйте, кому интересно (не забыв закомментировать LOOP, который выше)
083
/*
084
void loop()
085
{
086
pos = random(9);
087
val = random(10);
088
writeDigit(pos, val);
089
delay(pos*val+50);
090
}
091
*/
092
//или вот так:
093
/*
094
void loop()
095
{
096
for (byte pos = 1; pos <= 8; pos++) {
097
val = random(10);
098
writeDigit(pos, val);}
099
delay(100);
100
}
101
*/
На такой код пишет ошибку в строке :HT1621 ht1621(DATA_PIN, WR_PIN, CS_PIN);
Давайте вы включите то место которое у вас еду принимает.
В заголовке обещают модуль который работает по SPI.
Это такая железная хрень. Которую нельзя назначить на те пины которын у вас чешутся.
Так же у вас есть наименование контролера и ни что не мешает ваизаглянуть в его даташит и узнать как же он на самом деле работает.
збс, чотко и кратко)))))))))))))))
Вы забежали вперед. Потерпите чуток.
Пока еще скомпилится не получается....
До "залил и ничего не показывает. что это может быть?" еще не дошли. А может повезет и SPI окажется именно на этих пинах. А может библиотека делает совтверный SPI, а может......
Блуждающий софтварный spi. Угадай на каких он пинах сегодня. Прям новая игра на ардуине.
001
#define sbi(x, y) (x |= (1 << y)) /*set Register x of y*/
002
#define cbi(x, y) (x &= ~(1 <<y )) /*Clear Register x of y*/
003
#define uchar unsigned char
004
#define uint unsigned int
005
//Defined HT1621's command
006
#define ComMode 0x52 //4COM,1/3bias 1000 010 1001 0
007
#define RCosc 0x30 //on-chip RC oscillator(Power-on default)1000 0011 0000
008
#define LCD_on 0x06 //Turn on LCD
009
#define LCD_off 0x04 //Turn off LCD
010
#define Sys_en 0x02 //Turn on system oscillator 1000 0000 0010
011
#define CTRl_cmd 0x80 //Write control cmd
012
#define Data_cmd 0xa0 //Write data cmd
013
014
// //Define port HT1621 data port
015
#define CS 2 //Pin 2 as chip selection output
016
#define WR 3 //Pin 3 as read clock output
017
#define DATA 4 //Pin 4 as Serial data output
018
019
#define CS1 digitalWrite(CS, HIGH)
020
#define CS0 digitalWrite(CS, LOW)
021
#define WR1 digitalWrite(WR, HIGH)
022
#define WR0 digitalWrite(WR, LOW)
023
#define DATA1 digitalWrite(DATA, HIGH)
024
#define DATA0 digitalWrite(DATA, LOW)
025
026
027
char
dispnum[6]={0x00,0x00,0x00,0x00,0x00,0x00};
028
029
/*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,-, ,*/
030
//const char num[]={0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x4F,0x1D,0x0E,0x6E,0x1F,0x17,0x67,0x47,0x0D,0x46,0x75,0x37,0x06,0x0F,0x6D,0x02,0x00,};
031
const
char
num[]={0xD7,0x50,0xE3,0xF1,0x74,0xB5,0xB7,0xD0,0xF7,0xF5,0xF6,0x37,0x87,0X23,0X73,0XA7,0XA6,0X76,0X36,0X07,0XD6,0XE6,0X22,0X27,0X57,0X20,0x00,};
032
/**-------------------------------------------------------------------------
033
034
Name: SendBit_1621(send data)
035
---------------------------------------------------------------------------*/
036
037
void
SendBit_1621(uchar sdata,uchar cnt)
//High bit first
038
{
039
uchar i;
040
for
(i=0;i<cnt;i++)
041
{
042
WR0;
043
delayMicroseconds(20);
044
if
(sdata&0x80) DATA1;
045
else
DATA0;
046
delayMicroseconds(20);
047
WR1;
048
delayMicroseconds(20);
049
sdata<<=1;
050
051
}
052
delayMicroseconds(20);
053
}
054
055
056
/**-------------------------------------------------------------------------
057
058
Name: SendCmd(send cmd)
059
//Write MODE“100” AND 9 bits command
060
---------------------------------------------------------------------------*/
061
062
void
SendCmd_1621(uchar command)
063
{
064
CS0;
065
SendBit_1621(0x80,4);
066
SendBit_1621(command,8);
067
CS1;
068
}
069
/**-------------------------------------------------------------------------
070
071
Name: Write_1621send data and cmd)
072
---------------------------------------------------------------------------*/
073
074
void
Write_1621(uchar addr,uchar sdata)
075
{
076
addr<<=3;
077
CS0;
078
SendBit_1621(0xa0,3);
//Write MODE“101”
079
SendBit_1621(addr,6);
//Write addr high 6 bits
080
SendBit_1621(sdata,8);
//Write data 8 bits
081
CS1;
082
}
083
/**-------------------------------------------------------------------------
084
085
Name: all_off(Clear Display)
086
---------------------------------------------------------------------------*/
087
088
void
HT1621_all_off(uchar num)
089
{ uchar i;
090
uchar addr=0;
091
for
(i=0;i<num;i++)
092
{
093
Write_1621(addr,0x00);
094
addr+=1;
095
}
096
}
097
/****************************************************************************
098
099
Name: all_on(All lit)
100
****************************************************************************/
101
102
void
HT1621_all_on(uchar num)
103
{ uchar i,j;
104
uchar addr=0;
105
for
(i=0;i<num;i++)
106
{ Write_1621(addr,0xff);
107
addr+=1;
108
}
109
}
/****************************************************************************
110
111
Name: all_on_num(All lit,Display the same number)
112
****************************************************************************/
113
114
void
HT1621_all_on_num(uchar num,uchar xx)
115
{ uchar i,j;
116
uchar addr=0;
117
for
(i=0;i<num;i++)
118
{ Write_1621(addr,xx);
119
addr+=1;
120
}
121
}
122
123
/****************************************************************************
124
125
Name: Init_1621(initialize 1621)
126
*****************************************************************************/
127
128
void
Init_1621(
void
)
129
{
130
SendCmd_1621(Sys_en);
131
SendCmd_1621(RCosc);
132
SendCmd_1621(ComMode);
133
SendCmd_1621(LCD_on);
134
}
135
/****************************************************************************
136
137
Name: LCDoff(off 1621)
138
*****************************************************************************/
139
140
void
LCDoff(
void
)
141
{
142
SendCmd_1621(LCD_off);
143
}
144
/****************************************************************************
145
146
Name: LCDon(on 1621)
147
*****************************************************************************/
148
149
void
LCDon(
void
)
150
{
151
SendCmd_1621(LCD_on);
152
}
153
154
155
void
displayallnum(unsigned
int
n)
//Display all digital characters
156
{uchar i,j;
157
uchar addr=0;
158
159
for
(i=0;i<n;i++)
160
{
for
(j=0;j<27;j++)
161
{
162
Write_1621(addr,num[j]); delay(100) ;
163
}
164
addr+=1;
165
}
166
167
}
168
169
170
//By-bit display 8 characters and decimal point
171
void
displayall8(
void
)
172
{uchar i;
173
HT1621_all_off(16);
174
for
(i=0;i<16;i++)
175
{
176
Write_1621(i,0b11110111);
177
delay(50) ;
178
}
179
}
180
181
//
182
183
/****************************************************************************
184
185
Name: displaydata(unsigned long int t) Display data
186
t : Data to be displayed
187
188
*****************************************************************************/
189
190
void
displaydata(unsigned
long
int
t)
191
{uchar i;
192
dispnum[5]=num[t/100000];
193
dispnum[4]=num[(t/10000)%10];
194
dispnum[3]=num[(t/1000)%10];
195
dispnum[2]=num[(t/100)%10];
196
dispnum[1]=num[(t/10)%10];
197
dispnum[0]=num[t%10];
198
199
200
for
(i=0;i < 6 ;i++)
201
{
202
Write_1621(i,dispnum[i]);
203
204
}
205
206
}
207
208
209
void
setup
()
210
{
211
pinMode(CS, OUTPUT);
//Pin 2
212
pinMode(WR, OUTPUT);
//Pin 3
213
pinMode(DATA, OUTPUT);
//Pin 4
214
215
}
216
217
218
void
loop
()
219
{
220
long
int
t=0;
221
uchar i,j;
222
delay(50) ;
223
Init_1621() ;
224
225
HT1621_all_on(16) ;
226
delay(300) ;
227
HT1621_all_off(16);
228
delay(300) ;
229
HT1621_all_on(16) ;
230
delay(300) ;
231
HT1621_all_off(16);
232
delay(300) ;
233
234
for
(i=0;i<27;i++)
235
{
236
HT1621_all_on_num(16,num[i]);
237
delay(200) ;
238
}
239
240
HT1621_all_off(16);
241
242
243
while
(1)
244
{
245
246
//display 0 to 999999
247
for
(t=0;t<999999;t++)
248
{
249
displaydata(t);
250
delay(100) ;
251
}
252
253
254
255
256
//displaydata : "0 1 2 3 4 5 6 7 8 9 A b"
257
//for(i=0;i < 16 ;i++)
258
//{
259
//Write_1621(i,num[i]);
260
261
//}
262
263
264
265
266
267
//displaybihua();
268
delay(1000);
269
270
271
}
272
273
}
Всем спасибо тестовый код найден
дабы не плодить темы
вопрос такой, имеем LCD 6 сегментный 7 разрядный
библиотека обычная <HT1621.h>
скетч из примера, подключил как прописано, запустился, но есть проблемы
изображение показывает перевернутое и зеркальное
вывод числа 2131 и индикатора заряда батареи
нормальный вид
с помощью "зеркала" и к верх ногами
ко всему прочему выводит только одну точку посередине (символ 1)
индикатор заряда батареи только либо "акб+одно нижнее деление" (символ 2)
и/или верхнее (символ 3)
01
#include <HT1621.h>
02
HT1621 LCD;
03
04
void
setup
(){
05
LCD.begin(11,10,13);
// инициализация модуля (WD,DATA,CS)
06
}
07
08
void
loop
(){
09
LCD.clrScr();
// очистка буфера LCD
10
11
LCD.print(2131, 0);
// создание числа (число, [начальная позиция], [система счисления], [длинна])
12
13
14
LCD.symbol(3,
true
);
// показать 2ой символ (№ символа, true/false)
15
16
LCD.update();
// вывод буфера на дисплей
17
}
подскажите в какую сторону смотреть?
два экрана абсолютно одинаково реагирует на это
из ситуации вышел заменой кода на вод этот без библиотеки
http://www.14core.com/wiring-the-6-digit-7-segment-2-4-inch-ht1621-lcd-display-module-on-microcontroller/
Кто нибудь сталкивался с таким дисплеем
Принесли целую кучу
Что можно на нем реализовать (часы, термометр)
а какого он размера?
у меня вот тут одна штука лежит

я пока никак не могу распиновать ее чтобы поменять экран
хотелось бы экран отсюда переставить туда, чтобы хоть как то работал, а то печально совсем

размер стекла?
да, запустить его пока не получается же, чтобы померить цифры)
78x32