Тема: Индикатор 7 сегментов 4 разряда на двух 74HC595
Основная статья - http://rcl-radio.ru/?p=132380
Индикатор : DA56-11EWA -
/*
Общий анод
--------------------------------------------------|
Цифра|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++;
}