با سلام. نمازوروزه هاتون قبول.مداری که مشاهده میکنید یک ساعت با ds1307 هست که به جای ثانیه هاش 60 تا ledدر نظر گرفته شده .در پروتیوس مدار به درستی کار می کنه.اما در عمل کار نمیکنه .هر 4تا 7segفقط عدد صفر رو نشون میدن .حتی 1hz ds هم کار نمی کنه .اگه بتونین کمکم کنید ازتون ممنون میشم.از یک پورت میکرو با استفاده از ایسی 74hc573برای روشن کردن ledها استفاده شده.
کد:
#include <mega32.h> #include <delay.h> // I2C Bus functions #asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=4 .equ __scl_bit=5 #endasm #include <i2c.h> #include <ds1307.h> unsigned char H,M,S; //unsigned int S; unsigned char yekanM,dahganM,yekanH,dahganH; //,yekanS,dahganSint i, taghsim(){ //dahganS=S/10; //yekanS=S%10; dahganM=M/10; yekanM=M%10; dahganH=H/10; yekanH=H%10; } unsigned char coding(unsigned int data){ switch(data) { case 0: return 0x3f; break; case 1: return 0x06; break; case 2: return 0x5b; break; case 3: return 0x4f; break; case 4: return 0x66; break; case 5: return 0x6d; break; case 6: return 0x7d; break; case 7: return 0x07; break; case 8: return 0xff; break; case 9: return 0x6f; break; } } //************************************************** //************************************************** Display(){ PORTC=0b00001110; PORTA=coding(yekanM); delay_ms(2); PORTC=0b00001101; PORTA=coding(dahganM); delay_ms(2); PORTC=0b00001011; PORTA=coding(yekanH); delay_ms(2); PORTC=0b00000111; PORTA=coding(dahganH); delay_ms(2); } //************************************* minute(){ if(PINC.6==0) { //minute switch M++; if(M==60) M=0; rtc_set_time(H, M, S); while(PINC.6==0) { } taghsim(); Display(); } } //******************************************** hour(){ if(PINC.7==0) { //hour switch H++; if(H==24) H=0; rtc_set_time(H, M, S); while(PINC.7==0) { } taghsim(); Display(); } //rtc_get_time(&H,&M,0); //taghsim(); //Display(); } //************************************* data(unsigned int S){ switch(S) { case 0: PORTD= 0b00000001; break; case 1: PORTD= 0b00000011; break; case 2: PORTD= 0b00000111; break; case 3: PORTD= 0b00001111; break; case 4: PORTD= 0b00011111; break; case 5: PORTD= 0b00111111; break; case 6: PORTD= 0b01111111; break; case 7: PORTD= 0b11111111; break; } } void main(void) { PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0xFF; PORTC=0x00; DDRC=0x0F; PORTD=0x00; DDRD=0xFF; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; i2c_init(); rtc_init(0,1,0); while (1) { // Place your code here minute(); hour(); rtc_get_time(&H,&M,&S); taghsim(); Display(); //if(S==60){ //S==0; //} // search(); if(S<8){ PORTB=0b00000001; data(S); delay_ms(1); } else if(S>7 && S<16){ PORTB=0b00000010; data(S-8); delay_ms(1); } else if(S>15 && S<24){ PORTB=0b00000100; data(S-16); delay_ms(1); } else if(S>23 && S<32){ PORTB=0b00001000; data(S-24); delay_ms(1); } else if(S>31 && S<40){ PORTB=0b00010000; data(S-32); delay_ms(1); } else if(S>39 && S<48){ PORTB=0b00100000; data(S-40); delay_ms(1); } else if(S>47 && S<56){ PORTB=0b01000000; data(S-48); delay_ms(1); } else if(S>55 && S<60){ PORTB=0b10000000; data(S-56); delay_ms(1); } else{ //delay_us(1); } if(S==0){ PORTB=0b00000001; PORTD=0b00000001; delay_ms(25); PORTB=0b00000000; delay_ms(1); PORTB=0b11111111; PORTD=0b00000000; delay_ms(1); //PORTB=0b00000001; }
دیدگاه