📄 text1.c
字号:
#include<reg52.h>
#define uc unsigned char
/*************************ds1302与at89s52引脚连接********************/
sbit T_RST=P1^2;
sbit T_CLK=P1^1;
sbit T_IO=P1^0;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
/*************************其他引脚*******************************/
sbit gn=P3^0;
sbit jia=P3^1;
sbit jian=P3^2;
/***********************延时程序=a*1ms**************************************/
void delay(unsigned char a){
unsigned char i;
while(a-- !=0)
{
for(i=0;i<125;i++);
}
}
/*******************显示处理***************************/
void xianshi(uc a, uc b)
{
if(b==0x06||b==0x0f)
{
P2=a*0x10+b;
delay(1);
}
else
{
P2=a/0x10*0x10+b;
delay(1) ;
P2=a%0x10*0x10+b+1;
delay(1) ;
}
}
/******************DS1302:写入操作(上升沿)*********************/
void write_byte(unsigned char da)
{
unsigned char i;
ACC=da;
for(i=8;i>0;i--)
{
T_IO=ACC0;
T_CLK=0;
T_CLK=1;
ACC=ACC>>1;
}
}
/******************DS1302:读取操作(下降沿)*****************/
unsigned char read_byte(void)
{
unsigned char i;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
T_CLK = 1;
T_CLK = 0;
ACC7 = T_IO;
}
return(ACC);
}
/******************DS1302:写入数据(先送地址,再写数据)***************************/
void write_1302(unsigned char addr,unsigned char da)
{
T_RST=0; //停止工作
T_CLK=0;
T_RST=1; //重新工作
write_byte(addr); //写入地址
write_byte(da);
T_RST=0;
T_CLK=1;
}
/******************DS1302:读取数据(先送地址,再读数据)**************************/
unsigned char read_1302(unsigned char addr)
{
unsigned char temp;
T_RST=0; //停止工作
T_CLK=0;
T_RST=1; //重新工作
write_byte(addr); //写入地址
temp=read_byte();
T_RST=0;
T_CLK=1; //停止工作
return(temp);
}
/******************************加1*****************************/
void jiayi()
{
uc a;
write_1302(0x8e,0x00);
a++;
if(a==60) a=0;
write_1302(0x82,a);
write_1302(0x8e,0x80);
}
/************************主程序**********************************************/
void main(void)
{
unsigned char clk_time[7]={0x57,0x27,0x12,0x23,0x07,0x04,0x08}; //秒,分,时,日,月,周,年 寄存器初始值
unsigned char temp=0x80;
unsigned char i;
unsigned char a=0,b=0;
write_1302(0x8e,0x00); //WP=0 写操作
for(i=0;i<7;i++)
{
write_1302(temp,clk_time[i]);
temp+=2;
}
write_1302(0x8e,0x80); //WP=1 写保护
while(1)
{
if(jia==0) a=1;
if(a)
if(jia==1)
{
jiayi();
a=0;
}
temp=0x81;
for(i=0;i<7;i++)
{
clk_time[i]=read_1302(temp);
temp+=2;
}
xianshi(clk_time[0],0x0b);
xianshi(clk_time[1],0x09);
xianshi(clk_time[2],0x07);
xianshi(clk_time[3],0x04);
xianshi(clk_time[4],0x02);
xianshi(clk_time[5],0x06);
xianshi(clk_time[6],0x00);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -