View Single Post
Old 13-08-2012, 05:13 PM   #3
loveboom3012
Đệ tử 1 túi
 
Tham gia ngày: Jun 2011
Bài gửi: 18
:
mình tham khảo code như thế này, viết bằng ccs , báo lỗi, mấy bạn giúp mình với, đang làm đồ án cái lịch vạn niên
Code:
#include <16f877a.h>
#include <def_877a.h>
#fuses nowdt,noprotect,nolvp,hs,xt
#use delay(clock=4000000)
#use i2c(master,slow,sda=pin_c4,scl=pin_c3)
// cac dinh nghia
#define status 	rd4;
#define mode	rd5;
#define increase rd6;
#define decrease rd7;
#define led1 	ra0;
#define led2	ra1;
#define led3	ra2;
#define led4	ra3;
#define led5	ra4;
#define led6	ra5;
#define led7	re0;
#define led8	re1;
//khai bao cac bien
int8 sec,min,hour,dow,month,year;
const unsigned char maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int8 	sec1,sec2,min1,min2,date1,hour1,hour2,dow;
int8	day,date2,month1,month2,year1,year2,year3,year4;
void hienthi1(void);
void hienthi2(void);
void update_time(void);
void set_time(void);
void set_min(void);
void set_hour(void);
void set_day(void);
void set_date(void);
void set_month(void);
void set_year(void);
void main()
{
	set_tris_A(0x00);
	set_tris_b(0x01);
	set_tris_d(0xff);
	set_tris_e(0x00);
	porta=porte=0xff;
	while(1)
	{
		update_time();
		if(status==0)
			{hienthi2();}
		if(mode==0)
			{set_time();}
	}	
}	
void update_time(void)
{
	i2c_start();
	i2c_write(0xd0);	//gui dia chi cua slave
	i2c_write(0x00);	//thiet lap lai con tro
	i2c_Stop();
	i2c_start();
	i2c_write(0xd1);
	sec=i2c_read(0);
	min=i2c_read(1);
	hour=i2c_read(2);
	dow=i2c_read(3);
	date=i2c_read(4);
	month=i2c_read(5);
	year=i2c_read(6);
	i2c_stop();
	/////thuc hien chuyen doi 
	sec1=(sec&0x0f);
	sec2=(sec&0x70)>>4;
	min1=(min&0x0f);
	min2=(min&0x70)>>4;
	hour1=(sec&0x0f);
	hour2=(sec&0x30)>>4;
	day=(dow&0x07);
	date1=(date&0x0f);
	date2=(date&0x30)>>4;
	month1=(sec&0x0f);
	month2=(sec&0x10)>>4;
	yeardv=(year&0x0f);
	yearch=(year&0xf0)>>4;
}
//-------------Hien thi sec-min-hour--------------
void hienthi1()
{
	portb=maled[sec1);	led6=0;	delay_us(100);	led6=1;
	portb=maled(sec2);	led5=0;	delay_us(100);	led5=1;
	portb=maled[min1);	led4=0;	delay_us(100);	led4=1;
	portb=maled(min2);	led3=0;	delay_us(100);	led3=1;
	portb=maled[hour1);led2=0;	delay_us(100);	led2=1;
	portb=maled(hour2);led1=0;	delay_us(100);	led1=1;
	portb=maled[day);	led8=0;	delay_us(100);	led8=1;
}
//------------Hien thi day-date-month-year
void hienthi2()
{
	int16 i=0;
	while(status==0)
		{
		}
	while(i<600)
		{
			portb=maled(date1);led1=0;	delay_us(100);	led1=1;
			portb=maled(date2);led2=0;	delay_us(100);	led1=1;
			portb=maled(month1);led3=0;	delay_us(100);	led3=1;
			portb=maled(month2);led4=0;	delay_us(100);	led4=1;
			portb=maled(year1);led8=0;	delay_us(100);	led8=1;
			portb=maled(year2);led7=0;	delay_us(100);	led7=1;
			portb=maled(0x01);	led6=0;delay_us(100);	led6=1;
			portb=maled(0x02);	led5=0;delay_us(100);	led5=1;
			i++;
		}		
}
void update_ds1307(void)
{
	int8 data=0; //luu tru du lieu tam thoi de gui vao ds1307
	i2c_start();
	i2c_write(0xd0);
	i2c_start(0x00);// ghi du lieu bat dau tu vi tri 00
	data=sec1+(sec2<<4);
	data=data&0b01111111;
	i2c_write(data);

	data=min1+(min2<<4);
	i2c_write(data);

	hour=hour1+(hour2<<4);
	i2c_write(data);
	
	data=day;
	i2c_write(data);
	
	data=date1+(date2<<4);
	i2c_write(data);

	data=month1+(month2<<4);
	i2c_write(data);

	data=year1+(year2<<4);
	i2c_write(data);
	
	data=0x00;
	i2c_write(data);
	
	i2c_stop();	
}
void set_time(void)
{
	set_year(void);
	set_month(void);
	set_date(void);
	set_day(void);
	set_hour(void);
	set_min(void);
	set_sec(void);	
	while(mode==0)
	{
	}
	update_ds1307();
}
void set_year(void)
{
	while(mode==0)
		{
		}
	do
	{
		if(increase==0)
		{
			while(increase==0)
				{
				}
			year1++;
			if((year2==9) & (year1==10))
				{
					year1=year2=0;
				}
			if(year1==10)
				{
					year2++;year1=0;
				}
		}
		if(decrease==0)
		{
			while(decrease==0)
				{
				}
			year1--;
			if((year2==0) & (year1==255))
				{year1=year2=9;}
			if(year1==255)
				{year1=9,year2--;};
			
		}
		portb=0x02; led5=0; delay_us(200);	led5=1;
		portb=0x00; led6=0; delay_us(200);	led6=1;
		portb=maled[year2]; led7=0; delay_us(200);	led7=1;
		portb=maled[year1]; led8=0; delay_us(200);	led8=1;
		
	}
	while(mode==1);	
}
void set_month(void)
{
	while(mode==0){}
	do
		{
				if(increase==0)
		{
			while(increase==0)
				{
				}
			month1++;
			if((month2==1) & (month1==3))
				{
					month1=1;month2=0;
				}
			if(month1==10)
				{
					month2++;month1=0;
				}
		}
		if(decrease==0)
		{
			while(decrease==0)
				{
				}
			month1--;
			if((month2==0) & (month1==0))
				{month1=2;month2=1;}
			if(month1=0)
				{month1=9,month2--;};
			
		}
		portb=maled[month2]; led3=0; delay_us(200);	led3=1;
		portb=maled[month1]; led4=0; delay_us(200);	led4=1;
		}
		while(mode==1);
}
void set_date(void)
{
	while(mode==0)
	{		
	}
	do
		{
			if(increase==0)
			{
				while(increase==0){}
				date1++;
				if((date2==3)& (date1==2))
					{
						date2=0;date1=1
					}
				if(date1==10)
					{date2++;date1=0;}
			}
			if(decrease==0)
			{
				while(decrease==0){}
				date1--;
				if((date2==0)&(date1==0))
				{
					date2=3;;date1=1;
				}
				if(date1==255);
				{date2--,date1=9;}
			}
			portb=maled[date2];	led1=0;delay_us(200);led1=1;
			portb=maled[date1];	led2=0;delay_us(200);led2=1;
		}
		while(mode==1);
}
void set_day(void)
{
	while(mode==0){}
	do
		{
			if(increase==0)
			{
				while(increase==0){}
				day++;
				if(day==8)
					{day=1;}
			}
			if(decrease==0)
				{
					while(decrease==0){}
					day--;
					if(day==255)
					{day=7;}
				}
			portb=maled[day];	led8=0;delay_us(200);led8=1;
		}
	while(mode==1);
}
void set_hour(void)
{
	while(mode==0){}
	do
	{
		if(increase==0)
		{
			while(increase==0){}
			hour1++;
			if((hour2==2)&(hour1==4))
				{hour2=0;hour1=0;}
			if(hour1==1)
				{hour2++;hour1=0}
		}
		if(decrease==0)
		{
			while(decrease==0)
				{}
			hour1--;
			if((hour2==0)&(hour1==255))
				{hour2=2;hour1=3;}
			if(hour1==255)
				{hour2--;hour1=9;}
		}
		portb=maled[hour2];led1=0;delay_us(200);led1=1;
		portb=maled[hour1];led2=0;delay_us(200);led2=1;
	}
	while(mode==1);
}
void set_min(void)
{
	while(mode==0){}
	do
	{
		if(increase==0)
		{
			while(increase==0){}
			min1++;
			if((min2==5)&(min1==10))
				{min2=0;min1=0;}
			if(min1==10)
				{min2++;min1=0}
		}
		if(decrease==0)
		{
			while(decrease==0)
				{}
			min1--;
			if((min2==0)&(min1==255))
				{min2=5;min1=9;}
			if(min1==255)
				{min2--;min1=9;}
		}
		portb=maled[min2];led3=0;delay_us(200);led3=1;
		portb=maled[min1];led3=0;delay_us(200);led4=1;
	}
	while(mode==1);
}
loveboom3012 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn