این خیلی کمه توی اون ساعت کلا بیخیالش شدیم ولی می خوام بفهمم دقیقا چشه چون هرچی نور ال ای دی ها رو بیشتر میکنم ضایعتر میشه می خوام کلا حذفشون کنم
با کوپلر کلا جداشون کردم و همون طور که آقا مرتضی گفتن با ترانزیستور تقویتشون کردم
من فرکانس متر ندارم ولی تو پروتئوس چک کردم فرکانس هر پایه از 40 هرتز بیشتر نمیشه و کوپلر هم تا 80 کیلو جواب میده مشکل از این نمی تونه باشه
کد:
#include <mega16.h>
#include <delay.h>
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=4
.equ __scl_bit=5
#endasm
#include <i2c.h>
#include <ds1307.h>
char sega[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
int d=5,e;
unsigned char ym,mmo,dm,h,m,s;
unsigned long int ys1,ym1;
int ym2,ys2,ys,mso,ds,mmo1,mso1,k,del=1;
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
e++;
if(e==2){
e=0;
s++;
d++;
}
if (e==0) {
PORTD.4=1;
PORTB.7=1;
}
else{
PORTD.4=0;
PORTB.7=0;
}
if (s==0) {
PORTB.3=1;
}
else{
PORTB.3=0;
}
}
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a15,a16;
int dama,me,me1,incr,decr,chm;
PORTA=0x00;
DDRA=0xFE;
PORTB=0x00;
DDRB=0x8F;
PORTC=0x00;
DDRC=0x0F;
PORTD=0x00;
DDRD=0xFF;
ASSR=0x08;
TCCR2=0x04;
TCNT2=0x00;
TIMSK=0x40;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x82;
#asm("sei")
i2c_init();
rtc_init(0,0,0);
rtc_get_time(&h,&m,&s);
rtc_get_date(&dm,&mmo,&ym);
//***************************************
ym1=ym+2000;
k=ym1%4;
ym1=ym1-1;ym1=ym1*365;
if(mmo==1){mmo1=0;}
if(mmo==2){mmo1=31;}
if(mmo==3){mmo1=59;}
if(mmo==4){mmo1=90;}
if(mmo==5){mmo1=120;}
if(mmo==6){mmo1=151;}
if(mmo==7){mmo1=181;}
if(mmo==8){mmo1=212;}
if(mmo==9){mmo1=243;}
if(mmo==10){mmo1=273;}
if(mmo==11){mmo1=304;}
if(mmo==12){mmo1=334;}
if(k==0){mmo1++;}
ym1=ym1+mmo1;
ym1=ym1+dm;
ym2=ym+2000;
ym2--;
ym2=ym2/4;
ym1=ym1+ym2;
ym1=ym1-226899;
ys2=ym2-155;
ys1=ym1-ys2;
ys=ys1/365;
ys=ys+1;
mso1=ys1%365;
mso=1;
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
ds=mso1;
if(ds==0){ds=31;mso--;}
if(mso==0){ds=30;mso=12;}
//*****************************
while (1)
{
if(TCNT2<128){PORTC.3=1;chm=1;}else{PORTC.3=0;chm=0;}
if (dm==0){dm--;mmo--;}
if(dm>31){
if(mmo==1){dm=31;}
if(mmo==2){if(k==0){dm=29;}else{dm=28;}}
if(mmo==3){dm=31;}
if(mmo==4){dm=30;}
if(mmo==5){dm=31;}
if(mmo==6){dm=30;}
if(mmo==7){dm=31;}
if(mmo==8){dm=31;}
if(mmo==9){dm=30;}
if(mmo==10){dm=31;}
if(mmo==11){dm=30;}
if(mmo==12){dm=31;}
}
//***********************************************************************
if((PINB.6==1) && (me1==0)) {me++;me1=1;}
if((PINB.6==0) && (me1==1)) {me1=0;}
if(me==7) {
me=0;
rtc_set_time(h,m,s);
rtc_set_date(dm,mmo,ym);
}
if(me==0){
if(s>59){s=0;m++;}
if(m>59){m=0;h++;}
if(h>23){h=0;ds++;dm++;}
if(mso>6){if(ds>31){ds=0;dm=0;mso++;mmo++;}}else{if(ds>30){ds=0;dm=0;mso++;mmo++;}}
if (mso>12){mso=0;mmo=0;ys++;ym++;}}
else{
if(s>59){s=0;}
if(m>59){m=0;}
if(h>23){h=0;}
if(mso>6){if(ds>31){ds=1;dm=1;}}else{if(ds>30){ds=1;dm=1;}}
if(mso>12){mso=0;mmo=0;}
}
//***************************
a1=s%10;a2=s/10;
//**********
a3=m%10;a4=m/10;
//**********
a5=h%10;a6=h/10;
//**********
a7=ds%10;a8=ds/10;
//**********
a9=mso%10;a10=mso/10;
//**********
a11=ys%10;
//**********
a12=ys%100;a12=a12/10;
//**********
a13=ys%1000;a13=a13/100;
//**********
a15=dama%10;a16=dama/10;
//***************************
PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;
PORTA.1=1;PORTD=sega[a1];delay_ms(del);//PORTA.1=0;
PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
PORTA.2=1;PORTD=sega[a2];delay_ms(del);//PORTA.2=0;
PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
PORTA.3=1;PORTD=sega[a3];delay_ms(del);//PORTA.3=0;
PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
PORTA.4=1;PORTD=sega[a4];delay_ms(del);//PORTA.4=0;
PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
PORTA.5=1;PORTD=sega[a5];delay_ms(del);//PORTA.5=0;
PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
PORTA.6=1;PORTD=sega[a6];delay_ms(del);//PORTA.6=0;
PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
PORTA.7=1;PORTD=sega[a7];delay_ms(del);//PORTA.7=0;
PORTB.0=0;PORTB.1=1;PORTB.2=1;PORTB.3=1;PORTB.7=1;delay_ms(del);
PORTB.0=1;PORTD=sega[a8];delay_ms(del);//PORTB.0=0;
PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
PORTB.1=1;PORTD=sega[a9];delay_ms(del);//PORTB.1=0;
PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
PORTB.2=1;PORTD=sega[a10];delay_ms(del);//PORTB.2=0;
PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
PORTB.3=1;PORTD=sega[a11];delay_ms(del);//PORTB.3=0;
PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
PORTB.7=1;PORTD=sega[a12];delay_ms(del);//PORTB.7=0;
PORTC.0=0;PORTC.1=0;PORTC.2=0;delay_ms(del);
PORTC.0=1;PORTD=sega[a13];delay_ms(del);//PORTC.0=0;
PORTC.0=0;PORTC.1=0;PORTC.2=0;delay_ms(del);
PORTC.1=1;PORTD=sega[a15];delay_ms(del);//PORTC.1=0;
PORTC.0=0;PORTC.1=0;PORTC.2=0;delay_ms(del);
PORTC.2=1;PORTD=sega[a16];delay_ms(del);//PORTC.2=0;
//***********************************************************************
if(d==5){d=0;ADCSRA|=0x40;dama=read_adc(0);dama=dama/2;}
//***********************************************************************
if((PINB.4==1)&&(incr==0)){incr=1;
if(me==1){s=0;}
if(me==2){m++;}
if(me==3){h++;}
if(me==4){ds++;dm++;}
if(me==5){mso++;mmo++;}
if(me==6){ys++;ym++;}
}
if((PINB.4==0)&&(incr==1)){incr=0;}
//'***********************************************************************
if((PINB.5==1)&&(decr==0)){decr=1;
if(me==1){s=0;}
if(me==2){m--;}
if(me==3){h--;}
if(me==4){ds--;dm--;}
if(me==5){mso--;mmo--;}
if(me==6){ys--;ym--;}
}
if((PINB.5==0)&&(decr==1)){decr=0;}
//'***********************************************************************
};
}