- Dapatkan link
- X
- Aplikasi Lainnya
Contoh Low Cost Counter Sederhana 4 Digit 7 Segment
FEB 9
Rangkaian counter sederhana yg kita buat menggunakan komponen minimal sehingga bisa menghemat cost.
– 1 pcs board AVR
– 1 pcs 4 digit 7 segment
– 12 pcs female to female cable
7 segment yang saya gunakan adalah Common Catoda 4 segment untuk clock dengan konfigurasi pin dibawah ini
Data Konfigurasi kaki/pin 7 segment berguna untuk menghubungkan dengan pin pada port microcontroller sebagai berikut ini :
Kode program
/*****************************************************
Chip type : ATmega8535
Clock frequency : 11.059200 MHz
Clock frequency : 11.059200 MHz
*****************************************************/
#include <mega8535.h>
#include <delay.h>
#include <delay.h>
void kirimbyte7segment(unsigned char data,unsigned char digit);
void writeData(int dat);
void writeData(int dat);
int dataglobal=0;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
delay_ms(90);
// Place your code here
dataglobal=dataglobal +1;;
delay_ms(90);
}
{
delay_ms(90);
// Place your code here
dataglobal=dataglobal +1;;
delay_ms(90);
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
delay_ms(60);
// Place your code here
dataglobal=dataglobal -1;;
delay_ms(60);
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
writeData(dataglobal);
}
void writeData(int dat);
flash unsigned char text7segmentClock[]=
{ // dp-g-f-e-d-c-b-a
0b00111111, //0
0b10000110, / /1
0b01011011, //2
0b11001111, //3
0b01100110, //4
0b11101101, //5
0b01111101, //6
0b10000111, //7
0b01111111, //8
0b11101111, //9
0b00000000, // blank
0b01000000 // tanda minus
};
interrupt [EXT_INT1] void ext_int1_isr(void)
{
delay_ms(60);
// Place your code here
dataglobal=dataglobal -1;;
delay_ms(60);
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
writeData(dataglobal);
}
void writeData(int dat);
flash unsigned char text7segmentClock[]=
{ // dp-g-f-e-d-c-b-a
0b00111111, //0
0b10000110, / /1
0b01011011, //2
0b11001111, //3
0b01100110, //4
0b11101101, //5
0b01111101, //6
0b10000111, //7
0b01111111, //8
0b11101111, //9
0b00000000, // blank
0b01000000 // tanda minus
};
void main(void)
{
{
char i=0;
// Port A initialization
PORTA=0xff;
DDRA=0xff;
PORTA=0xff;
DDRA=0xff;
// Port B initialization
PORTB=0xff;
DDRB=0xff;
PORTB=0xff;
DDRB=0xff;
// Port C initialization
PORTC=0xff;
DDRC=0xff;
PORTC=0xff;
DDRC=0xff;
// Port D initialization
PORTD=0xff;
DDRD=0xff;
PORTD=0xff;
DDRD=0xff;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: On
// INT1 Mode: Low level
// INT2: Off
GICR|=0xC0;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0xC0;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0xC0;
// INT0: On
// INT0 Mode: Low level
// INT1: On
// INT1 Mode: Low level
// INT2: Off
GICR|=0xC0;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0xC0;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0xC0;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Global enable interrupts
#asm(“sei”)
TIMSK=0x01;
// Global enable interrupts
#asm(“sei”)
for(i=1;i<5;i++)
{
kirimbyte7segment(text7segmentClock[0],i);
delay_ms(100);
}
{
kirimbyte7segment(text7segmentClock[0],i);
delay_ms(100);
}
dataglobal=0;
while (1)
{
while (1)
{
};
}
}
void kirimbyte7segment(unsigned char data, char digit)
{
{
if(digit==1)
{
PORTA.0=0;
PORTA.1=1 ;
PORTA.2=1 ;
PORTA.3=1 ;
}
if(digit==2)
{
PORTA.0=1;
PORTA.1=0 ;
PORTA.2=1 ;
PORTA.3=1 ;
}
if(digit==3)
{
PORTA.0=1;
PORTA.1=1 ;
PORTA.2=0 ;
PORTA.3=1 ;
}
if(digit==4)
{
PORTA.0=1;
PORTA.1=1 ;
PORTA.2=1 ;
PORTA.3=0 ;
}
{
PORTA.0=0;
PORTA.1=1 ;
PORTA.2=1 ;
PORTA.3=1 ;
}
if(digit==2)
{
PORTA.0=1;
PORTA.1=0 ;
PORTA.2=1 ;
PORTA.3=1 ;
}
if(digit==3)
{
PORTA.0=1;
PORTA.1=1 ;
PORTA.2=0 ;
PORTA.3=1 ;
}
if(digit==4)
{
PORTA.0=1;
PORTA.1=1 ;
PORTA.2=1 ;
PORTA.3=0 ;
}
PORTC =data ;
delay_ms(5);
}
delay_ms(5);
}
void writeData(int dat) // dat max 4 digit
{
unsigned char j,sign=1;
unsigned char angka;
{
unsigned char j,sign=1;
unsigned char angka;
if(dat<0)
{
dat= dat * -1;
sign=0;
}
{
dat= dat * -1;
sign=0;
}
for(j=0;j<4;j++)
{
{
angka=dat%10;
dat /= 10; //6/10
dat /= 10; //6/10
if(angka==0)
{
if(dat==0)
{
if(sign==1)angka=10; // blank
{
if(dat==0)
{
if(sign==1)angka=10; // blank
if(sign==0)
{
angka=11; //tanda minus
sign=1;
}
}
}
kirimbyte7segment(text7segmentClock[angka], 4-j);
{
angka=11; //tanda minus
sign=1;
}
}
}
kirimbyte7segment(text7segmentClock[angka], 4-j);


Komentar
Posting Komentar