Beruflich Dokumente
Kultur Dokumente
h>
#include <avr/interrupt.h>
#include <util/delay_basic.h>
#define true 1
#define false 0
//Blinking system
Note:
n must be less than 9
*/
if(n<11)
{
switch (n)
{
case 0:
SEVEN_SEGMENT_PORT=0b00000011;
break;
case 1:
SEVEN_SEGMENT_PORT=0b10011111;
break;
case 2:
SEVEN_SEGMENT_PORT=0b00100101;
break;
case 3:
SEVEN_SEGMENT_PORT=0b00001101;
break;
case 4:
SEVEN_SEGMENT_PORT=0b10011001;
break;
case 5:
SEVEN_SEGMENT_PORT=0b01001001;
break;
case 6:
SEVEN_SEGMENT_PORT=0b01000001;
break;
case 7:
SEVEN_SEGMENT_PORT=0b00011111;
break;
case 8:
SEVEN_SEGMENT_PORT=0b00000001;
break;
case 9:
SEVEN_SEGMENT_PORT=0b00001001;
break;
case 10:
//A BLANK DISPLAY
SEVEN_SEGMENT_PORT=0b11111111;
break;
}
if(dp)
{
//if decimal point should be displayed
//make 0th bit Low
SEVEN_SEGMENT_PORT&=0b11111110;
}
}
else
{
//This symbol on display tells that n was greater than 10
//so display can't handle it
SEVEN_SEGMENT_PORT=0b11111101;
}
}
void Wait()
{
uint8_t i;
for(i=0;i<10;i++)
{
_delay_loop_2(0);
}
}
*/
uint8_t i=0;
uint8_t j;
if(num>9999) return;
while(num)
{
digits[i]=num%10;
i++;
num=num/10;
}
for(j=i;j<4;j++) digits[j]=0;
}
void main()
{
uint16_t i;
// Prescaler = FCPU/1024
TCCR0|=(1<<CS02);
TIMSK|=(1<<TOIE0);
//Initialize Counter
TCNT0=0;
PORTC=0b00001110;
//Port D
SEVEN_SEGMENT_DDR=0XFF;
sei();
Print(disp);
blink_display=false;
_delay_loop_2(0);
_delay_loop_2(0);
}
ISR(TIMER0_OVF_vect)
{
/*
*/
static uint8_t i=0;
if(i==3)
{
//If on last display then come
//back to first.
i=0;
}
else
{
//Goto Next display
i++;
}
PORTC=~(1<<i);
if(hide_display)
{
//Show a blank display
SevenSegment(10,0);
}
else
{
//Write the digit[i] in the ith display.
SevenSegment(digits[i],0);
}
//Handle blinking
if(!blink_display) return;
blink_counter++;
if(blink_counter == 16)
{
blink_counter =0;
hide_display=!hide_display;
}