打印
[51单片机]

51单片机驱动DS12C887

[复制链接]
1182|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
比神乐|  楼主 | 2024-10-13 17:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
代码:
#include<reg51.h>
#include"OLED.H"
#include"define.h"

extern unsigned char code Dot[];
//extern char miao,shi,fen,year,month,day,week;
void delay(uint z)//延时函数
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void init()
{//初始化函数

       
       
       
        week=7;
       
/*以下几行在首次设置DS12C887时使用,以后不必再写入*/
        write_ds(0x0A,0x20);//打开振荡器
        write_ds(0x0B,0x22);//设置24小时模式,数据BCD码格式
                                                //开启闹铃中断
        set_time();//设置上电默认时间
//-----------------------------------------------------

}
void write_ds(uchar add,uchar date)
{//写12C887函数
        dscs=0;
        dsas=1;
        dsds=1;
        dsrw=1;
        P2=add;//先写地址
        dsas=0;
        dsrw=0;
        P2=date;//再写数据
        dsrw=1;
        dsas=1;
        dscs=1;                               
}

uchar read_ds(uchar add)
{//读12C887函数
        uchar ds_date;
        dsas=1;
        dsds=1;
        dsrw=1;
        dscs=0;
        P2=add;//先写地址
        dsas=0;
        dsds=0;
        P2=0xff;
        ds_date=P2;//再读数据
        dsds=1;
        dsas=1;
        dscs=1;
        return ds_date;       
}
/*---首次操作12C887时给予寄存器初始化---*/
void set_time()
{//首次上电初始化时间函数
        write_ds(0,0x40);
        write_ds(1,0);
        write_ds(2,0x59);
        write_ds(3,0);
        write_ds(4,0x23);
        write_ds(5,0x0);
        write_ds(6,0x7);
        write_ds(7,0x31);
        write_ds(8,0x12);
        write_ds(9,0x23);       
}
void main(void)
{
        int i;
        unsigned char shi1,ge;
        LCD_Init();
    LCD_CLS();
        LCD_P8x16Str(20,4,(u8*)"20  -  -  ");
        LCD_P8x16Str(20,6,(u8*)"  :  :  ");
        init();
        //Draw_BMP(0,0,100,3,(u8*)Dot);
        while(1)
        {
                year=read_ds(9);//读取12C887数据
                month=read_ds(8);       
                day=read_ds(7);
                week=read_ds(6);
                shi=read_ds(4);
                fen=read_ds(2);
                miao=read_ds(0);
                shi1=(miao>>4)+0x30;
                ge=(miao&0x0f)+0x30;
                LCD_P8x16Char(68,6,shi1);
                LCD_P8x16Char(76,6,ge);

                shi1=(fen>>4)+0x30;
                ge=(fen&0x0f)+0x30;
                LCD_P8x16Char(44,6,shi1);
                LCD_P8x16Char(52,6,ge);

                shi1=(shi>>4)+0x30;
                ge=(shi&0x0f)+0x30;
                LCD_P8x16Char(20,6,shi1);
                LCD_P8x16Char(28,6,ge);

                shi1=(day>>4)+0x30;
                ge=(day&0x0f)+0x30;
                LCD_P8x16Char(84,4,shi1);
                LCD_P8x16Char(92,4,ge);

            shi1=(month>>4)+0x30;
                ge=(month&0x0f)+0x30;
                LCD_P8x16Char(60,4,shi1);
                LCD_P8x16Char(68,4,ge);

                shi1=(year>>4)+0x30;
                ge=(year&0x0f)+0x30;
                LCD_P8x16Char(36,4,shi1);
                LCD_P8x16Char(44,4,ge);

                LCD_P8x16Char(20,2,week+0x30);
                for(i=0;i<20000;i++);
        }
}
效果图

使用特权

评论回复

相关帖子

沙发
chineseboyzxy| | 2024-10-24 15:45 | 只看该作者
好老的元件。07年做了一个数码管的表,用的就是89C51+12887,朋友自己做的并口编程器一遍一遍的烧芯片调试。带模拟演奏音乐报时,铃儿响叮当。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

435

主题

3411

帖子

7

粉丝