?? 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 + -