#include<stdio.h>
#include<reg51.h>
#define PCF8583W 0xA0
#define PCF8583R 0xA1
#define lcd_dta P0
sbit RS = P0^0;
sbit RW = P0^1;
sbit EN = P0^2;
sbit lcdBL = P0^3;
sbit RTCSCL=P1^0;
sbit RTCSDA=P1^1;
unsigned int i1,i2;
unsigned char SECS;
unsigned char MINS;
unsigned char idata HRS _at_ 0X3B;
unsigned char idata YDATE _at_ 0X3C;
unsigned char idata DMONTH _at_ 0X3D;
unsigned char idata lastread _at_ 0x3E;
unsigned char idata tp _at_ 0x3F;
unsigned char data1;
unsigned char xbyte[]=" ";
/***************A short Delay Function for the LCD delay timimgs****************/
void shortdelay()
{
for(i1=0;i1<4;i1++)
{
}
}
/**************A long delay function for the Processor reset to LCD reset Timing***************/
void longdelay()
{
for (i1=0;i1<44;i1++)
{
for(i2=0;i2<0xFF;i2++)
{
}
}
}
/************** LCD Command Write Function*****************************************************/
void write_command()
{
RW = 0;
RS = 0;
EN = 1;
B = ACC;
ACC= ACC & 0XF0;
ACC = ACC | 0x0C;
P0 = ACC;
shortdelay();
EN = 0;
shortdelay();
EN = 1;
ACC = B;
ACC = ACC & 0X0F;
ACC = ACC<<4;
ACC = ACC | 0x0C;
P0 = ACC;
shortdelay();
EN = 0;
longdelay();
}
/************** LCD Data Write Function*****************************************************/
void write_data()
{
RW = 0;
RS = 1;
EN=1;
B = ACC;
ACC = ACC & 0XF0;
ACC = ACC | 0x0D;
P0 = ACC;
shortdelay();
EN = 0;
shortdelay();
EN = 1;
ACC = B;
ACC = ACC & 0X0F;
ACC = ACC<<4;
ACC = ACC | 0x0D;
P0 = ACC;
shortdelay();
EN=0;
longdelay();
}
/********************** LCD Initialization Functions*********************************/
void init_lcd()
{
lcdBL = 1;
ACC = 0X28;
write_command();
ACC = 0X0C;
write_command();
ACC = 0X06;
write_command();
ACC = 0x01;
write_command();
}
void initialise()
{
longdelay();
longdelay();
longdelay();
longdelay();
init_lcd();
P0 = 0xFF;
P0 = 0x08;
init_lcd();
longdelay();
}
/************** BCD to HEX code conversion ****************/
void bcd_to_hex(unsigned mybyte)
{
unsigned char x,y;
x=mybyte&0x0F;
x=x|0x30;
y=mybyte&0xF0;
y=y>>4;
y=y|0x30;
}
void sclhigh()
{
hg:
RTCSCL=1;
if (RTCSCL!=1)
{
goto hg;
}
}
void delay()
{
int m;
for (m=0;m<9;m++ )
{
}
}
void init_ser()
{
TI=0;
RI=0;
TMOD=0X20;
TH1=0X0FD;
SCON=0X50;
EA =1;
ET0 =1;
TR1 =1;
}
/**********RTC start***************************/
void start()
{
RTCSDA = 1;
sclhigh();
RTCSDA=0;
delay();
RTCSCL = 0;
}
/**********RTC stop*****************************/
void stop()
{
RTCSDA=0;
sclhigh();
RTCSDA=1;
}
/******************RTC writing byte**************/
void sendbyte()
{
unsigned int data2;
int i;
for (i=0;i<8;i++ )
{
data2 = (data1 & 0x80);
if (data2 == 0x80)
{
RTCSDA = 1;
}
else
{
RTCSDA = 0;
}
sclhigh();
data1=data1<<1;
RTCSCL=0;
}
RTCSDA = 1;
sclhigh();
if (RTCSDA != 1)
{
goto sb;
}
else
{
goto sa;
}
sa:
sb:
delay();
RTCSCL=0;
delay();
}
/*******************RTC Reading byte*****************/
void readbyte()
{
unsigned int data7,data8;
int j;
RTCSDA=1;
for (j=0;j<8 ;j++)
{
sclhigh();
tp=RTCSDA;
if (tp==1)
{
data7=(data8 | 0x01);
}
else
{
data7=(data8 & 0xfe);
}
data8=data7<<1;
RTCSCL=0;
delay();
delay();
delay();
}
if(lastread==1)
{
goto ack1;
}
RTCSDA=0;
ack1:
sclhigh();
RTCSCL=0;
ACC=data7;
}
/*************************READ CLOCK***********************/
void rd_clock()
{
lastread = 0; //before read byte set the lastread=0
start();
data1=PCF8583W; //WRITE
sendbyte();
data1=0x01;
sendbyte();
stop();
start();
data1=PCF8583R; //READ//
sendbyte();
lastread = 1;
readbyte();
MINS = ACC;
stop();
}
/*readbyte();
MINS = ACC;
readbyte();
HRS = ACC;
readbyte();
YDATE = ACC;
lastread = 1; //before the lastread byte,set the lastread=1
readbyte();
DMONTH = ACC;
stop();
}
/********************** SET CLOCK ********************/
void set_clock()
{
start();
data1 = PCF8583W;
sendbyte();
data1 = 0X01;
sendbyte();
data1 = SECS;
sendbyte();
/*data1 = MINS;
sendbyte();
data1 = HRS;
sendbyte();
data1 = YDATE;
sendbyte();
data1 = DMONTH;
sendbyte();*/
stop();
}
void send (unsigned char dat1)
{
SBUF = dat1;
while(!TI);
TI=0;
}
void send_data(unsigned char data3)
{
unsigned char R;
R = data3 & 0xF0;
R = R >> 4;
R = R + 0x30;
send (R);
R = data3 & 0x0F;
R = R + 0x30;
send (R);
}
void main()
{
init_ser();
SECS = 0x20;
set_clock();
while(1)
{
rd_clock();
send_data(MINS);
}
}
eePROM.rar_eeprom
版权申诉
5 浏览量
2022-09-23
17:48:57
上传
评论
收藏 46KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- 基于QT的地图可视化桌面系统后台数据库为MySQL5.7源码.zip
- 基于simulink的PLL锁相环系统仿真【包括模型,文档,参考文献,操作步骤】
- 基于EM-GMM模型的目标跟踪和异常行为检测matlab仿真【包括程序,注释,参考文献,操作步骤,说明文档】
- 2109010044_胡晨燕_选课管理数据库设计与实现.prj
- 帕鲁介绍的PPT备份没什么好下的
- demo1-202405
- 两种方式修改Intel网卡MAC地址
- 服务器搭建所需资源:static文件夹
- Vue02的源码学习资料
- Python 程序语言设计模式思路-行为型模式:访问者模式:在不改变被访问对象结构的情况下,定义对其元素的新操作
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈