📄 time4.c
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#include <math.h>
//sfr ACCa=0xE0;
sbit acc7=ACC^7;
sbit kg845=P1^0;
#define uchar unsigned char
#define DIGPORT XBYTE [0x0000] //字形地址
#define WORDPORT XBYTE [0x0001] //字位地址
uchar code TABLE[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
uchar code ZIWEI[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
int a[]= {0,0,0,0,0,0,0,0};
uchar tmp=0x0a;
void xianshi(void)
{unsigned char i;
unsigned char k;
for (i=0;i<8;i++)
{DIGPORT=TABLE[a[i]]; //送字形码
WORDPORT=ZIWEI[i]; //送字位码
for (k=0;k<50;k++) //加入延时 降低刷新速度 提高亮度
{}
WORDPORT=0x00; //关断
}
}//end xianshi
void xianshizi(long ain)
{long x1=100000000;
long x2=10000000;
unsigned char j;
for (j=0;j<8;j++)
{a[j]=(ain % x1)/x2; //第一次拆出最高位 直至最低位
x1=x1/10; //相关算法见兰本
x2=x2/10;
}
xianshi(); //led显示数值
}//end xianshizi
//*********************************************************************************
//以下为DS12C887芯片读写子程序区
//*********************************************************************************
//---------------------------------------------------------------------------------
//定义DS12C887各寄存器的地址,其余010E~011FH,114字节可以作为NRAM使用
#define SECOND XBYTE [0x0100] //秒寄存器
#define MINUTE XBYTE [0x0102] //分寄存器
#define HOUR XBYTE [0x0104] //时寄存器
#define WEEK XBYTE [0x0106] //星期寄存器
#define DATE XBYTE [0x0107] //日寄存器
#define MONTH XBYTE [0x0108] //月寄存器
#define YEAR XBYTE [0x0109] //年寄存器
#define RTC_A XBYTE [0x010A] //寄存器A
#define RTC_B XBYTE [0x010B] //寄存器B
#define RTC_C XBYTE [0x010C] //寄存器C
#define RTC_D XBYTE [0x010D] //寄存器D
//---------------------------------------------------------------------------------
//时钟信息变量1 用于对芯片时间的设置
uchar year1=0x07,month1=0x01,week1=0x01,date1=0x01,hour1=0x01,min1=0x01,second1=0x01;
//时钟芯片变量2 用于取得时钟芯片的变量
uchar year2,month2,week2,date2,hour2,min2,second2;
//为时钟缓冲区各单元字节赋值(只有在对时钟设置时使用)
void settime()
{
SECOND=second1;
MINUTE=min1;
HOUR=hour1;
WEEK=week1;
DATE=date1;
MONTH=month1;
YEAR=year1;
RTC_B=0x06; //注意这里只是看以前的设置 虽正确显示
RTC_A=0x20; //但似乎有不妥当的地方 注意修改
}
//---------------------------------------------------------------------------------
void gettime ()
{ RTC_B==0X26;
ACC=RTC_A;
while (acc7==1)
{ACC=RTC_A;} //直到uip=0时 才能读取时钟信息
second2=SECOND;
min2=MINUTE;
hour2=HOUR;
week2=WEEK;
date2=DATE;
month2=MONTH;
year2=YEAR;
}
//--------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
main()
{//RTC_A=RTC_A&0xaf; //dv2=dv0=0
//RTC_A=RTC_A|0x20; //dv1=0
//RTC_B=RTC_B&0x7b; //set=0 时间数据正常更新;dm=0 二进制数据模式
//RTC_B=RTC_B|0x02; //寄存器B 24/12位置1,24小时模式
settime();
while (1)
{
gettime();
xianshizi(second2);
//xianshizi(tmp);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -