📄 ds1302.c
字号:
{ if(time[9]>0)
time[9]=time[9]-1;
Keybit2=0;
}
}break;
case 10: { if(!Mu) //年
{Menu=9;
Keybit2=0;
}
if(!Up)
{ if(time[10]<9)
time[10]=time[10]+1;
Keybit2=0;
}
if(!Dn)
{ if(time[10]>0)
time[10]=time[10]-1;
Keybit2=0;
}
}break;
////////////////////////////////////////////////////////////////////////////////////////////////////////
case 11: { if(!Mu) //分
{ delay(5);
while(!Mu)
{delay(5);}
delay(5);
x24c02_write(0x10,music[0]);
_nop_();
_nop_();
x24c02_write(0x11,music[1]);
_nop_();
_nop_();
x24c02_write(0x12,music[2]);
_nop_();
_nop_();
x24c02_write(0x13,music[3]);
_nop_();
_nop_();
Keybit2=0;
Menu=10;
}
if(!Up)
{ if(music[0]<9)
music[0]=music[0]+1;
Keybit2=0;
}
if(!Dn)
{ if(music[0]>0)
music[0]=music[0]-1;
Keybit2=0;
}
}break;
case 12: { if(!Mu) //分
{Menu=11;
Keybit2=0;
}
if(!Up)
{ if(music[1]<5)
music[1]=music[1]+1;
Keybit2=0;
}
if(!Dn)
{ if(music[1]>0)
music[1]=music[1]-1;
Keybit2=0;
}
}break;
case 13: { if(!Mu) //时
{Menu=12;
Keybit2=0;
}
if(!Up)
{
if(music[3]==2)
{if(music[2]<3)
music[2]=music[2]+1;
}
if(music[3]<=1)
{if(music[2]<9)
music[2]=music[2]+1;
}
Keybit2=0;
}
if(!Dn)
{
if(music[2]>0)
music[2]=music[2]-1;
Keybit2=0;
}
}break;
case 14: { if(!Mu) //时
{Menu=13;
Keybit2=0;
}
if(!Up)
{ if(music[3]<2)
music[3]=music[3]+1;
Keybit2=0;
}
if(!Dn)
{ if(music[3]>0)
music[3]=music[3]-1;
Keybit2=0;
}
}break;
//////////////////////////////////////////////////////////////////////
default: break;
}
}
}
if(Mu&&Up&&Dn)
{delay(10);
if(Mu&&Up&&Dn)
Keybit2=1;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////子程序包括对DS18b20的操作等///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
void ini(void)
{ DQ=0;
delay1(100);
DQ=1;
delay1(10);
if(DQ==0)
{DQ=1;
ds1820bit=0;
}
else ds1820bit=1;
delay1(90);
}
void wrcom(uchar com)
{
uchar a;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<0);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<1);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<2);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<3);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<4);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<5);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<6);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
DQ=1;
_Nop();;
_Nop();;
a=com&(0x01<<7);
if(a==0)DQ=0;
else DQ=1;
delay1(5);
DQ=1;
_Nop();;
_Nop();;
}
uchar rbyte(void)
{ uchar i;
uchar a;
a=0;
for(i=0;i<8;i++)
{
DQ=1;
_Nop();;
_Nop();;
DQ=0;
_Nop();;
_Nop();;
_Nop();;
DQ=1;
delay1(1);
if(DQ==0) a=a;
else a=(0x01<<i)|a;
delay1(10);
}
return(a);
}
void ds1(void)
{
ini();
_Nop();;
_Nop();;
wrcom(0xcc);
_Nop();;
_Nop();;
wrcom(0x44);
EA=1;
_Nop();;
_Nop();;
}
void ds2(void)
{ uchar i;
ini();
_Nop();;
_Nop();;
wrcom(0xcc);
_Nop();;
_Nop();;
wrcom(0xbe);
_Nop();;
_Nop();;
for(i=0;i<2;i++)
{
Scrtp[i]=rbyte();
_Nop();;
_Nop();;
}
}
void ds3(void)
{uchar d,c;
uint h;
d=Scrtp[0];
c=Scrtp[1];
h=Scrtp[1];
h=h*0x100+d;
if(!(0==c>>3))
{h=~h+1; negbit=1;}
else {negbit=0;}
temp=h;
temp=(temp*0x271)/0x2710;
if(!temp)
{negbit=0;}
Xsb=temp/100;
if(Xsb==0)
{Xsb=0xc;}
if(negbit)
{Xsb=0xd;}
Xss=temp/10;
Xsg=temp%10;
}
//////////////////////////////////////////////////////////
//`````````````````````````````````````````````````````````````````````````````````````````````
///////////////////////////主程序////////////////////////////////////
/////////////////////////////////////////////////////////////////////
main()
{
_nop_();
_nop_();
x24c02_init();
music[0]=x24c02_read(0x10);
_nop_();
_nop_();
music[1]=x24c02_read(0x11);
_nop_();
_nop_();
music[2]=x24c02_read(0x12);
_nop_();
_nop_();
music[3]=x24c02_read(0x13);
_nop_();
_nop_();
/////////////////////////////////////////////////////////
while(1)
{_nop_();_nop_();
Get1302();
_nop_();_nop_();
show();
ds1();
show();
ds2();
show();
ds3();
show();
////////////////////////////////////////////////////////////////////
if((pp&0x0f)==0)
{pp=pp|0X0f;pp++;}
P1=--pp;
xd=pd;
xsd=ucCurtime[0];
///////////////////////////===按键=====================================================
if(!Keybit1) //有否按了三下
{
if(!Mu)
{delay(10);
if(!Mu)
{Keybit0=1;}
}
if(Keybit0)
{
if(Mu)
{Keytemp0=Keytemp0+1;
Keybit0=0;
}
}
if(Keytemp0>=3)
{Keytemp0=0;
Keybit1=1;
Menu=14;
/////////////////////////
time[1]=(ucCurtime[1]&0xf0)>>4;
time[0]=ucCurtime[1]&0x0f;
time[3]=(ucCurtime[2]&0xf0)>>4;
time[2]=ucCurtime[2]&0x0f;
time[5]=(ucCurtime[3]&0xf0)>>4;
time[4]=ucCurtime[3]&0x0f;
time[7]=(ucCurtime[4]&0xf0)>>4;
time[6]=ucCurtime[4]&0x0f;
time[8]=ucCurtime[5]&0x0f;
time[10]=(ucCurtime[6]&0xf0)>>4;
time[9]=ucCurtime[6]&0x0f;
}
}
else //进入设置菜单
{
Key(Menu);
show();
}
////////////========================================
}
}
//////////////////////////////////////////////////////////////////////////
///////////////////////////DS1302////////////////////////////////////////
/*********************************************************************/
void RTInputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucDa); /* 写1Byte数据*/
T_CLK = 1;
T_RST = 0;
}
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
/*
void BurstW1302T(uchar *pWClock)
{
uchar i;
W1302(0x8e,0x00);
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbe);
for (i = 8; i>0; i--)
{
RTInputByte(*pWClock);
pWClock++;
}
T_CLK = 1;
T_RST = 0;
}
void BurstR1302T(uchar *pRClock)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbf);
for (i=8; i>0; i--)
{
*pRClock = RTOutputByte();
pRClock++;
}
T_CLK = 1;
T_RST = 0;
}
/*
void BurstW1302R(uchar *pWReg)
{
uchar i;
W1302(0x8e,0x00);
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xfe);
for (i=31; i>0; i--)
{
RTInputByte(*pWReg);
pWReg++;
}
T_CLK = 1;
T_RST = 0;
}
/*
void BurstR1302R(uchar *pRReg)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xff);
for (i=31; i>0; i--)
{
*pRReg = RTOutputByte();
pRReg++;
}
T_CLK = 1;
T_RST = 0;
}
*/
void Set1302(uchar *pClock)
{
uchar i;
uchar ucAddr = 0x80;
pClock=writ1302;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i =7; i>0; i--)
{
W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
pClock++;
ucAddr +=2;
}
W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
void Get1302()
{
uchar i;
uchar ucAddr = 0x81;
for (i=0; i<7; i++)
{
ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
////////////////////////////
miaoh=(ucCurtime[0]&0xf0)>>4;
miaol=ucCurtime[0]&0x0f;
fenh=(ucCurtime[1]&0xf0)>>4;//1
fenl=ucCurtime[1]&0x0f;//0
hourh=(ucCurtime[2]&0xf0)>>4;//3
hourl=ucCurtime[2]&0x0f;//2
hao=(ucCurtime[3]&0xf0)>>4;//
hao1=ucCurtime[3]&0x0f;
yue=(ucCurtime[4]&0xf0)>>4;
yue1=ucCurtime[4]&0x0f;
xiqi=ucCurtime[5]&0x0f;
ni=(ucCurtime[6]&0xf0)>>4;
ni1=ucCurtime[6]&0x0f;
if((fenl==music[0])&&(fenh==music[1])&&(hourl==music[2])&&(hourh==music[3]))
_nop_();
else
_nop_();
}
////////////////////////////////////////////////////////////////////
///////////////////////程序结束////END////////////////////////////////
////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -