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

📄 ds12c887.c

📁 时钟芯片DS12C887驱动程序
💻 C
字号:
#include"stdio.h"
#include"reg52.h"
#include"stdlib.h"
#include"intrins.h"
#include"absacc.h"
#define ds12887 XBYTE[0x8000]
#define com8255 XBYTE[0xa003]
#define pa8255 XBYTE[0xa000]
bit UIP; 
bit sig1;
unsigned char xdata lcddata _at_ 0xB000;
unsigned char xdata lcdcomm _at_ 0xB001;
unsigned char code asctab[]="0123456789";
void st1busycheck()//判断液晶读写状态
{
    unsigned char commbyte;
    commbyte=lcdcomm&0x03;
    while(commbyte!=0x03)
    {
        ;
    }
}

void writedata(unsigned char databyte)
{
    st1busycheck();
    lcddata=databyte;
}
void writecommand0(unsigned char comm)//无参数指令入口
{
    st1busycheck();
    lcdcomm=comm;
}

void writecommand2(unsigned char dat1,dat2,comm)//双字节参数指令入口
{
    writedata(dat1);
    writedata(dat2);
    st1busycheck();
    lcdcomm=comm;
}
void locatexy(unsigned char x,unsigned char y)//定位坐标
{
    unsigned int dat1,dat2,j;
    j=y*0x20+x;
    dat1=j%256;
    dat2=j/256;
    writecommand2(dat1,dat2,0x24);
}
void putstring(unsigned char x,unsigned char y,unsigned char *str)
{
    locatexy(x,y);
    while(*str!='\0')
    {
        writedata(*str-0x20);
        writecommand0(0xc0);
        str++;
    }
}
void putch(unsigned char ascdata)
{
    writedata(ascdata-0x20);
    writecommand0(0xc0);
}
void putbcd(unsigned char x,unsigned char y,unsigned int bcd)
{
    locatexy(x,y);
    putch(asctab[bcd/10]);
    bcd=bcd%10;
    putch(asctab[bcd]);
}

void lcdclear()//清屏
{
    unsigned int lcdclear;
    writecommand2(0x00,0x00,0x24);
    writecommand0(0xb0);
    lcdclear=1024;
    while(lcdclear<8193)
    {
        writedata(0x00);
        lcdclear++;
    }
    writecommand0(0xb2);
}
void lcdstart()
{
    writecommand2(0x00,0x00,0x40);//文本区首地址
    writecommand2(0x20,0x00,0x41);//文本区宽度
    writecommand2(0x00,0x08,0x42);//图形区首地址
    writecommand2(0x20,0x00,0x43);//图形区宽度
    writecommand0(0xa7);//字体形状8*8
    writecommand0(0x80);//文本、图形显示方式“或”关系
    writecommand0(0x9e);//启用光标、文本、图形显示
}

void DS12887()
{
    unsigned int u;
    XBYTE[0x800a]=0x20;
    XBYTE[0x800b]=0x80;
    XBYTE[0x800b]=0x06;
    u=XBYTE[0x800c];
    u=XBYTE[0x800d];
}
void sign()
{
    unsigned int b;
    lop:b=XBYTE[0x800a];
    UIP=(bit)(b&0x80);
    if(UIP==1)
    goto lop;
}
void fuhao()
{
    putstring(0x04,0x00,"--");
    putstring(0x08,0x00,"--");
    putstring(0x0c,0x00,"--");
    putstring(0x10,0x00,"--");
    putstring(0x14,0x00,":");
    putstring(0x17,0x00,":");
}
void fushi()
{
    XBYTE[0X8010]=XBYTE[0X8000];
    XBYTE[0X8011]=XBYTE[0X8002];
    XBYTE[0X8012]=XBYTE[0X8004];
    XBYTE[0X8013]=XBYTE[0X8006];
    XBYTE[0X8014]=XBYTE[0X8007];
    XBYTE[0X8015]=XBYTE[0X8008];
    XBYTE[0X8016]=XBYTE[0X8009];
    XBYTE[0X8017]=XBYTE[0X8032];
}
void main()
{
    lcdstart();
    lcdclear();
    com8255=0x90;
    pa8255=0xff;
    DS12887();
    fuhao();
    while(1)
    {
     sign(); 
     fushi();
     if((bit)(pa8255&0x01)==0) ;
     putbcd(0x00,0x00,XBYTE[0X8017]);//年
     putbcd(0x02,0x00,XBYTE[0X8016]);//年
     putbcd(0x06,0x00,XBYTE[0X8015]);//月
     putbcd(0x0a,0x00,XBYTE[0X8014]);//日
     putbcd(0x0e,0x00,XBYTE[0X8013]);//星期
     putbcd(0x12,0x00,XBYTE[0X8012]);//时
     putbcd(0x15,0x00,XBYTE[0X8011]);//分
     putbcd(0x18,0x00,XBYTE[0X8010]);//秒
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -