سلام دوستان عزیزم.دوستان من با i2c در کامپایلر microc مشکل دارم.مثلا برنامه زیر را که واسه ds1307 هست نوشتم اما در همه حالتی ساعت و دقیق و ثانیه را 255 نمایش میده. :angry: :angry:
:eek: :question:
ممنون میشم اگه دوستان میدونند مشکل کجاست کمکم کنند.


ممنون میشم اگه دوستان میدونند مشکل کجاست کمکم کنند.
char ww[16];
char ho,mi,sec,day,mon,ye;
void ds1307_read_time (unsigned char *hour , unsigned char *min , unsigned char *sec)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(0);
i2c_start();
i2c_wr(0xd1);
*sec=i2c_rd(1);
*min=i2c_rd(1);
*hour=i2c_Rd(0);
i2c_stop();
}
void ds1307_read_date (unsigned char *year , unsigned char *month , unsigned char *day)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(4);
i2c_start();
i2c_wr(0xd1);
*day=i2c_rd(1);
*month=i2c_rd(1);
*year=i2c_rd(0);
i2c_stop();
}
void ds1307_write_time (char hour , char min , char sec)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(0);
i2c_wr(sec);
i2c_wr(min);
i2c_wr(hour);
i2c_stop();
}
void ds1307_write_date (char year , char month , char day)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(0x04);
i2c_wr(day);
i2c_wr(month);
i2c_wr(year);
i2c_stop();
}
void main (void)
{
TRISD=0XFF;
PORTD=0X00;
lcd_config(&portb,0,2,1,6,5,4,3);
i2c_init(400000);
lcd_out(1,1,"mehdi"
;
delay_ms(2000);
lcd_cmd(lcd_clear);
delay_ms(100);
while(1)
{
ds1307_read_time(&ho,&mi,&sec);
bytetostr(ho,ww);
lcd_out(1,1,ww);
lcd_out_cp(":"
;
bytetostr(mi,ww);
lcd_out_cp(ww);
lcd_out_cp(":"
;
bytetostr(sec,ww);
lcd_out_cp(ww);
if(button(&portd,0,100,1))
{
ho++;
ds1307_write_time(ho,mi,sec);
delay_ms(10);
}
if(button(&portd,1,100,1))
{
mi++;
ds1307_write_time(ho,mi,sec);
delay_ms(10);
}
if(button(&portd,2,100,1))
{
sec++;
ds1307_write_time(ho,mi,sec);
delay_ms(10);
}
delay_ms(1000);
}
}
char ho,mi,sec,day,mon,ye;
void ds1307_read_time (unsigned char *hour , unsigned char *min , unsigned char *sec)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(0);
i2c_start();
i2c_wr(0xd1);
*sec=i2c_rd(1);
*min=i2c_rd(1);
*hour=i2c_Rd(0);
i2c_stop();
}
void ds1307_read_date (unsigned char *year , unsigned char *month , unsigned char *day)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(4);
i2c_start();
i2c_wr(0xd1);
*day=i2c_rd(1);
*month=i2c_rd(1);
*year=i2c_rd(0);
i2c_stop();
}
void ds1307_write_time (char hour , char min , char sec)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(0);
i2c_wr(sec);
i2c_wr(min);
i2c_wr(hour);
i2c_stop();
}
void ds1307_write_date (char year , char month , char day)
{
i2c_start();
i2c_wr(0xd0);
i2c_wr(0x04);
i2c_wr(day);
i2c_wr(month);
i2c_wr(year);
i2c_stop();
}
void main (void)
{
TRISD=0XFF;
PORTD=0X00;
lcd_config(&portb,0,2,1,6,5,4,3);
i2c_init(400000);
lcd_out(1,1,"mehdi"

delay_ms(2000);
lcd_cmd(lcd_clear);
delay_ms(100);
while(1)
{
ds1307_read_time(&ho,&mi,&sec);
bytetostr(ho,ww);
lcd_out(1,1,ww);
lcd_out_cp(":"

bytetostr(mi,ww);
lcd_out_cp(ww);
lcd_out_cp(":"

bytetostr(sec,ww);
lcd_out_cp(ww);
if(button(&portd,0,100,1))
{
ho++;
ds1307_write_time(ho,mi,sec);
delay_ms(10);
}
if(button(&portd,1,100,1))
{
mi++;
ds1307_write_time(ho,mi,sec);
delay_ms(10);
}
if(button(&portd,2,100,1))
{
sec++;
ds1307_write_time(ho,mi,sec);
delay_ms(10);
}
delay_ms(1000);
}
}
دیدگاه