Asagidaki programda MicroC de yazilmis sanirim.
#define UP Button(&PORTA,6,180,0)
#define DWN Button(&PORTA,7,180,0)
const char ledKod[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x67};
char basamak[4],sayac=0,digit=0;
const char tr[4]={1,2,4,8};
int sayi=0;
void basamakHesapla(int deger)
{
basamak[0]=ledKod[deger/1000];
basamak[1]=ledKod[(deger%1000)/100];
basamak[2]=ledKod[(deger%100)/10];
basamak[3]=ledKod[(deger%10)];
}
//----------Timer0---------------------------------------------------
//Prescaler 1:16; TMR0 Preload = 68; Actual Interrupt Time : 3,008 ms
void InitTimer0()
{
OPTION_REG = 0x83; // tarama süresi 3ms olarak ayarlandı
TMR0 = 68;
INTCON = 0xA0; // T0IE, GIE bitleri "1", T0IF biti "0"
}
void Interrupt()
{
if (INTCON.T0IF){
INTCON.T0IF = 0;
TMR0 = 68;
sayac++; // sayac'ı bir arttır (display sayısı için)
if(sayac==4) sayac=0; //dört display olduğu için 4 te sıfırlanıyor
PORTA=0;
PORTB=basamak[sayac];
PORTA=tr[sayac];
}
}
void kurulum()
{
CMCON=7;
TRISA=0xC0;
TRISB=0;
PORTA=0x0F;
PORTB=0xFF;
InitTimer0();
}
void main()
{
kurulum();
Delay_ms(1000); // test için 1 sn bütün segmentler aktif
basamakHesapla(sayi);
while(1)
{
if(UP)
{
sayi++;
basamakHesapla(sayi);
Delay_ms(200);
}
if(DWN)
{
sayi--;
basamakHesapla(sayi);
Delay_ms(200);
}
}
}