當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] //aa0047132563000404//秒分時(shí)日星期和月(最高3位0-6,代表1-7)#include#include#include"hcLCDdot.h"//點(diǎn)陣庫(kù)#defineUcharunsignedchar#defineUintunsignedint#defineSomeNOP();_nop_();_nop_();_nop_(

//aa0047132563000404
//秒分時(shí)日星期和月(最高3位0-6,代表1-7)
#include

#include
#include"hcLCDdot.h"http://點(diǎn)陣庫(kù)
#defineUcharunsignedchar
#defineUintunsignedint
#defineSomeNOP();_nop_();_nop_();_nop_();
/*LCD驅(qū)動(dòng)要用到的一些口線定意*/
#defineLCDPORTP0
sbitD_I=P3^7;
sbitR_W=P3^6;
sbitE=P3^5;
sbitCS1=P3^2;
sbitCS2=P3^4;
sbitRST=P3^3;
/*I2C要用到的口線定意*/
sbitSDA=P2^7;
sbitSCL=P2^6;

////////////以下為函數(shù)聲明///////////////////////////////
//LCD驅(qū)動(dòng)要用到的一些函數(shù)
voidlcdwrite_cmd(Ucharcmd_dat);
voidlcdwrite_dat(Uchardot_dat);
voidlcd_busy();
Ucharlcdread_dat(void);
voidlcddispon(void);
voidlcddispoff(void);
voidlcdclrall(void);
voidlcdini(void);
voidHz12disp(UcharNowrow,UcharNowcol,UcharCHplace);
voidASC12disp(UcharNowrow,UcharNowcol,UcharASCplace);
voidflashlogo(UcharBmpcol);
voidDisp128_64(UcharBMPplace);
voiddelay(void);
//I2C驅(qū)動(dòng)要用到的一些函數(shù)
voidDelay_1ms(Uchartime);
voidI2CStart(void);
voidI2CStop(void);
voidACK(void);//AcknowLEDge信號(hào)
voidNACK(void);//沒(méi)有Acknowledge信號(hào)
voidAutoACK(void);//在一定的時(shí)間內(nèi)自動(dòng)確定ACK的信號(hào)//
voidWritex(Ucharj);
UcharReadx(void);
voidX24_Write(UcharAddresshigh,UcharAddresslow,UcharWrite_date);
UcharX24_Read(UcharAddresshigh,UcharAddresslow);
voidX24_WritePage(UcharAddresshigh,UcharAddresslow,Ucharidata*Writeip);
voidX24_ReadPage(UcharAddresshigh,UcharAddresslow,Ucharidata*ReaDIP);
voidGetPCF8563(Ucharidata*Getip);
voidSetPCF8563(Ucharidata*Setip);
UcharReadPCF8563(UcharAddrePCF);
voidWritePCF8563(UcharAddrePCF,UcharPCFdata);
voidSetWaring(UcharWyear,UcharWmonth,UcharWday);
bitCheckTime(void);
voidrs232(void);
voidtime0(void);
/*定義一個(gè)接收的數(shù)組*/
Uchardatarecdata[8];//
UcharidataL24cxxdata[64];//用于讀出或?qū)懭?4C16的數(shù)據(jù)
UcharidatacLOCkdata[7];//系統(tǒng)時(shí)鐘
Ucharpcpointer,timecount,timecount2,*gettimeip;//用于設(shè)定從PC接收和發(fā)的指針
/*定義二個(gè)地址編碼寄存器,設(shè)定地址線穩(wěn)定時(shí)間,定時(shí)器2的延時(shí)時(shí)間參數(shù),動(dòng)畫的時(shí)位置參數(shù),發(fā)碼結(jié)束后取消靜音的時(shí)間*/
UchardataMCaddreh,MCaddrel,MCaddtime,time2_1s,time2_10s,time2_10sx,logocol;
Uintdatanomutetime;
Ucharnewbmpcount;
/*定義標(biāo)志位存放的寄存器*/
Ucharbdatamyflag,myflag2,bmpflag;//定義一個(gè)用于標(biāo)志寄存器存放的
sbitnomutebit=myflag^0;//用于開始取消靜音標(biāo)志
sbitrecpcokbit=myflag^1;//用于設(shè)定接收到一個(gè)完整的控制指令碼
sbitreturnbit=myflag^2;//用于向PC回傳數(shù)據(jù)標(biāo)志
sbitfindokbit=myflag^3;//尋找到明碼地址
sbitsendbit=myflag^4;//開始發(fā)碼
sbittimenewbit=myflag^5;//時(shí)鐘更新標(biāo)志
sbitcallnewbit=myflag^6;//有新的呼叫
sbitendnewbit=myflag^7;//呼叫結(jié)束

sbitw24cxxbit=myflag2^0;//設(shè)定明碼表
sbittimeoutbit=myflag2^1;
sbitnewtimebit=myflag2^2;//設(shè)定新的系統(tǒng)時(shí)間
sbitr_lbit=bmpflag^0;
sbitb_wbit=bmpflag^1;//圖和文字標(biāo)志
sbitnewbmpbit=bmpflag^2;//更新圖片
voidmain(void)
{
TH0=0xf8;//2ms
TL0=0xce;
TH1=0xfd;//以9600Baud的速率和PC機(jī)通信
TL1=0xfd;
TH2=0x4c;//50ms
TL2=0x00;
T2CON=0x00;
TMOD=0x21;//Time0為16位,Time1為8位常數(shù)自裝
SCON=0x50;
IP=0x10;
TR0=1;
TR1=1;
TR2=1;
time2_1s=0x14;
time2_10s=0x0a;
time2_10sx=0x0c;
IE=0x92;//Time0,Time2,RS232中斷
timecount=0x64;
timecount2=0x32;
newbmpcount=0x01;
logocol=0;
r_lbit=0;
timeoutbit=0;
b_wbit=1;
//setadd(80);

lcdini();
while(1)
{
lcdclrall();
HZ12disp(0x00,0x04,0x01);//承
HZ12disp(0x00,0x10,0x02);//接
HZ12disp(0x00,0x1C,0x03);//單
HZ12disp(0x00,0x28,0x04);//片
HZ12disp(0x00,0x34,0x05);//機(jī)
HZ12disp(0x00,0x40,0x06);//開
HZ12disp(0x00,0x4C,0x07);//發(fā)
HZ12disp(0x00,0x58,0x08);//及
HZ12disp(0x00,0x64,0x09);//解
HZ12disp(0x00,0x70,0x0A);//密

HZ12disp(0x01,0x0A,0x0B);//各
HZ12disp(0x01,0x16,0x0C);//類
ASC12disp(0x01,0x22,0x0B);//I
ASC12disp(0x01,0x28,0x0C);//C
HZ12disp(0x01,0x2E,0x0D);//卡
ASC12disp(0x01,0x3A,0x0D);//;
ASC12disp(0x01,0x40,0x0A);//P
ASC12disp(0x01,0x46,0x0B);//I
ASC12disp(0x01,0x4C,0x0C);//C
HZ12disp(0x01,0x52,0x03);//單
HZ12disp(0x01,0x5E,0x04);//片
HZ12disp(0x01,0x6A,0x05);//機(jī)

ASC12disp(0x02,0x0A,0x05);//5
ASC12disp(0x02,0x10,0x01);//1
HZ12disp(0x02,0x16,0x0E);//編
HZ12disp(0x02,0x22,0x0F);//程
HZ12disp(0x02,0x2E,0x10);//器
ASC12disp(0x02,0x3A,0x0D);//;
ASC12disp(0x02,0x40,0x0A);//P
ASC12disp(0x02,0x46,0x0B);//I
ASC12disp(0x02,0x4C,0x0C);//C
HZ12disp(0x02,0x52,0x0E);//編
HZ12disp(0x02,0x5E,0x0F);//程
HZ12disp(0x02,0x6A,0x10);//器

HZ12disp(0x03,0x00,0x14);//星
HZ12disp(0x03,0x0c,0x15);//期

ASC12disp(0x03,0x2c,0x02);//2
ASC12disp(0x03,0x32,0x00);//0

HZ12disp(0x03,0x44,0x11);//年

HZ12disp(0x03,0x5c,0x12);//月

HZ12disp(0x03,0x74,0x13);//日


ASC12disp(0x04,0x5c,0x0e);//:

ASC12disp(0x04,0x6e,0x0e);

while(b_wbit==1)
{
if(timenewbit==1)
{
Ucharnewtime0;
timenewbit=0;

newtime0=(clockdata[6]>>4)&0x0f;
ASC12disp(0x03,0x38,newtime0);
newtime0=clockdata[6]&0x0f;
ASC12disp(0x03,0x3e,newtime0);

newtime0=(clockdata[4]>>4)&0x01;
ASC12disp(0x03,0x50,newtime0);
newtime0=clockdata[4]&0x0f;
ASC12disp(0x03,0x56,newtime0);

newtime0=((clockdata[4]>>5)&0x07)+0x16;
HZ12disp(0x03,0x1B,newtime0);//幾號(hào)

newtime0=(clockdata[3]>>4)&0x03;
ASC12disp(0x03,0x68,newtime0);
newtime0=clockdata[3]&0x0f;
ASC12disp(0x03,0x6e,newtime0);

newtime0=(clockdata[2]>>4)&0x03;
ASC12disp(0x04,0x50,newtime0);
newtime0=clockdata[2]&0x0f;
ASC12disp(0x04,0x56,newtime0);

newtime0=(clockdata[1]>>4)&0x07;
ASC12disp(0x04,0x62,newtime0);
newtime0=clockdata[1]&0x0f;
ASC12disp(0x04,0x68,newtime0);

newtime0=(clockdata[0]>>4)&0x07;
ASC12disp(0x04,0x74,newtime0);
newtime0=clockdata[0]&0x0f;
ASC12disp(0x04,0x7a,newtime0);
}
if(r_lbit==0)
{
flashlogo(logocol++);
if(logocol==32)
{r_lbit=1;}
lcddispon();
delay();
}
else
{
flashlogo(logocol--);
if(logocol==0)
{r_lbit=0;}
lcddispon();
delay();
}
}
while(b_wbit==0)
{
if(newbmpbit==1)
{
newbmpbit=0;
Disp128_64(newbmpcount);

}
}
}
}


//以下為定時(shí)器TIME0中斷程序
voidtime0(void)interrupt1
{
TH0=0xf8;
TL0=0xce;
timecount--;
if(timecount==0)
{
timecount=0x64;
gettimeip=&clockdata[0];
GetPCF8563(gettimeip);
//clockdata[0]=0x25;
//clockdata[0]=0x12;
//clockdata[1]=0x34;
//clockdata[2]=0x56;
//clockdata[3]=0x78;
//clockdata[4]=0x90;
//clockdata[5]=0x88;
//clockdata[6]=0x77;
timenewbit=1;
timecount2--;
if(timecount2==0)
{
timecount2=0x32;
b_wbit=!b_wbit;
if(b_wbit==0)
{
newbmpbit=1;
newbmpcount++;
if(newbmpcount==0x03)
{newbmpcount=0x01;}
}
}
}

if(newtimebit==1&&recpcokbit==1)
{
//設(shè)定新的系統(tǒng)時(shí)間
Uchar*pcfsetip;
newtimebit=0;
recpcokbit=0;
pcfsetip=&recdata[1];
SetPCF8563(pcfsetip);
WritePCF8563(0x00,0x00);
WritePCF8563(0x01,0x00);
WritePCF8563(0x0d,0x83);
}
}

//以下為串行口中斷程序,用于接收串行數(shù)據(jù)
voidrs232(void)interrupt4
{
if(RI==1)
{

//原輸入格式為AA秒,分,時(shí)日,星期,月年
if(SBUF==0xaa)
{
newtimebit=1;
pcpointer=0;
}
RI=0;
recdata[pcpointer++]=SBUF;
if(pcpointer==8)
{
pcpointer=0;
recpcokbit=1;//指針還原,置收到完整的控制碼
}
}
else
{
TI=0;
}
}

voidtime2(void)interrupt5
{
TF2=0;
TH2=0x4c;//50ms
TL2=0x00;
}



/*---------------LCD驅(qū)動(dòng)要用到的一些子程序--------------------*/
/*向LCD寫指令*/
voidlcdwrite_cmd(Ucharcmd_dat)
{
D_I=0;
R_W=0;
E=0;
LCDPORT=cmd_dat;
SomeNOP();
E=1;
SomeNOP();
E=0;
}
/*向LCD寫數(shù)據(jù)*/
voidlcdwrite_dat(Uchardot_dat)
{
D_I=1;
R_W=0;
E=0;
LCDPORT=dot_dat;
SomeNOP();
E=1;
SomeNOP();
E=0;
}
/*判斷LCD是否處于*/
voidlcd_busy()
{
Uchari;
D_I=0;
R_W=1;
while(1)
{
E=0;
LCDPORT=0xff;
SomeNOP();
E=1;
SomeNOP();
i=LCDPORT;
E=0;
if(i<0x80)break;
}
}

Ucharlcdread_dat(void)
{Uchari;
D_I=1;
R_W=1;
E=0;
LCDPORT=0xff;
SomeNOP();
E=1;
SomeNOP();
i=LCDPORT;
E=0;
LCDPORT=0xff;
SomeNOP();
E=1;
SomeNOP();
i=LCDPORT;
E=0;
return(i);
}

//開LCD顯示
voidlcddispon(void)
{
CS1=0;CS2=1;
lcdwrite_cmd(0x3f);
CS1=1;CS2=0;
lcdwrite_cmd(0x3f);
}
//關(guān)LCD顯示
voidlcddispoff(void)
{
CS1=0;CS2=1;
lcdwrite_cmd(0x3e);
CS1=1;CS2=0;
lcdwrite_cmd(0x3e);
}
//對(duì)整屏清除,就是寫空的數(shù)據(jù)
voidlcdclrall(void)
{
Uchari,j;
for(i=0;i<8;i++)
{
CS1=0;CS2=1;
lcdwrite_cmd(i"0xb8);
lcdwrite_cmd(0x40);
for(j=64;j>0;j--)
{
lcdwrite_dat(0x00);
lcd_busy();
//P3_1=!P3_1;
}

CS1=1;CS2=0;
lcdwrite_cmd(i|0xb8);
lcdwrite_cmd(0x40);
for(j=64;j>0;j--)
{
lcdwrite_dat(0x00);
lcd_busy();
}
}
}

//LCD初始化
voidlcdini(void)
{
CS1=0;CS2=1;
lcdwrite_cmd(0xc0);//從第0行開始顯示
CS1=1;CS2=0;
lcdwrite_cmd(0xc0);
lcddispon();
}


/*在指定的行列上顯示12點(diǎn)陣的漢字*/

voidHZ12disp(UcharNowrow,UcharNowcol,UcharCHplace)
{
Uchari,tmp1,tmp2,k=12;
Uintj;
j=(CHplace-1)*24;
if((Nowrow%2)==0)//
{
switch(Nowrow)
{
case0:i=0;break;
case2:i=3;break;
default:i=6;
}
while(k!=0)
{
if(Nowcol<0x40)
{CS1=0;CS2=1;}
else
{if(Nowcol<0x80)
{CS1=1;CS2=0;}
else
{break;}
}
lcdwrite_cmd(i|0xb8);
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat(Hzk12[j]);
lcd_busy();
lcdwrite_cmd((i+1)|0xb8);//到下一頁(yè)
lcdwrite_cmd(Nowcol|0x40);
tmp1=lcdread_dat();
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat((Hzk12[j+12]&0x0f)|(tmp1&0xf0));
j++;
Nowcol++;
k--;
}
}
else
{
switch(Nowrow)
{
case1:i=1;break;
default:i=4;
}
while(k!=0)
{
if(Nowcol<0x40)
{CS1=0;CS2=1;}
else
{
if(Nowcol<0x80)
{CS1=1;CS2=0;}
else
{break;}
}
lcdwrite_cmd(i|0xb8);
lcdwrite_cmd(Nowcol|0x40);
tmp1=lcdread_dat();
tmp1=tmp1&0x0f;
tmp1=(Hzk12[j]<<4)|tmp1;
tmp2=(Hzk12[j+12]<<4)|(Hzk12[j]>>4);
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat(tmp1);
lcd_busy();
lcdwrite_cmd((i+1)|0xb8);
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat(tmp2);
j++;
Nowcol++;
k--;
}
}
}
//6*12點(diǎn)陣的ASC碼顯示程序
voidASC12disp(UcharNowrow,UcharNowcol,UcharASCplace)
{
Uchari,tmp1,tmp2,k=6;
Uintj;
j=ASCplace*12;
if((Nowrow%2)==0)//
{
switch(Nowrow)
{
case0:i=0;break;
case2:i=3;break;
default:i=6;
}
while(k!=0)
{
if(Nowcol<0x40)
{CS1=0;CS2=1;}
else
{if(Nowcol<0x80)
{CS1=1;CS2=0;}
else
{break;}
}
lcdwrite_cmd(i|0xb8);
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat(ASC12[j]);
lcd_busy();
lcdwrite_cmd((i+1)|0xb8);//到下一頁(yè)
lcdwrite_cmd(Nowcol|0x40);
tmp1=lcdread_dat();
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat((ASC12[j+6]&0x0f)|(tmp1&0xf0));
j++;
Nowcol++;
k--;
}
}
else
{
switch(Nowrow)
{
case1:i=1;break;
default:i=4;
}
while(k!=0)
{
if(Nowcol<0x40)
{CS1=0;CS2=1;}
else
{
if(Nowcol<0x80)
{CS1=1;CS2=0;}
else
{break;}
}
lcdwrite_cmd(i|0xb8);
lcdwrite_cmd(Nowcol|0x40);
tmp1=lcdread_dat();
tmp1=tmp1&0x0f;
tmp1=(ASC12[j]<<4)|tmp1;
tmp2=(ASC12[j+6]<<4)|(ASC12[j]>>4);
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat(tmp1);
lcd_busy();
lcdwrite_cmd((i+1)|0xb8);
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat(tmp2);
j++;
Nowcol++;
k--;
}
}
}





//以動(dòng)畫的形式顯示公司的標(biāo)志,入口為在水平的第幾個(gè)位置,現(xiàn)把它做,從32到1,由2張32X16的圖組成
voidflashlogo(UcharBmpcol)
{
Uchari,j,p;
//把當(dāng)前要用的區(qū)間清空
CS1=0,CS2=1;
lcdwrite_cmd(0xbe);
lcdwrite_cmd(0x40);
for(i=64;i>0;i--)
{
lcdwrite_dat(0x00);
lcd_busy();
}
lcdwrite_cmd(0xbf);
lcdwrite_cmd(0x40);
for(i=64;i>0;i--)
{
lcdwrite_dat(0x00);
lcd_busy();
}
//開始寫要設(shè)定的數(shù)據(jù)(左半邊)
lcdwrite_cmd(0xbe);
lcdwrite_cmd(0x40);
j=Bmpcol;
for(;j<=32;j++)
{
lcdwrite_dat(Bmp1zk[j-1]);
lcd_busy();
}
lcdwrite_cmd(0xbf);
lcdwrite_cmd(0x40);
j=Bmpcol;
for(;j<=32;j++)
{
lcdwrite_dat(Bmp1zk[j-1+32]);
lcd_busy();
}
//開始寫要設(shè)定的數(shù)據(jù)(右半邊)
j=Bmpcol;
lcdwrite_cmd(0xbe);
lcdwrite_cmd((32+j-1)|0x40);
p=0;
for(;j<=32;j++)
{
lcdwrite_dat(Bmp2zk[p++]);
lcd_busy();
}
j=Bmpcol;
lcdwrite_cmd(0xbf);
lcdwrite_cmd((32+j-1)|0x40);
p=0;
for(;j<=32;j++)
{
lcdwrite_dat(Bmp2zk[32+(p++)]);
lcd_busy();
}
}

//顯示一幅128X64的圖片,參數(shù)為圖片在bmp12864放置的第幾個(gè)圖
voidDisp128_64(UcharBMPplace)
{
Uchari,Nowcol,k;
Uintj;
j=(BMPplace-1)*1024;//計(jì)算出在圖表格中的起始位置
lcdclrall();
for(i=0;i<8;i++)
{Nowcol=0x00;
k=128;
while(k!=0)
{
if(Nowcol<0x40)
{CS1=0;CS2=1;}
else
{if(Nowcol<0x80)
{CS1=1;CS2=0;}
else
{break;}
}
lcdwrite_cmd(i|0xb8);
lcdwrite_cmd(Nowcol|0x40);
lcdwrite_dat(bmp12864[j]);
lcd_busy();
Nowcol++;
j++;
k--;
}
}
}
voiddelay(void)
{
Uchari,j,k;
for(i=0x02;i>0;i--)
{
for(j=0x96;j>0;j--)
{
for(k=0xfa;k>0;k--)
{
_nop_();
//_nop_();
}
}
}
}


/*----------------------I2C要用到的一些子程序---------------------------------*/
/***********************以下為一些用到的子程序*********************************/
/*延時(shí)子程序*/
voidDelay_1ms(Uchartime)
{
Ucharj;
while(time--)
{
for(j=163;j!=0;j--)
{;}
}
}

/*I2C的起動(dòng)程序*/
voidI2CStart(void)
{
SDA=1;
SomeNOP();
SCL=1;
SomeNOP();
SDA=0;
SomeNOP();
SCL=0;
SomeNOP();
}

/*I2C的停止程序*/
voidI2CStop(void)
{
SDA=0;
SomeNOP();
SCL=1;
SomeNOP();
SDA=1;
SomeNOP();
}

voidACK(void)//Acknowledge信號(hào)
{
SDA=0;
SomeNOP();
SCL=1;
SomeNOP();
SCL=0;
SomeNOP();
}

voidNACK(void)//沒(méi)有Acknowledge信號(hào)
{
SDA=1;
SomeNOP();
SCL=1;
SomeNOP();
SCL=0;
SomeNOP();
}

voidAutoACK(void)//在一定的時(shí)間內(nèi)自動(dòng)確定ACK的信號(hào)//
{
Uchari=0;
SCL=1;
SomeNOP();
while((SDA==1)&&(i<255))i++;
SCL=0;
SomeNOP();
}


/*I2C寫數(shù)據(jù)程序(向數(shù)據(jù)線上寫一個(gè)BYTE)*/
voidWritex(Ucharj)
{
Uchari,temp;
temp=j;
for(i=0;i<8;i++)//串行移位,先送高位,再送低位//
{
temp=temp<<1;
SCL=0;
SomeNOP();
SDA=CY;
SomeNOP();
SCL=1;
SomeNOP();
}
SCL=0;
SomeNOP();
SDA=1;
SomeNOP();
}
/*I2C讀數(shù)據(jù)程序(從數(shù)據(jù)線上讀出一個(gè)BYTE)返回值為讀出的數(shù)據(jù)(BYTE型)*/
UcharReadx(void)
{
Uchari,j,k=0;
SCL=0;
SomeNOP();
SDA=1;
for(i=0;i<8;i++)//串行移位,先讀出高位,后讀出低位//
{
SomeNOP();
SCL=1;
SomeNOP();
if(SDA==1)j=1;
elsej=0;
k=(k<<1)|j;
SCL=0;
}
SomeNOP();
return(k);//返回讀出的值//
}

//******************以下為對(duì)24CXX系列的讀寫程序******************************//
//*************24CXX的devICeaddress為寫0A0H,讀為0A1H*********************//
/*某個(gè)地址寫數(shù)據(jù)*/
voidX24_Write(UcharAddresshigh,UcharAddresslow,UcharWrite_date)
{
I2CStart();
Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
Writex(Write_date);
AutoACK();
I2CStop();
Delay_1ms(10);
}

/*對(duì)某個(gè)地址讀操作,函數(shù)值為讀出的數(shù)據(jù)*/
UcharX24_Read(UcharAddresshigh,UcharAddresslow)
{
Uchari;
I2CStart();
Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
I2CStart();
Writex(0xA1);
AutoACK();
i=Readx();
//ACK();//注意:這里不能有ACK應(yīng)答信號(hào)//
I2CStop();
Delay_1ms(0);
return(i);
}

/*對(duì)內(nèi)存中的數(shù)據(jù)塊寫入,入口為寫EEPROM的地址,內(nèi)存緩沖中的數(shù)據(jù)的起始地址(是IDATA的數(shù)據(jù))*/
voidX24_WritePage(UcharAddresshigh,UcharAddresslow,Ucharidata*Writeip)
{
Uchari;
I2CStart();
Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
for(i=0;i<64;i++)
{
Writex(*Writeip++);
AutoACK();
}
I2CStop();
}
/*把EEPROM中的數(shù)據(jù)讀出來(lái)存放在內(nèi)存緩沖中,起始地址為(是IDATA的數(shù)據(jù))*/
voidX24_ReadPage(UcharAddresshigh,UcharAddresslow,Ucharidata*Readip)
{
Uchari;
I2CStart();
Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
I2CStart();
Writex(0xA1);
AutoACK();
for(i=0;i<63;i++)//PAGE讀的時(shí)候最后一個(gè)BYTE不要ACK信號(hào)//
{
*Readip=Readx();
Readip=Readip++;
ACK();
}
*Readip=Readx();
NACK();
I2CStop();
Delay_1ms(0);
}


//*******************以下為對(duì)PCF8383/PCF8563的讀寫子程序********************//
//**********時(shí)鐘片deviceaddress的寫地址為0A2H,讀地址為0A3H******************//
/*對(duì)PCF8563的時(shí)鐘讀到內(nèi)存中,以IDATA指針開始的連續(xù)7個(gè)BYTE*/
//****讀出的內(nèi)容依次為“秒,分鐘,小時(shí),日,星期,月/世紀(jì),年********************//
//PCF8585依次為“秒,分鐘,小時(shí),日,星期月
voidGetPCF8563(Ucharidata*Getip)
{
Uchari;
I2CStart();
Writex(0xA2);
AutoACK();
Writex(0x02);//從秒地址開始讀//
AutoACK();
I2CStart();
Writex(0xA3);
AutoACK();
for(i=0;i<6;i++)
{
*Getip=Readx();
Getip=Getip++;
ACK();
}
*Getip=Readx();
NACK();
I2CStop();
Delay_1ms(0);
}
/*設(shè)定8563/8583的時(shí)間內(nèi)容依次為“秒,分鐘,小時(shí),日,星期,月/世紀(jì),年*/
//PCF8585依次為“秒,分鐘,小時(shí),日,星期月
voidSetPCF8563(Ucharidata*Setip)
{
Uchari;
I2CStart();
Writex(0xA2);
AutoACK();
Writex(0x02);
AutoACK();
for(i=0;i<7;i++)
{
Writex(*Setip++);
AutoACK();
}
I2CStop();
}

UcharReadPCF8563(UcharAddrePCF)
{
Uchari;
I2CStart();
Writex(0xA2);
AutoACK();
Writex(AddrePCF);
AutoACK();
I2CStart();
Writex(0xA3);
AutoACK();
i=Readx();
//ACK();//注意:這里不能有ACK應(yīng)答信號(hào)//
I2CStop();
Delay_1ms(0);
return(i);
}
voidWritePCF8563(UcharAddrePCF,UcharPCFdata)
{
I2CStart();
Writex(0xA2);
AutoACK();
Writex(AddrePCF);
AutoACK();
Writex(PCFdata);
AutoACK();
I2CStop();
Delay_1ms(10);
}



voidSetWaring(UcharWyear,UcharWmonth,UcharWday)
{
X24_Write(0x07,0xf0,Wyear);
X24_Write(0x07,0xf1,Wmonth);
X24_Write(0x07,0xf2,Wday);
}


/*返回值為1和0,1為已溢出,0為沒(méi)有溢出*/
bitCheckTime(void)
{
Ucharj,k;
j=X24_Read(0x07,0xcb);
k=ReadPCF8563(0x08);/*讀年的時(shí)間*/
if(k{
return(0);
}
else
{
if(k>j)
{
return(1);
}
else
{
j=X24_Read(0x07,0xCC);
k=ReadPCF8563(0x07)&0x1f;/*讀月的時(shí)間*/
if(k{
return(0);
}
else
{
if(k>j)
{
return(1);
}
else
{
j=X24_Read(0x07,0xcd);
k=ReadPCF8563(0x05)&0x3f;/*讀日的時(shí)間*/
if(k>j)return(1);
elsereturn(0);
}
}
}
}
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉