|
< >#include <reg51.h>
#include <intrins.h> </P>
< >#define SDA P27
#define SCL P26
#define uchar unsigned char
sbit RS=P0^7;
sbit RW=P0^6;
sbit E=P0^5;
sbit P26 = P2^6; //file://x1226
sbit P27 = P2^7;
sbit rst = P2^1;
void write1(void);
void write2(void);
void Wait(void);
void writeByte(uchar ucDa);
uchar readByte(void);
void write1302(uchar addr,uchar ucDa);
uchar read1302 (uchar addr);
void set(uchar *pSecDa);
void get1302(uchar ucCurtime[]);
void analyze(void);
uchar temp;
uchar a,b;</P>
< >
void Wait(){
uchar i;
for(i=0;i<10;i++){ _nop_();}
}</P>
<P>void writeByte(uchar ucDa) //file://送一字节数据到slave,并返回确认信号
{
uchar i;
ACC=ucDa;
for(i=0;i<8;i++)
{
if(ACC & 0x80)
SDA = 1;
else
SDA = 0;</P>
<P> ACC <<= 1;
Wait();</P>
<P> SCL = 1;
Wait();
SCL = 0;
Wait();
}
}</P>
<P>uchar readByte(void) //file://接收1字节数据
{
uchar i;
uchar ACC = 0;</P>
<P> for(i=0;i<8;i++)
{
SCL = 1;
Wait();</P>
<P> ACC <<= 1;</P>
<P> if(SDA)
{
ACC |= 0x01;
}
SCL = 0;
Wait();
}</P>
<P> return (ACC);
}</P>
<P>void write1302(uchar addr,uchar ucDa){
rst=0;
SCL=0;
rst=1;
writeByte(addr);
writeByte(ucDa);
SCL=1;
rst=0;}</P>
<P> uchar read1302 (uchar addr)
{
uchar ucDa;
rst=0;
SCL=0;
rst=1;
writeByte(addr); /* 地址,命令 */
ucDa = readByte(); /* 读1Byte数据 */
SCL=1;
rst=0;
return(ucDa);
}</P>
<P> void set(uchar *pSecDa){
uchar i;
uchar addr=0x80;
write1302(0x8e,0x00);
for(i=7;i>0;i--){
write1302(addr,*pSecDa);
pSecDa++;
addr+=2;}
write1302(0x8e,0x80);
}</P>
<P>void get1302(uchar ucCurtime[])
{
uchar i;
uchar addr = 0x81;
for (i=0;i<7;i++)
{
ucCurtime<i> = read1302(addr);/*格式为: 秒 分 时 日 月 星期 年 */
addr += 2;
}
}
void analyze(void){ //十位的数的话要分两次在LCD上显示,分别是十位和各个位
a=temp>>4;
b=temp&0x0f;}</P>
<P> void main(){
uchar code tab1[]={0x01,0x38,0x0f,0x06} ; /*01清除屏幕;38设置8位2行; 0f显示屏幕ON,光标ON,闪烁ON;06加一*/
uchar wtime[7]={0x31,0x31,0x31,0x31,0x31,0x31,0x33};
//{0x30,0x43,0x11,0x20,0x06,0x05,0x03};
uchar rtime[7];
uchar i;
set(wtime);
Wait();
for(i=0;i<4;i++)
{ P1=tab1<i>; write1() ; } /* 设置初始状态 */
P1=0x80; write1() ; /*第一行起始地址*/
while(1){
get1302(rtime);
Wait();
for(i=0;i<7;i++)
{ temp=rtime<i>;
analyze();
P1=a; write2() ;
P1=b; write2() ;} /* 输出第一行*/</P>
<P> P1=0x80; write1() ; } /* 光标位置*/
}
void write1(void) /*RS 为0 |
|