⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time4.c

📁 自编51c语言简单测试程序 使用wave6000编译通过 其中包括始终芯片12887的初始化 以及调用显示
💻 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 + -