定时程序请教大家!
已经给出了, 时间运行程序,现在,只是要编写一个20点输出0和0,24点输出0和1,早上6点输出1和1!希望大家,耐心帮我看看,我下一步就是要编个定时读取时间的小程序,帮帮我,谢谢各位!!!
万年历程序是:
#include "reg52.h"
#include "VIIC_C51.H"
#include "zlg7290.h"
#define PCF8563 0xA2 //定义器件地址
#define WRADDR 0x00 //定义写单元首地址
#define RDADDR 0x02 //定义读单元首地址
sbit KEY_INT=P3^2;
sbit RST=P1^0;
unsigned char disp_buf[8]={0.0.0.0.0.0.0.0}; //显示缓存
unsigned char KEY; //保存键值
but swich_date=0;
unsigned char display_time(unsigned char *sd)
{
sd[0]=sd[0]&0x7f; //秒屏蔽保留位
sd[1]=sd[1]&0x7f; //分屏蔽保留位
sd[2]=sd[2]&0x7f; //时屏蔽保留位
disp_buf[0]=(sd[0]%16);
disp_buf[1]=(sd[0]/16);
disp_buf[2]=31;
disp_buf[3]=(sd[1]%16);
disp_buf[4]=(sd[1]/16);
disp_buf[5]=31;
disp_buf[6]=(sd[2]%16);
disp_buf[7]=(sd[2]/16);
ZLG7290_SendBuf(disp_buf,8);
return 0;
}
unsigned char display_date(unsigned char *sd)
{
sd[0]=sd[0]&0x3f; //日屏蔽保留位
sd[2]=sd[2]&0x1f; //月屏蔽保留位
disp_buf[0]=(sd[0]%16);
disp_buf[1]=(sd[0]/16);
disp_buf[2]=(sd[2]%16)+0x80; //后面加小数点
disp_buf[3]=(sd[2]/16);
disp_buf[4]=(sd[3]%16)+0x80; //后面加小数点
disp_buf[5]=(sd[3]/16);
disp_buf[6]=0;
disp_buf[7]=2;
ZLG7290_SendBuf(disp_buf,8);
return 0;
}
unsigned char DelayNS(unsigend char no)
{
unsigned char i,j; //延时参数
for(;no>;no--)
for(i=0;i<100;i++)
for(j=0;j<100;j++);
return 0;
}
void main()
{
unsigned char code td[9]={0x00.0x12.0x00.0x30.0x12.0x06.0x05.0x02.0x04}; //定义接收缓冲
RST=0;
DelayNS(1);
RST=1;
ISendStr(WRADDR.TD.0x5);
DelayNS(1);
ISendStr(WRADDR+5.&td[5],0x4);
while(1)
{
DelayNS(1);
IRcvStr(RDADDR,rd,0x7); //读现在的时.分.秒
DelayNS(1);
if(swich_date)
display_date(rd+3); //调显示日期子程序
else
display_time(rd); //调显示时间子程序
if(KET_INT==0)
{
KET=ZLG7290_GetKey();
if(KEY==1)
swich_date=~swich_date;
}
}
}