ds1302.c

来自「AVR单片机的C语言源程序,AVR与SED1520(12232LCD)的驱动程序」· C语言 代码 · 共 147 行

C
147
字号
#include "iom32.h"
//#include "includes.h"
#define DS1302_C
unsigned char bflag;
unsigned char bpm;
unsigned char get_hours(void)
{
	unsigned char i;
	unsigned char R_Byte;
	unsigned char TmpByte;
	reset();
	write(0x85);
	ddr_set_io();
	R_Byte = 0x00;
	prt_clear_io();
	ddr_clear_io();
	for(i=0;i<4;i++)
	{
		
		    TmpByte=0;
		    if((pinp&(1<<io)))
		    			TmpByte=1;
		TmpByte<<=7;
		R_Byte>>=1;
		R_Byte|=TmpByte;
		prt_set_clk();
		delay_nus(2);
		prt_clear_clk();
		delay_nus(2);
	}
	bflag=0;
	if((pinp&(1<<io)))
				bflag=1;
	prt_set_clk();
	delay_nus(2);
	prt_clear_clk();
	delay_nus(2);
				bpm=0;
	if((pinp&(1<<io)))
							bpm=1;
	prt_set_clk();
	delay_nus(2);
	prt_clear_clk();
	delay_nus(2);
	prt_clear_rst();
	prt_clear_clk();
	R_Byte>>=4;
	return R_Byte;
}

unsigned char readbyte(unsigned char w_byte)
{
	unsigned char temp;
	reset();
	write(w_byte);
	temp=read();
	prt_clear_rst();
	prt_clear_clk();
	return temp;
}

void writebyte(unsigned char w_byte, unsigned char w_2_byte)
{
	reset();
	write(w_byte);
	write(w_2_byte);
	prt_clear_rst();
	prt_clear_clk();
}

void reset(void)                     //设置引脚
{
	ddr_set_rst();
	prt_clear_clk();
	prt_clear_rst();
	prt_set_rst();
}

void write(unsigned char W_Byte)
{
	unsigned char i;
	DDRC=0xFF;
	
	for(i=0;i<8;i++)
	{
		prt_clear_io();
		if(W_Byte&0x01)
		{
			prt_set_io();
		}
		prt_set_clkk();
		delay_nus(1);     //delay_nus(2);
		prt_clear_clk();
		delay_nus(1);     //delay_nus(2);
		W_Byte>>=1;
	}
}

unsigned char read(void)       //读取1302
{
	unsigned char i;
	unsigned char R_Byte;
	unsigned char R_Byte2;
	unsigned char TmpByte;
	ddr_set_io();
	R_Byte=0x00;
	R_Byte2=0x00;
	prt_clear_io();
	ddr_clear_io();
	for(i=0;i<4;i++)          //get the first 4 bits
	{
		        TmpByte=0;
		if((pinp&(1<<io)))
		{
			TmpByte=1;
		 	TmpByte=0x80;
		}
		//TmpByte<<=7;
		R_Byte=(R_Byte>>1);    //R_Byte>>=1;
		R_Byte|=TmpByte;
		prt_set_clk();
		delay_nus(1);    //delay_nus(2);
		prt_clear_clk();
		delay_nus(1);     //delay_nus(2);
	}
	for(i=0;i<4;i++)
	{
		TmpByte=0;
		if((pinp&(1<<io)))
		{
			TmpByte=1;
			TmpByte=0x80;
		}
		//TmpByte<<=7;
		R_Byte2=(R_Byte2>>1);//R_Byte2>>=1;
		R_Byte2|=TmpByte;
		prt_set_clk();
		delay_nus(1); //delay_nus(2);
		prt_clear_clk();
		delay_nus(1);//delay_nus(2);
	}
	R_Byte>>=4;
	R_Byte2>>=4;
	R_Byte=(R_Byte2*10)+R_Byte;
	return R_Byte;
}

⌨️ 快捷键说明

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