Untitled
By: a guest | Mar 19th, 2010 | Syntax:
None | Size: 1.71 KB | Hits: 64 | Expires: Never
#include <avr/io.h>
#include <util/delay.h>
#define segA (1<<0)
#define segB (1<<1)
#define segC (1<<2)
#define segD (1<<3)
#define segE (1<<4)
#define segF (1<<5)
#define segG (1<<6)
#define segDP (1<<7)
#define d_1 (0 |segB |segC)
#define d_2 (0 |segA |segB |segD |segE |segG)
#define d_3 (0 |segA |segB |segC |segD |segG)
#define d_4 (0 |segB |segC |segF |segG)
#define d_5 (0 |segA |segC |segD |segF |segG)
#define d_6 (0 |segA |segC |segD |segE |segF |segG)
#define d_7 (0 |segA |segB |segC)
#define d_8 (0 |segA |segB |segC |segD |segE |segF |segG)
#define d_9 (0 |segA |segB |segC |segD |segF |segG)
#define d_0 (0 |segA |segB |segC |segD |segE |segF)
int bcd[] = {d_0,
d_1,
d_2,
d_3,
d_4,
d_5,
d_6,
d_7,
d_8,
d_9};
void calcDigits (int value, int *digitArray) {
for (int i = 0; i < 4; i++) {
if (value == 0) {
*(digitArray + i) = -1;
} else {
*(digitArray + i) = value % 10;
value /= 10;
}
}
}
int main (void){
DDRC = 0xFF;
DDRD = 0x0F;
PORTC = 0xFF;
PORTD = 0x00;
unsigned int loopsPerNumber = 8;
unsigned int usDelayPerLoop = 50;
int digits[4] = {0,0,0,0};
/*
int test[4] = {1,2,3,4};
while(1){
for (int k = 0; k < 4; k++){
PORTD = (1<<k);
PORTC = ~bcd[test[k]];
_delay_us(usDelayPerLoop);
PORTC = 0xFF;
}
}*/
while(1){
for (int i = 0; i < 10000; i++) {
calcDigits(i, digits);
for (int j = 0; j < loopsPerNumber; j++){
for (int k = 0; k < 4; k++){
PORTD = (1<<k);
int currentValue = digits[3-k];
if (currentValue >= 0) {
PORTC = ~bcd[currentValue];
}
_delay_us(usDelayPerLoop);
PORTC = 0xFF;
}
}
}
}
}