📄 ds12887.c
字号:
//DS12887驱动程序 ,用串口助手调试
//包含头文件
#include<AT89X52.H>
#include"DS12887_1.H" //自定义得头文件
unsigned char k; //键值
unsigned char Set; //调整值
//====================================================================
#define uchar unsigned char //定义无符号字符为 uchar,方便书写
#define uint unsigned int
//串口部分
uchar temp;
uchar y1,y2,y3,y4,y5,y6;
//延时200ms 函数定义
void delay200ms(void)
{
unsigned char i,j,k;
for(i=201;i>0;i--)
for(j=32;j>0;j--)
for(k=14;k>0;k--);
}
//延时5000+0us 函数定义
void delay5ms(void)
{
unsigned char i,j;
for(i=185;i>0;i--)
for(j=12;j>0;j--);
}
//键盘扫描,修改时间
void Keysan(void) //P2_0切换键,P2_1数值加,P2_1数值减
{
if(P2_0 == 0)
{
delay5ms();
if(P2_0 == 0) k++;
if(k == 7) k = 0;
}
if(P2_1 == 0) {delay5ms(); if(P2_1 == 0) Set++;}
if(P2_2 == 0) {delay5ms(); if(P2_2 == 0) Set--;}
switch(k)
{
case 0: DS12887_SetTime(DS12887_Second, Set); if(Set > 59 || Set < 0) Set = 0; break;
case 1: DS12887_SetTime(DS12887_Minute, Set); if(Set > 59 || Set < 0) Set = 0; break;
case 2: DS12887_SetTime(DS12887_Hour , Set); if(Set > 24 || Set < 0) Set = 0; break;
case 3: DS12887_SetTime(DS12887_Day , Set); if(Set > 31 || Set < 0) Set = 0; break;
case 4: DS12887_SetTime(DS12887_Month , Set); if(Set > 12 || Set < 0) Set = 0; break;
case 5: DS12887_SetTime(DS12887_Year , Set);break;
default: break;
}
}
//串口中断子函数
void serial(void)interrupt 4 using 1
{
ES=0; //禁止串口中断
while(RI==0);RI=0;
temp=SBUF; //接受串口数据
if(temp=='0') //读器件指令'0'
SBUF=y1;
while(TI==0);TI=0; //将同一数据发送到串口
ES=1; //允许串口中断 */
SBUF=y2; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
while(TI==0);TI=0; //将同一数据发送到串口
ES=1; //允许串口中断
SBUF=y3; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
while(TI==0);TI=0; //将同一数据发送到串口
ES=1; //允许串口中断
SBUF=y4; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
while(TI==0);TI=0; //将同一数据发送到串口
ES=1; //允许串口中断
SBUF=y5; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
while(TI==0);TI=0; //将同一数据发送到串口
ES=1; //允许串口中断
SBUF=y6; //回传的数为十六进制数,且会省掉小数部分,因为SBUF只有八位
while(TI==0);TI=0; //将同一数据发送到串口
ES=1; //允许串口中断
}
//主函数
void main(void)
{
SYSTEMTIME CurrentTime;
DS12887_Init();
//串口初始化
TMOD=0x20; //T1工作方式2
TH1=0xfd; //串口波特率为9600
SCON=0x50; //串口工作于方式1并允许接受
TR1=1; //启动T1
ES=1; //允许串口中断
EA=1; //允许全部外设中断
//时间初始化设置 ,2009-2-16 2:00:00
DS12887_SetTime(DS12887_Second, 0); //设置秒
DS12887_SetTime(DS12887_Minute, 0); //设置分
DS12887_SetTime(DS12887_Hour, 2); //设置时
DS12887_SetTime(DS12887_Day, 16); //设置天
DS12887_SetTime(DS12887_Month, 2); //设置月
DS12887_SetTime(DS12887_Year, 9); //设置年
k = 6; //不改变时间
while(1)
{
DS12887_GetTime(&CurrentTime);
delay200ms();
Keysan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -