#include <avr/io.h>
#include <avr/interrupt.h>
const unsigned char cifre[] = {
0x05,0xdd, 0x46, 0x54, 0x9c, 0x34, 0x24, 0x5d, 0x04, 0x14
};
unsigned char DISP_BAFER[4] ={0xff,0xff,0xff,cifre[0]};
const unsigned char minus = 0xfe;
unsigned char ukljuceno = 1;
volatile unsigned long ms = 0;
volatile unsigned char disp = 3;
volatile int number = 0;
ISR(TIMER0_COMPRA_vect){
if(++disp > 3)
disp = 0;
PORTB = ~(1 << (3-disp));
PORTD = DISP_BAFER[disp];
ms++;
}
ISR(PCINT1_vect)
{
switch((~PINC) & 0x0a)
{
case 0x02:
ukljuceno = 1;
number--;
break;
case 0x08:
ukljuceno = 0;
number++;
break;
}
}
int main(){
int pom1, pom2, mi=0,zero=0;
char i;
unsigned long t0;
DDRB = 0x0f;
DDRC = 0x00;
DDRD = 0xff;
PCICR = (1<<PCIE1);
PCMSK1 = 0x0a;
TCCR0A = 0x02;
TCCR0B = 0x03;
OCR0A = 249;
TIMSK0 = 0x02;
sei();
while(1) {
t0 = ms;
while((ms-t0)<100);
pom1 = number;
if(pom1<0){
pom1*= (-1);
for(i = 3; i > 0; i--){
pom2= pom1%10;
DISP_BAFER[i] = cifre[pom2];
pom1/=10;
if(pom2!=0){
mi = i;
zero =i-1;
}
}
DISP_BAFER[mi-1] = minus;
mi = 0;
for(i=0;i<zero;i++){
DISP_BAFER[i] = 0xff;
}
} else if(pom1!=0){
for(i = 3; i>= 0; i--){
pom2=pom1%10;
DISP_BAFER[i] = cifre[pom2];
pom1/=10;
if(pom2!=0){
zero = i;
}
}
for(i = 0; i<zero;i++){
DISP_BAFER[i] = 0xff;
}
} else{
DISP_BAFER[3] = cifre[0];
DISP_BAFER[2] = 0xff;
DISP_BAFER[1] = 0xff;
DISP_BAFER[0] = 0xff;
}
}
return 0;
}
This is no good as a tutorial,if you don’t explain what it’s meant to do…!
#include <avr/io.h>
#include <avr/interrupt.h>
const unsigned char cifre[] = {
0x05,0xdd, 0x46, 0x54, 0x9c, 0x34, 0x24, 0x5d, 0x04, 0x14
};
unsigned char DISP_BAFER[4] ={0xff,0xff,0xff,cifre[0]};
const unsigned char minus = 0xfe;
unsigned char ukljuceno = 1;
volatile unsigned long ms = 0;
volatile unsigned char disp = 3;
volatile int number = 0;
ISR(TIMER0_COMPRA_vect){
if(++disp > 3)
disp = 0;
PORTB = ~(1 << (3-disp));
PORTD = DISP_BAFER[disp];
ms++;
}
ISR(PCINT1_vect)
{
switch((~PINC) & 0x0a)
{
case 0x02:
ukljuceno = 1;
number--;
break;
case 0x08:
ukljuceno = 0;
number++;
break;
}
}
int main(){
int pom1, pom2, mi=0,zero=0;
char i;
unsigned long t0;
DDRB = 0x0f;
DDRC = 0x00;
DDRD = 0xff;
PCICR = (1<<PCIE1);
PCMSK1 = 0x0a;
TCCR0A = 0x02;
TCCR0B = 0x03;
OCR0A = 249;
TIMSK0 = 0x02;
sei();
while(1) {
t0 = ms;
while((ms-t0)<100);
pom1 = number;
if(pom1<0){
pom1*= (-1);
for(i = 3; i > 0; i--){
pom2= pom1%10;
DISP_BAFER[i] = cifre[pom2];
pom1/=10;
if(pom2!=0){
mi = i;
zero =i-1;
}
}
DISP_BAFER[mi-1] = minus;
mi = 0;
for(i=0;i<zero;i++){
DISP_BAFER[i] = 0xff;
}
} else if(pom1!=0){
for(i = 3; i>= 0; i--){
pom2=pom1%10;
DISP_BAFER[i] = cifre[pom2];
pom1/=10;
if(pom2!=0){
zero = i;
}
}
for(i = 0; i<zero;i++){
DISP_BAFER[i] = 0xff;
}
} else{
DISP_BAFER[3] = cifre[0];
DISP_BAFER[2] = 0xff;
DISP_BAFER[1] = 0xff;
DISP_BAFER[0] = 0xff;
}
}
return 0;
}
@kiseli99 I suggest that you change the title of the topic to English if you want help in the English section of the forum
J-M-L
January 11, 2022, 9:48am
5
please edit your post, select the code part and press the </> icon in the tool bar to mark it as code. (also make sure you indented the code in the IDE before copying, that's done by pressing ctrl T on a PC or cmd T on a Mac)
a bit of information would go a long way and if you have a question then write it up... (please use English on the English forums)