Re: управление драйвером жк lc75823
no
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Примеры кода → управление драйвером жк lc75823
no
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b1010);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 7; i >= 0; i--){
digitalWrite(CL,LOW);
digitalWrite(DI, (addr >> i) & 1);
digitalWrite(CL,HIGH);
}
digitalWrite(CL,LOW);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);
digitalWrite(DI, (1 >> i) & 1);
digitalWrite(CL,HIGH);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);
digitalWrite(DI, (contr >> i) & 1);
digitalWrite(CL,HIGH);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
нет
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b1010);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 7; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (addr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (1 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (contr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
нет, может попробовать на основе скетча Jose Luis Monteiro
Давайте еще сделаем пару попыток
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b1110);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 7; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (addr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (1 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (contr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
По коду все вроде верно, но пока не понятно, почему не работает
не работает
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b1110);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 0; i <= 7; i++){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (addr >> i) & 1);
//Serial.print((addr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (1 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (contr >> i) & 1);
// Serial.print((contr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
могу обрадовать, оно ожило, все сигменты стрёрлись
и прямо так стёрлись, что раньше под углом можно было разглядеть какие цифры где стоят, а сейчас прямо чистый, черный дисплей
Тогда вместо 1 на все сегменты пошлем 0
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b1110);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 0; i <= 7; i++){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (addr >> i) & 1);
//Serial.print((addr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (0 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (contr >> i) & 1);
// Serial.print((contr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
Или так
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b1010);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 0; i <= 7; i++){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (addr >> i) & 1);
//Serial.print((addr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (1 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (contr >> i) & 1);
// Serial.print((contr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
по прежнему, сегменты не появляются, а исчезают
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b1000);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 0; i <= 7; i++){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (addr >> i) & 1);
//Serial.print((addr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (0 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (contr >> i) & 1);
// Serial.print((contr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
опять стирает
Еще попробуйте так
write_byte(0x41, 0b0000);
теперь где располагаются сегменты видно, но ни один не загорелся
#define CE 9
#define CL 8
#define DI 7
int w;
void setup() {
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(200);
write_byte(0x41, 0b0000);
}
void loop() {
// put your main code here, to run repeatedly:
}
void write_byte(byte addr, byte contr){
/// addr 8 bit
digitalWrite(CE,LOW);
for(int i = 0; i <= 7; i++){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (addr >> i) & 1);
//Serial.print((addr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(CE,HIGH);
// data 156 bit
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (1 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
// control data 4 bit
for(int i = 3; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (contr >> i) & 1);
// Serial.print((contr >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
delay(10);
}
загорелась левая
Все верно, должен гореть только первые 16 сегментов и последний
отлично, уже есть успехи. нужно я так полагаю сделать что то похожее на шрифт
Эти строки определяют какой сегмент должен гореть какой нет
for(int i = 155; i >= 0; i--){
digitalWrite(CL,LOW);delayMicroseconds(10);
digitalWrite(DI, (1 >> i) & 1);
Serial.print((1 >> i) & 1);
digitalWrite(CL,HIGH);delayMicroseconds(10);
}
Нужно разделить весь индикатор на разряды, знать какие биты за какие сегменты отвечают
я уже определил вчера какой 156 биты за какой сегмент отвечают
а в какой именно строчке указывать какой сегмент должен гореть какой нет
forum.rcl-radio.ru → Примеры кода → управление драйвером жк lc75823
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|