日历时钟DS12887或146818的C语言源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
日历时钟DS12887或146818的C语言源程序
#define uchar unsigned char
#define uint unsigned int
#include
#include
#include
#include
#include
#include
#include
#define P128870 XBYTE[0xa000]
#define P128871 XBYTE[0xa001]
#define P128872 XBYTE[0xa002]
#define P128873 XBYTE[0xa003]
#define P128874 XBYTE[0xa004]
#define P128875 XBYTE[0xa005]
#define P128876 XBYTE[0xa006]
#define P128877 XBYTE[0xa007]
#define P128878 XBYTE[0xa008]
#define P128879 XBYTE[0xa009]
#define P12887a XBYTE[0xa00a]
#define P12887b XBYTE[0xa00b]
#define P12887c XBYTE[0xa00c]
#define P12887d XBYTE[0xa00d]
#define P12887e XBYTE[0xa00e]
#define P12887f XBYTE[0xa00f]
void setup12887(uchar *p);
void read12887(uchar *p);
void start12887(void);
void setup12887(uchar *p) //设置系统时间
{
uchar i;
i=P12887d;
P12887a=0x70; P12887b=0xa2; P128870=*p++; P128871=0xff; P128872=*p++;
P128873=0xff; P128874=*p++; P128875=0xff; P128876=*p++; P128877=*p++;
P128878=*p++; P128879=*p++; P12887b=0x22; P12887a=0x20;
i=P12887c;
}
void read12887(uchar *p) //读取系统时间
{
uchar a;
do{ a=P12887a; } while((a&0x80)==0x80);
*p++=P128870; *p++=P128872; *p++=P128874; *p++=P128876;
*p++=P128877; *p++=P128878; *p++=P128879;
}
void start12887(void) //启动时钟
{
uchar i;
i=P12887d;
P12887a=0x70; P12887b=0xa2; P128871=0xff; P128873=0xff; P128875=0xff;
P12887b=0x22; P12887a=0x20;
i=P12887c;
}
这些地址,不要直接在代码中使用,应该在前面用EQU/BIT等定义成某个顾名思义的字符串,(0字)坏蛋[11次]2004-1-4 22:30:09 抄来的用的挺好!根据你的需要改改(16006字)gao_bc[18次]2004-1-5 10:51:21
/*************************************************************
文件名称:ds12c887.c
适用范围:时钟芯片ds12c887的驱动程序
*************************************************************/
#include
/* 命令常量定义*/
#define CMD_START_DS12C887 0x20 /* 开启时钟芯片
*/
#define CMD_START_OSCILLATOR 0x70 /* 开启振荡器,
处于抑制状态*/
#define CMD_CLOSE_DS12C887 0x30 /* 关掉时钟芯片
*/
/* 所有的置位使用或操作,清除使用与操作*/
#define MASK_SETB_SET 0x80 /* 禁止刷新*/
#define MASK_CLR_SET 0x7f /* 使能刷新*/
#define MASK_SETB_DM 0x04 /* 使用HEX格式
*/
#define MASK_CLR_DM 0xfb /* 使
用BCD码格式*/
#define MASK_SETB_2412 0x02 /* 使
用24小时模式*/
#define MASK_CLR_2412 0xfd /* 使用12小时模
式*/
#define MASK_SETB_DSE 0x01 /* 使用夏令时*/
#define MASK_CLR_DSE 0xfe /* 不使用夏令时
*/
/* 寄存器地址通道定义*/
xdata char chSecondsChannel _at_ 0xdf00;
xdata char chMinutesChannel _at_ 0xdf02;