muratmert4
Usta Üye
S.A
Sn. Arkadaşlar timer ile seven segment tarama programını paylaşıyorum. Program main kısmında devam ederken timer ile seven segment kendisi işlem yapıyor.
Sn. Arkadaşlar timer ile seven segment tarama programını paylaşıyorum. Program main kısmında devam ederken timer ile seven segment kendisi işlem yapıyor.
Kod:
#include <18F4520.h>
#fuses CCP2C1,INTRC_IO,NOPUT,PROTECT,BROWNOUT,NOLVP,NOMCLR,NOWDT
#device ADC=10
#use delay(clock=8000000)
#define SEG0COM PIN_D4
#define SEG1COM PIN_D5
#define SEG2COM PIN_D6
#define SEG3COM PIN_D7
int16 bir,on,yuz,bin;
unsigned int16 say,say1,s,oku;
byte const LED_MAP[10] = {0x3F,0x06,0x5B,0x4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
#int_TIMER0
void TIMER0_isr(void) /// display timer ile sürekli burada taranır
{
disable_interrupts(INT_TIMER0);
say++;
switch (say)
{
case 5:
output_low (SEG3COM);
output_high (SEG0COM); output_b (bir);
break;
case 10:
output_low (SEG0COM);
output_high (SEG1COM); output_b (on);
break;
case 15:
output_low (SEG1COM);
output_high (SEG2COM);output_b (yuz);
break;
case 20:
output_low (SEG2COM);
output_high (SEG3COM); output_b (bin);
say=0;
//output_low (SEG3COM);
break;
}
//enable_interrupts(INT_TIMER0);
set_timer0(99);
enable_interrupts(INT_TIMER0);
}
void yaz() /// displaye yazılacak değer burada ayarlanır
{
bir = (s % 10);
on = (s / 10) % (10);
yuz = (s / 100) % 10;
bin = (s / 1000) % 10;
bir = LED_MAP[bir];
on = LED_MAP[on];
yuz = LED_MAP[yuz];
bin = LED_MAP[bin];
delay_us (500);
}
#ZERO_RAM
void main()
{
setup_adc_ports(AN0_TO_AN6);
setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|RTCC_8_bit);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_timer0(99);
set_adc_channel(5);
delay_ms(100);
//s=1216;
//yaz();
WHILE (TRUE)
{
oku=read_adc();// adc oku
................
................
................
s=oku;
yaz(); // displaye yazılacak değeri yolla
}
}
Son düzenleme: