PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
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
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:23 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam