⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302_main.c

📁 该程序能是对DS1302时钟芯片的操作程序
💻 C
字号:
#include<pic.h>
#include"1302.h"

const unsigned char LEDCODE[]=
{
	0x3f,0x06,0x5b,0x4f,
	0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x40,
};

unsigned char LEDBuffer[8];
unsigned char ScanLEDCount;

unsigned char SecondFlag;
unsigned int  SecondCount;

//unsigned char Year,Month,Day,Hour,Minute,Second;

struct timestruct
{
	unsigned char Year;
	unsigned char Month;
	unsigned char Day;
	unsigned char Hour;
	unsigned char Minute;
	unsigned char Second;
}
struct timestruct DateTime;

void main(void)
{
	unsigned char temp;

	ADCON1|=0x07;
	TRISD=0;
	TRISE=0;
	TMR0=256-4;
	T0CS=0;
	PSA=0;
	T0IF=0;
	PS2=1;
	PS1=1;
	PS0=1;
	T0IE=1;
	GIE=1;
	init_1302();			//ds1302的初始
	
	Write_DS1302(0x8e,0x00);//时钟停止工作
	Write_DS1302(0X80,0X00);//设置DS1302的秒时钟
	Write_DS1302(0X82,0X55);//设置DS1302的分时钟
	Write_DS1302(0x84,0x11);//设置DS1302的时时钟
	Write_DS1302(0x86,0x16);//设置DS1302的日期
	Write_DS1302(0x88,0x11);//设置DS1302的月份
	Write_DS1302(0x8a,0x05);//设置DS1302的年
	Write_DS1302(0x8c,0x05);//设置DS1302的星期
	Write_DS1302(0x8e,0x80);//启动DS1302开始工作

	temp=Read_DS1302(0x8f);
	LEDBuffer[0]=temp%16;
	LEDBuffer[1]=temp/16;
	

	while(1)
	{
		if(SecondFlag==1)
		{
			SecondFlag=0;
			DateTime.Second=Read_DS1302(0x81);//读取DS1302的秒
			DateTime.Minute=Read_DS1302(0x83);//读取DS1302的分
			DateTime.Hour  =Read_DS1302(0X85);//读取DS1302的时
			DateTime.Day   =Read_DS1302(0x87);//读DS1302的日
			DateTime.Month =Read_DS1302(0X89);//读DS1302的月
			DateTime.Year  =Read_DS1302(0x8b);//读DS1302的年

			LEDBuffer[0]=DateTime.Second%16;
			LEDBuffer[1]=DateTime.Second/16;
			LEDBuffer[2]=10;
			LEDBuffer[3]=DateTime.Minute%16;
			LEDBuffer[4]=DateTime.Minute/16;
			LEDBuffer[5]=10;
			LEDBuffer[6]=DateTime.Hour%16;
			LEDBuffer[7]=DateTime.Hour/16;
/*
			LEDBuffer[0]=Datetime.Day%16;
			LEDBuffer[1]=Datetime.Day/16;
			LEDBuffer[2]=10;
			LEDBuffer[3]=Datetime.Month%16;
			LEDBuffer[4]=Datetime.Month/16;
			LEDBuffer[5]=10;
			LEDBuffer[6]=Datetime.Year%16;
			LEDBuffer[7]=Datetime.Year/16;
			for(i=0;i<50000;i++);
			for(i=0;i<50000;i++);
*/
		}
	}
}


void interrupt pic(void)
{
	if(T0IF==1)
	{
		T0IF=0;
		TMR0=256-4;
		PORTD=LEDCODE[LEDBuffer[ScanLEDCount]];
		PORTE=ScanLEDCount;
		ScanLEDCount++;
		if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;		
		SecondCount++;
		if(SecondCount==500)
		{
			SecondCount=0;
			SecondFlag=1;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -