/*
Conta até 9
Incluir mais 1 display e contar ate 99
*/
#include "pico/stdlib.h"
/*
--A--
F B
--G--
E C
--D--
*/
/*
// unidade
int tabela_unidade[] = {
// FGEDCPBA
0b10111011, //0
0b00001010, //1
0b01110011, //2
0b01011011, //3
0b11001010, //4
0b11011001, //5
0b11111001, //6
0b00001011, //7
0b11111011, //8
0b11011011, //9
};
// dezena
int tabela_dezena[] = {
// FGEDCPBA
0b10111011, //0
0b00001010, //1
0b01110011, //2
0b01011011, //3
0b11001010, //4
0b11011001, //5
0b11111001, //6
0b00001011, //7
0b11111011, //8
0b11011011, //9
};
*/
//#define MASCARA_DIGITOS 0x3FC0
//#define MASCARA_DIGITOS 0X0000 | ((1<<A_PIN)|(1<<B_PIN)|(1<<C_PIN)|(1<<D_PIN)|(1<<E_PIN)|(1<<F_PIN)|(1<<G_PIN)|(DP_PIN))
//#define MASCARA_DIGITOS 0X0000 | ((1<<A2_PIN)|(1<<B2_PIN)|(1<<C2_PIN)|(1<<D2_PIN)|(1<<E2_PIN)|(1<<F2_PIN)|(1<<G2_PIN)|(DP2_PIN))
//unidade
#define A_PIN 6
#define B_PIN 7
#define C_PIN 9
#define D_PIN 10
#define E_PIN 11
#define F_PIN 13
#define G_PIN 12
#define DP_PIN 8 // ponto não utilizado
// dezena
#define A2_PIN 21
#define B2_PIN 22
#define C2_PIN 20
#define D2_PIN 19
#define E2_PIN 18
#define F2_PIN 17
#define G2_PIN 16
#define DP2_PIN 14 // ponto não utilizado
// variaveis de contagem
uint8_t p=0; // conta pinos do display 1
uint8_t p2=0; // pinos do display 2
uint8_t i=0; // unidades
uint8_t d=0; // dezenas
// pinos do display 1
uint8_t pinos[8] = { A_PIN,
B_PIN,
C_PIN,
D_PIN,
E_PIN,
F_PIN,
G_PIN,
DP_PIN};
// pinos do display 2
uint8_t pinos2[8] = { A2_PIN,
B2_PIN,
C2_PIN,
D2_PIN,
E2_PIN,
F2_PIN,
G2_PIN,
DP2_PIN};
void unidade ()
{
switch(i)
{
case 0:
for (p=0;p<8;p++){
if(p!=6 && p!=7){
gpio_put(pinos[p], 1); // DP e G
}
else{
gpio_put(pinos[p], 0);
}
}
break;
case 1:
for (p=0;p<8;p++){
if(p!=2 && p!=1){
gpio_put(pinos[p], 0); // C e B
}
else{
gpio_put(pinos[p], 1);
}
}
break;
case 2:
for (p=0;p<8;p++){
if(p!=2 && p!=5 && p!=7){ // C, F e DP
gpio_put(pinos[p], 1);
}
else{
gpio_put(pinos[p], 0);
}
}
break;
case 3:
for (p=0;p<8;p++){
if(p!=5 && p!=4 && p!=7){ // F, E e DP
gpio_put(pinos[p], 1);
}
else{
gpio_put(pinos[p], 0);
}
}
break;
case 4:
for (p=0;p<8;p++){
if(p!=1 && p!=2 && p!=5 && p!=6){ // B, C, F e G
gpio_put(pinos[p], 0);
}
else{
gpio_put(pinos[p], 1);
}
}
break;
case 5:
for (p=0;p<8;p++){
if(p!=1 && p!=4 && p!=7){ //B DP e E = 0
gpio_put(pinos[p], 1);
}
else{
gpio_put(pinos[p], 0);
}
}
break;
case 6:
for (p=0;p<8;p++){
if(p!=1 && p!=7){ //DP e B = 0
gpio_put(pinos[p], 1);
}
else{
gpio_put(pinos[p], 0);
}
}
break;
case 7:
for (p=0;p<8;p++){
if(p!=0 && p!=1 && p!=2 ){ //// C, B e A = 1
gpio_put(pinos[p], 0);
}
else{
gpio_put(pinos[p], 1);
}
}
break;
case 8:
for (p=0;p<8;p++){
if(p!=7 ){ //DP = 0
gpio_put(pinos[p], 1);
}
else{
gpio_put(pinos[p], 0);
}
}
break;
case 9:
for (p=0;p<8;p++){
if(p!=7 && p!=4 ){ // DP e E = 0
gpio_put(pinos[p], 1);
}
else{
gpio_put(pinos[p], 0);
}
}
break;
} // fecha switch
}
void dezena ()
{
switch(d)
{
case 0:
for (p2=0;p2<8;p2++){
if(p2!=6 && p2!=7){
gpio_put(pinos2[p2], 1); // DP e G
}
else{
gpio_put(pinos2[p2], 0);
}
}
break;
case 1:
for (p2=0;p2<8;p2++){
if(p2!=2 && p2!=1){
gpio_put(pinos2[p2], 0); // C e B
}
else{
gpio_put(pinos2[p2], 1);
}
}
break;
case 2:
for (p2=0;p2<8;p2++){
if(p2!=2 && p2!=5 && p2!=7){ // C, F e DP
gpio_put(pinos2[p2], 1);
}
else{
gpio_put(pinos2[p2], 0);
}
}
break;
case 3:
for (p2=0;p2<8;p2++){
if(p2!=5 && p2!=4 && p2!=7){ // F, E e DP
gpio_put(pinos2[p2], 1);
}
else{
gpio_put(pinos2[p2], 0);
}
}
break;
case 4:
for (p2=0;p2<8;p2++){
if(p2!=1 && p2!=2 && p2!=5 && p2!=6){ // B, C, F e G
gpio_put(pinos2[p2], 0);
}
else{
gpio_put(pinos2[p2], 1);
}
}
break;
case 5:
for (p2=0;p2<8;p2++){
if(p2!=1 && p2!=4 && p2!=7){ //B DP e E = 0
gpio_put(pinos2[p2], 1);
}
else{
gpio_put(pinos2[p2], 0);
}
}
break;
case 6:
for (p2=0;p2<8;p2++){
if(p2!=1 && p2!=7){ //DP e B = 0
gpio_put(pinos2[p2], 1);
}
else{
gpio_put(pinos2[p2], 0);
}
}
break;
case 7:
for (p2=0;p2<8;p2++){
if(p2!=0 && p2!=1 && p2!=2 ){ //// C, B e A = 1
gpio_put(pinos2[p2], 0);
}
else{
gpio_put(pinos2[p2], 1);
}
}
break;
case 8:
for (p2=0;p2<8;p2++){
if(p2!=7 ){ //DP = 0
gpio_put(pinos2[p2], 1);
}
else{
gpio_put(pinos2[p2], 0);
}
}
break;
case 9:
for (p2=0;p2<8;p2++){
if(p2!=7 && p2!=4 ){ // DP e E = 0
gpio_put(pinos2[p2], 1);
}
else{
gpio_put(pinos2[p2], 0);
}
}
break;
} // fecha switch
}
void setup()
{
for(p=0;p<8;p++) // pinos do display 1 (unidade)
{
gpio_init(pinos[p]); // habilita pino
gpio_set_dir(pinos[p], GPIO_OUT); // declara como output
}
for(p2=0;p2<8;p2++) // pinos do display 2 (dezena)
{
gpio_init(pinos2[p2]); // habilita pino
gpio_set_dir(pinos2[p2], GPIO_OUT); // declara como output
}
//loop
while(true){
// gpio_put_masked (MASCARA_DIGITOS, tabela_unidade[i]<<6); // portas e valores(H/L) 1° display
//gpio_put_masked (MASCARA_DIGITOS, tabela_dezena[d]<<6); // portas e valores(H/L) 2° display
unidade();
dezena();
i++; // conta 1 unidade
if(i>9) // até o 9
{
i=0; // volta a 0
d++; // conta 1 dezena
}
if(d>9) // até 90
{
d=0; // volta a 0
}
sleep_ms(300);
}
}
void loop() {}