📄 ds1302.c
字号:
#include"stdio.h"
#include"reg52.h"
#include"stdlib.h"
#include"intrins.h"
#include"absacc.h"
unsigned char xdata lcddata _at_ 0x0000;
unsigned char xdata lcdcomm _at_ 0x0001;
unsigned char code asctab[]="0123456789";
unsigned char code set[]={0x58,0x59,0x23,0x00,0x00,0x00,0x00,0x20};
unsigned char code address[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8e};
unsigned char datasheet[7];
sbit RES=P1^0;
sbit CLK=P1^1;
sbit DAT=P1^2;
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 writecommand1(unsigned char dat2,comm)//单字节参数指令入口
{
writedata(dat2);
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,l;
l=y*0x20+x;
dat1=l%256;
dat2=l/256;
writecommand2(dat1,dat2,0x24);
}
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 putstring(unsigned char x,unsigned char y,unsigned char *ptr)
{
locatexy(x,y);
while(*ptr!='\0')
{
writedata(*ptr-0x20);
writecommand0(0xc0);
ptr++;
}
}
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
for(i=0;i<73;i++) ;
}
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*7
writecommand0(0x80);//文本、图形显示方式“或”关系
writecommand0(0x9c);//启用光标、文本、图形显示
writecommand0(0x05);
}
void input_a_byte(unsigned char ubyte)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
DAT=ubyte&0x01;
CLK=1;
ubyte>>=1;
}
}
unsigned char output_a_byte()
{
unsigned char j,n=0;
for(j=0;j<8;j++)
{
if(DAT)
n|=0x80;
CLK=1;
n>>=1;
CLK=0;
}
return(n);
}
void w1302(unsigned char address,udat)
{
RES=0;
CLK=0;
RES=1;
input_a_byte(address);
input_a_byte(udat);
RES=0;
}
unsigned char r1302(unsigned char address)
{
unsigned char udat,nn;
RES=0;
CLK=0;
RES=1;
input_a_byte(address);
udat=output_a_byte();
RES=0;
nn=udat/16;
udat=udat%16;
udat=udat+nn*10;
return(udat);
}
void set1302()
{
unsigned char k,address=0x80;
w1302(0x8e,0x00);
for(k=0;k<8;k++)
{
w1302(address,set[k]);
address+=2;
}
w1302(0x8e,0x80);
}
void get1302()
{
unsigned char k,m=0x15;
for(k=0;k<7;k++)
{
datasheet[k]=r1302(address[k]);
}
for(k=0;k<7;k++)
{
putbcd(m,0x00,datasheet[k]);
m-=3;
}
delay(100);
}
main()
{
lcdstart();
lcdclear();
set1302();
while(1)
{
get1302();
}
//putstring(0x00,0x00,"-----------");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -