📄 c程序.txt
字号:
//===================================================================================//
// 程序所用到的头文件
//===================================================================================//
#include <pic.h>
#include <stdlib.h>
#include <pic1687x.h>
#define TrIO_CLDATA TRISC1
#define CLOCK_SCLK RC0 //时钟芯片SCLK脚
#define CLOCK_DATA RC1 //时钟芯片I/O脚
#define CLOCK_RST RC2 //时钟芯片RST脚
//===================================================================================//
// 系统初始化子程序 RC0(SCLK),RC1(I/O),RC2(RST)
//===================================================================================//
void initportb(void)
{
INTCON=0x00;
OPTION=0x08;
TRISC0=0; //设置相应口的输出方式
TRISC1=1; //设置相应口的输入方式
TRISC2=0; //设置相应口的输出方式
TRISB=0x00; //设置相应口的输入输出方式
PORTB=0x00;
RC0=0;
RC1=0;
RC2=0;
}
//===================================================================================//
// 单字节写子程序 RC0(SCLK),RC1(I/O),RC2(RST)
//名称:inputdata
//说明:先写地址,后写数据
//功能: 往DS1302写入时钟数据
//===================================================================================//
void inputdata(unsigned char tmaddr,unsigned char tmdata)
{
unsigned char loop;
TrIO_CLDATA=0; //设置为输出;
CLOCK_RST=0;
CLOCK_SCLK=0;
CLOCK_RST=1;
for(loop=8;loop>0;loop--) //送地址
{CARRY=0;
tmaddr=tmaddr>>1;
CLOCK_DATA=CARRY;
CLOCK_SCLK=1; asm("nop");
CLOCK_SCLK=0;
}
for(loop=8;loop>0;loop--) //送数据
{CARRY=0;
tmdata=tmdata>>1;
CLOCK_DATA=CARRY;
CLOCK_SCLK=1; asm("nop");
CLOCK_SCLK=0;
}
CLOCK_SCLK=1;
CLOCK_RST=0;
TrIO_CLDATA=1; //设置为输出;
}
//===================================================================================//
//单字节读子程序 RC0(SCLK),RC1(I/O),RC2(RST)
//名称:outputdata
//说明:读数据
//功能: 从DS1302读取1Byte数据
//===================================================================================//
unsigned char outputdata(unsigned char tmaddr)
{
unsigned char loop;
unsigned char tmdata=0;
inputdata(0x8F,0x00);
TrIO_CLDATA=0; asm("nop"); //设置为输
CLOCK_RST=0;
CLOCK_SCLK=0;
CLOCK_RST=1;
for(loop=8;loop>0;loop--) //送地址
{CARRY=0;
tmaddr=tmaddr>>1;
CLOCK_DATA=CARRY;
CLOCK_SCLK=1; asm("nop");
CLOCK_SCLK=0;
}
TrIO_CLDATA=1; asm("nop"); //设置为输入;
CLOCK_DATA=1;
CLOCK_SCLK=1;
CLOCK_SCLK=0;
for(loop=8;loop>0;loop--) // 读数据
{tmdata=tmdata>>1;
if(CLOCK_DATA==1)
tmdata=tmdata|0x80;
CLOCK_SCLK=1;
CLOCK_SCLK=0;
}
tmdata=tmdata<<1; //由于在开始读是已经是第二个时钟下降延所以要进行左移处理
if(CARRY==1)
tmdata=tmdata|0x01;
CLOCK_SCLK=1;
CLOCK_RST=0;
return(tmdata);
}
//===================================================================================//
// 主程序(上电后仪器处于关机状态,即MCU处于休眠状态),3.6864MHz的晶振
//===================================================================================//
void main(void)
{ unsigned char miao;
unsigned char fen;
initportb();
delay5(); //延时5ms
inputdata(0x8E,0x00); //控制命令,WP=0,写操作
inputdata(0x90,0x06); //禁止充电
inputdata(0x8C,0x04); //初始化年,并启动时钟 04年
inputdata(0x8A,0x02); //初始化周,并启动时钟 周2
inputdata(0x88,0x05); //初始化月,并启动时钟 5月
inputdata(0x86,0x25); //初始化日,并启动时钟 25号
inputdata(0x84,0x02); //初始化时,并启动时钟 2点
inputdata(0x82,0x02); //初始化分,并启动时钟 50分
inputdata(0x80,0x00); //初始化秒,并启动时钟
inputdata(0x8E,0x80); //控制命令,WP=1,写保护
while(1)
{
miao=outputdata(0x81); //读秒
fen=outputdata(0x83); //读分
display(fen,miao);
delay250();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -