ds1302Word文档格式.docx
《ds1302Word文档格式.docx》由会员分享,可在线阅读,更多相关《ds1302Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
sbite="
^3;
/********************************************************************
*名称:
v_RTInputByte
*说明:
*功能:
往DS1302写入1Byte数据
*调用:
*输入:
ucDa写入的数据
*返回值:
无
***********************************************************************/
voidv_RTInputByte(unsignedcharucDa)
{
unsignedchari;
ACC=ucDa;
for(i="
8"
;
i>
0;
i--)
{
T_IO=ACC0;
/*相当于汇编中的RRC*/
T_CLK=1;
T_CLK=0;
ACC=ACC>
>
1;
}
}
ucharuc_RTOutputByte
从DS1302读取1Byte数据
ACC
unsignedcharuc_RTOutputByte(void)
1;
ACC7=T_IO;
return(ACC);
*
v_W1302
先写地址,后写命令/数据
往DS1302写入数据
v_RTInputByte()
ucAddr:
DS1302地址,ucDa:
要写的数据
voidv_W1302(unsignedcharucAddr,unsignedcharucDa)
T_RST=0;
T_RST=1;
v_RTInputByte(ucAddr);
/*地址,命令*/
v_RTInputByte(ucDa);
/*写1Byte数据*/
T_RST=0;
uc_R1302
先写地址,后读命令/数据
读取DS1302某地址的数据
v_RTInputByte(),uc_RTOutputByte()
DS1302地址
ucDa:
读取的数据
unsignedcharuc_R1302(unsignedcharucAddr)
unsignedcharucDa;
ucDa=uc_RTOutputByte();
/*读1Byte数据*/
return(ucDa);
v_BurstW1302T
先写地址,后写数据(时钟多字节方式)
往DS1302写入时钟数据(多字节方式)
pSecDa:
时钟数据地址格式为:
秒分时日月星期年控制
*8Byte(BCD码)1B1B1B1B1B1B1B1B
voidv_BurstW1302T(unsignedchar*pSecDa)
v_W1302(0x8e,0x00);
/*控制命令,WP="
0"
写操作?
*/
v_RTInputByte(0xbe);
/*0xbe:
时钟多字节写命令*/
for(i="
i>
i--)/*8Byte=7Byte时钟数据+1Byte控制*/
v_RTInputByte(*pSecDa);
/*写1Byte数据*/
pSecDa++;
v_BurstR1302T
先写地址,后读命令/数据(时钟多字节方式)
读取DS1302时钟数据
秒分时日月星期年
*7Byte(BCD码)1B1B1B1B1B1B1B
voidv_BurstR1302T(unsignedchar*pSecDa)
v_RTInputByte(0xbf);
/*0xbf:
时钟多字节读命令*/
i--)
*pSecDa=uc_RTOutputByte();
v_BurstW1302R
先写地址,后写数据(寄存器多字节方式)
往DS1302寄存器数写入数据(多字节方式)
pReDa:
寄存器数据地址
voidv_BurstW1302R(unsignedchar*pReDa)
v_RTInputByte(0xfe);
31"
i--)/*31Byte寄存器数据*/
v_RTInputByte(*pReDa);
pReDa++;
uc_BurstR1302R
先写地址,后读命令/数据(寄存器多字节方式)
读取DS1302寄存器数据
voidv_BurstR1302R(unsignedchar*pReDa)
v_RTInputByte(0xff);
i--)/*31Byte寄存器数据*/
*pReDa=uc_RTOutputByte();
v_Set1302
设置初始时间
v_W1302()
初始时间地址。
初始时间格式为:
voidv_Set1302(unsignedchar*pSecDa)
unsignedcharucAddr=0x80;
for(i=7;
i--)
v_W1302(ucAddr,*pSecDa);
/*秒分时日月星期年*/
ucAddr+=2;
v_W1302(0x8e,0x80);
1"
写保护?
v_Get1302
读取DS1302当前时间
uc_R1302()
ucCurtime:
保存当前时间地址。
当前时间格式为:
voidv_Get1302(unsignedchar
ucCurtime[])
unsignedcharucAddr=0x81;
i<
7;
i++)
ucCurtime[i]=uc_R1302(ucAddr);
/*格式为:
秒分时日月
星期年*/
ucAddr+=2;
/********************************************************************************/
//lcd写命令使能
voidenable(void)
unsignedcharj,k;
rs="
rw="
_nop_();
e="
for(k="
10"
k>
k--)
for(j="
245"
j>
j--);
/**********************************************************************/
//lcd写数据使能
voidwriter(void)
}
/********************************************************************/
//初始化
voidstart(void)
mcuport2=0x01;
//
enable();
mcuport2=0x38;
mcuport2=0x0f;
mcuport2=0x06;
/*********************************************************************
延时40MS
*********************************************************************/
voiddelay40ms(void)
unsignedchari,j;
for(i="
40"
248"
unsignedchar
key4x4()
unsignedchartemp;
unsignedcharkey,keydata;
keydata="
0xff"
while(keydata==0xff)
{
keydata="
mcuport1=0xff;
mcuport1=mcuport1&
0xef;
temp="
mcuport1"
temp"
&
0x0f;
if(temp!
=0x0f)
delay40ms();
switch(temp)
case0x0e:
key="
break;
case0x0d:
case0x0b:
2"
case0x07:
3"
key"
0xdf;
4"
5"
6"
7"
0xbf;
P3"
9"
11"
0x7f;