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