1

Тема: Индикатор 7 сегментов 4 разряда на двух 74HC595

Основная статья - http://rcl-radio.ru/?p=132380

Индикатор : DA56-11EWA - http://forum.rcl-radio.ru/uploads/images/2024/08/9d2185ea01fd3e2ce86a134bbc875151.pdf

http://forum.rcl-radio.ru/uploads/images/2024/08/b815b49a149d7eaacb84f1e4132a338b.png


/*              
                 Общий анод
--------------------------------------------------|                
Цифра|dp | G | F | E | D | C | B | A | Десятичный |
-----|---|---|---|---|---|---|---|---|------------|
  0  | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |    192     |
  1  | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |    249     |
  2  | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |    164     |
  3  | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |    176     |
  4  | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |    153     |
  5  | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |    146     |
  6  | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |    130     |
  7  | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |    248     |
  8  | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |    128     |
  9  | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |    144     |
 dp  | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |    127     |
-----*---*---*---*---*---*---*---*---*------------*
*/

#define RCLK 3
#define SCLK 4
#define DIO1 2
#define DIO2 6
 
byte razr[4] = {0b1110,0b1101,0b1011,0b0111};// 0123         
byte digit[13] = {192,249,164,176,153,146,130,248,128,144,127,255,191}; // 0 1 2 3 4 5 6 7 8 9 dp пусто -
int k;
byte a[4];
int i0,dp;
 
void setup(){
  Serial.begin(9600);
  noInterrupts();
  TCCR2B = 1 << CS22 | 1 << CS21;
  TIMSK2 = 1 << OCIE2A;
  OCR2A = 150;
  interrupts();
  pinMode(RCLK, OUTPUT);  // RCLK
  pinMode(SCLK, OUTPUT);  // SCLK
  pinMode(DIO1, OUTPUT);  // DIO1
  pinMode(DIO2, OUTPUT);  // DIO2
}

 
void loop(){
  k++;
  delay(100);
}

ISR(TIMER2_COMPA_vect) {
  a[0]=k/1000%10;
  a[1]=k/100%10;
  a[2]=k/10%10;
  a[3]=k%10;
 if(i0>3){i0=0;}
 if(i0==1){dp=0x80;}else{dp=0;}// i0=1 - запятая в 1 индикаторе (0123 === 01.23)
  digitalWrite(RCLK, LOW);
    for(int i1 = 7; i1 >=0; i1--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIO2, (razr[i0] >> i1) & 1); 
     digitalWrite(DIO1, ((digit[a[i0]]-dp) >> i1) & 1); 
     digitalWrite(SCLK,HIGH);
     } 
  digitalWrite(RCLK, HIGH);
  i0++;
} 

2

Re: Индикатор 7 сегментов 4 разряда на двух 74HC595

ds18b20

http://forum.rcl-radio.ru/uploads/images/2024/08/374c8b23b8feb1b70531a057bec9ed1d.png


#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip

OneWire  ds(7); // Вход датчика 18b20

#define RCLK 3
#define SCLK 4
#define DIO1 2
#define DIO2 6
 
byte razr[4] = {0b1110,0b1101,0b1011,0b0111};// 0123         
byte digit[14] = {192,249,164,176,153,146,130,248,128,144,127,255,191,0b11000110}; // 0 1 2 3 4 5 6 7 8 9 dp пусто - C
int k;
byte a[4];
int i0,dp;
 
void setup(){
  Serial.begin(9600);
  noInterrupts();
  TCCR2B = 1 << CS22 | 1 << CS21;
  TIMSK2 = 1 << OCIE2A;
  OCR2A = 150;
  interrupts();
  pinMode(RCLK, OUTPUT);  // RCLK
  pinMode(SCLK, OUTPUT);  // SCLK
  pinMode(DIO1, OUTPUT);  // DIO1
  pinMode(DIO2, OUTPUT);  // DIO2
}

 
void loop(){
  k=dsRead(0);
  delay(5000);
}

ISR(TIMER2_COMPA_vect) {
  a[0]=k/1000%10;
  a[1]=k/100%10;
  a[2]=k/10%10;
  a[3]=13;
 if(i0>3){i0=0;}
 if(i0==1){dp=0x80;}else{dp=0;}// i0=1 - запятая в 1 индикаторе (0123 === 01.23)
  digitalWrite(RCLK, LOW);
    for(int i1 = 7; i1 >=0; i1--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIO2, (razr[i0] >> i1) & 1); 
     digitalWrite(DIO1, ((digit[a[i0]]-dp) >> i1) & 1); 
     digitalWrite(SCLK,HIGH);
     } 
  digitalWrite(RCLK, HIGH);
  i0++;
} 

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) * 6.25; return (float)value; // Расчет температуры и вывод
}