共2条 1/1
1
跳转至
页
DS12887 DS12887的问题
问 最近用到
DS12887,根据资料编了自己的程序,也用了一些网上公布的程序,可惜老是出错:
DS12887不走,或者秒钟有100,但是分钟不变,或者初始值送不进
DS12887,请各位指点
DS12887的使用方法。
我只需读时间就行了,不需要里面的任何中断。谢谢! 答 1: Selectable between Motorola and Intel busSelectable between Motorola and Intel bus
timing
PIN 1 选择 答 2: 12887以下的程序就是读时间和led显示
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DS128870 XBYTE[0x2000]
#define DS128871 XBYTE[0x2001]
#define DS128872 XBYTE[0x2002]
#define DS128873 XBYTE[0x2003]
#define DS128874 XBYTE[0x2004]
#define DS128875 XBYTE[0x2005]
#define DS128876 XBYTE[0x2006]
#define DS128877 XBYTE[0x2007]
#define DS128878 XBYTE[0x2008]
#define DS128879 XBYTE[0x2009]
#define DS12887A XBYTE[0x200a]
#define DS12887B XBYTE[0x200b]
#define DS12887C XBYTE[0x200c]
#define DS12887D XBYTE[0x200d]
#define RAM1 XBYTE[0x0050]
#define RAM2 XBYTE[0x0051]
/**********显示设置******************/
unsigned char checksum,count3;
bit read_flag=0;
sbit DISP_CLK=P1^0; //the CLK of the LED display
sbit DISP_DO=P1^1;
uchar rcv_buffer[16],event;
uchar error,int_timers,code disp_table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint count;
/*******************************************************************/
void send_byte(uchar x) //跟12887无关
{
uchar i;
for(i=0;i<8;i++)
{
DISP_CLK=0;
DISP_DO=(bit)(x&0x80);
x=x<<1;
DISP_CLK=1;
}
}
/* Ds12887³õʼ»¯ */
/*******************************************************************/
void initstat (void) /*12887³õʼ»¯*/
{
DS12887B=0x16;//Í£Ö¹¸üУ¬Ñ¡BCDÂ룬24СʱÖÆ
DS12887A=0xa0;//´ò¿ª¾§Õñ²¢ÔÊÐíRTC¼Æʱ
}
void w DS12887(void)
{
int i;
DS12887B=0x96;
DS128870=30; //秒
DS128872=21; //分
DS128874=8; //时
DS128871=0xff; DS128873=0xff; DS128875=0xff;
DS128877=0x15; DS128878=0x02; DS128879=0x4;
DS12887B=0x16;//ÿÃë¼Æʱ×ßÒ»´Î£¬24СʱÖÆ
}
/***************Ò»¸ö10msÑÓʱ³ÌÐò************************/
void delay10ms(unsigned char time) //跟12887无关
{
unsigned char i;
unsigned int j;
for (i=0;i
我只需读时间就行了,不需要里面的任何中断。谢谢! 答 1: Selectable between Motorola and Intel busSelectable between Motorola and Intel bus
timing
PIN 1 选择 答 2: 12887以下的程序就是读时间和led显示
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DS128870 XBYTE[0x2000]
#define DS128871 XBYTE[0x2001]
#define DS128872 XBYTE[0x2002]
#define DS128873 XBYTE[0x2003]
#define DS128874 XBYTE[0x2004]
#define DS128875 XBYTE[0x2005]
#define DS128876 XBYTE[0x2006]
#define DS128877 XBYTE[0x2007]
#define DS128878 XBYTE[0x2008]
#define DS128879 XBYTE[0x2009]
#define DS12887A XBYTE[0x200a]
#define DS12887B XBYTE[0x200b]
#define DS12887C XBYTE[0x200c]
#define DS12887D XBYTE[0x200d]
#define RAM1 XBYTE[0x0050]
#define RAM2 XBYTE[0x0051]
/**********显示设置******************/
unsigned char checksum,count3;
bit read_flag=0;
sbit DISP_CLK=P1^0; //the CLK of the LED display
sbit DISP_DO=P1^1;
uchar rcv_buffer[16],event;
uchar error,int_timers,code disp_table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint count;
/*******************************************************************/
void send_byte(uchar x) //跟12887无关
{
uchar i;
for(i=0;i<8;i++)
{
DISP_CLK=0;
DISP_DO=(bit)(x&0x80);
x=x<<1;
DISP_CLK=1;
}
}
/* Ds12887³õʼ»¯ */
/*******************************************************************/
void initstat (void) /*12887³õʼ»¯*/
{
DS12887B=0x16;//Í£Ö¹¸üУ¬Ñ¡BCDÂ룬24СʱÖÆ
DS12887A=0xa0;//´ò¿ª¾§Õñ²¢ÔÊÐíRTC¼Æʱ
}
void w DS12887(void)
{
int i;
DS12887B=0x96;
DS128870=30; //秒
DS128872=21; //分
DS128874=8; //时
DS128871=0xff; DS128873=0xff; DS128875=0xff;
DS128877=0x15; DS128878=0x02; DS128879=0x4;
DS12887B=0x16;//ÿÃë¼Æʱ×ßÒ»´Î£¬24СʱÖÆ
}
/***************Ò»¸ö10msÑÓʱ³ÌÐò************************/
void delay10ms(unsigned char time) //跟12887无关
{
unsigned char i;
unsigned int j;
for (i=0;i
共2条 1/1
1
跳转至
页
回复
有奖活动 | |
---|---|
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! |