proteus仿真实现51时钟

一.

1.Ds1302芯片有关代码

#include<REGX52.h>

//引脚定义
sbit Ds1302_IO=P3^4;   
sbit DS1302_CE=P3^5;
sbit DS1302_SCLK=P3^6 //时序脉冲周期

//寄存器写入地址/指令定义
#define DS1302_SECOND		0x80
#define DS1302_MINUTE		0x82
#define DS1302_HOUR			0x84
#define DS1302_DATE			0x86
#define DS1302_MONTH		0x88
#define DS1302_DAY			0x8A
#define DS1302_YEAR			0x8C
#define DS1302_WP			0x8E


//寄存器写入地址/指令定义
#define DS1302_SECOND		0x80
#define DS1302_MINUTE		0x82
#define DS1302_HOUR			0x84
#define DS1302_DATE			0x86
#define DS1302_MONTH		0x88
#define DS1302_DAY			0x8A
#define DS1302_YEAR			0x8C
#define DS1302_WP			0x8E

//时间数组,索引0~6分别为年、月、日、时、分、秒、星期
unsigned char DS1302_Time[]={19,11,16,12,59,55,6};

//初始化
void init(void){
	DS1302_CE=0;
	Ds1302_SClk=0;
}

//写入字节
void Write_Byte(unsigned char Commend,Date)//commend 命令字
{
	unsigned char i;
	Ds1302_CE=1;
	for(i=0;i<8;i++){
		DS1302_IO=Commend&(0x01<<i);//Commend&0x01就是取Commend的最低位值的运算,<<i就是0x01左移i位
		Ds1302_Sclk=1;//为1表示上升沿,写入命令字
		DS1302_Sclk=0;//下降沿,输出
	}
	//Date写入同理
	for(i=0;i<8;i++){
		for(i=0;i<8;i++){
		DS1302_IO=Date&(0x01<<i);
		Ds1302_Sclk=1;
		DS1302_Sclk=0;
	}
		Ds1302_CE=0;//写入操作结束
}

unsigned char Read_Byte(unsigned char commend){
	unsigned char i;
	Ds1302_CE=1;
	Command|=0x01;//逻辑或,取高位,将指令转为读指令
	Date=0x00;
	for(i=0;i<8;i++){
		Ds1302_IO=Commend&(0x01<<i)//取低位后左移
		Ds1302_Sclk=0;//此时是读,应该先下降沿以输出数据
		Ds1302_Sclk=1;}
	for(i=0;i<8;i++){
		
		Ds1302_Sclk=1;//注意脉冲周期
		Ds1302_Sclk=0;
		if(DS1302_IO){Data|=(0x01<<i);//如果IO线为1即为读模式的话
	}
	DS1302_CE=0;
	DS1302_IO=0;	//读取后将IO设置为0,否则读出的数据会出错
	return Data;
}

void DS1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值