📄 shiz.c
字号:
uchar show[6];
uchar key;
bit ff;
uchar jm,*pt,i;
uchar flag = 1;
bit nflag,pflag;
pt = M41T0_Receive();
for(i = 0;i < 8;i++)day[i] = *(pt+i);
c_flash = 1;m_flash = 0;s_flash = 0;
while(1)
{if(c_flash){if(nflag){switch(day[2]&0x3f)
{case 0: day[2] = 35;break;
case 16:day[2] = 9;break;
case 32:day[2] = 25;break;
default:day[2] = day[2] - 1;break;
}
nflag = 0;
}
if(pflag){switch(day[2]&0x3f)
{case 9: day[2] = 16;break;
case 25:day[2] = 32;break;
case 35:day[2] = 0;break;
default:day[2] = day[2] + 1;break;
}
pflag = 0;
}
if(day[2]>35)day[2] = 0; //防止超阈值数据
} //时
if(m_flash){if(nflag){switch(day[1]&0x7f)
{case 0: day[1] = 89;break;
case 16:day[1] = 9;break;
case 32:day[1] = 25;break;
case 48:day[1] = 41;break;
case 64:day[1] = 57;break;
case 80:day[1] = 73;break;
default:day[1] = day[1] - 1;break;
}
nflag = 0;
}
if(pflag){switch(day[1]&0x7f)
{case 9: day[1] = 16;break;
case 25:day[1] = 32;break;
case 41:day[1] = 48;break;
case 57:day[1] = 64;break;
case 73:day[1] = 80;break;
case 89:day[1] = 0;break;
default:day[1] = day[1] + 1;break;
}
pflag = 0;
}
if(day[1]>89)day[1] = 0; //防止超阈值数据
} //分
if(s_flash){if(nflag){switch(day[0]&0x7f)
{case 0: day[0] = 89;break;
case 16:day[0] = 9;break;
case 32:day[0] = 25;break;
case 48:day[0] = 41;break;
case 64:day[0] = 57;break;
case 80:day[0] = 73;break;
default:day[0] = day[0] - 1;break;
}
nflag = 0;
}
if(pflag){switch(day[0]&0x7f)
{case 9: day[0] = 16;break;
case 25:day[0] = 32;break;
case 41:day[0] = 48;break;
case 57:day[0] = 64;break;
case 73:day[0] = 80;break;
case 89:day[0] = 0;break;
default:day[0] = day[0] + 1;break;
}
pflag = 0;
}
if(day[0]>89)day[0] = 0; //防止超阈值数据
}
//秒
show[0] = tab[day[0]&0x0f]; //秒个位
show[1] = tab[(day[0]&0x70)>>4]; //秒十位
show[2] = tab[day[1]&0x0f]; //分个位
show[3] = tab[(day[1]&0x70)>>4]; //分十位
show[4] = tab[day[2]&0x0f]; //时个位
show[5] = tab[(day[2]&0x30)>>4]; //时十位
if(c_flash)
{if(ff){show[4] = 0x7f;
show[5] = 0xff;
if(jm++ > 15){ff = 0;jm = 0;}
}
else if(jm++ > 60){ff = 1; jm = 0;} //闪烁频率
}
if(m_flash)
{if(ff){show[2] = 0x7f;
show[3] = 0xff;
if(jm++ > 15){ff = 0;jm = 0;}
}
else if(jm++ > 60){ff = 1; jm = 0;} //闪烁频率
}
if(s_flash)
{if(ff){show[0] = 0xff;
show[1] = 0xff;
if(jm++ > 15){ff = 0;jm = 0;}
}
else if(jm++ > 60){ff = 1; jm = 0;} //闪烁频率
}
display(show);
key = RMT_SCAN(); //遥控
switch(key)
{case 4:flag = flag + 1; //SWITCH_KEY,时段切换
if(flag > 3)flag = 1;
switch(flag){case 1:c_flash = 1;m_flash = 0;s_flash = 0;break;
case 2:c_flash = 0;m_flash = 1;s_flash = 0;break;
case 3:c_flash = 0;m_flash = 0;s_flash = 1;break;
default:break;
}
break;
case 8:pflag = 1;break; //ADJUST_KEY,数字增加
case 2:nflag = 1;break; //TIMER_KEY,数字减小
case 1: M41T0_Send (day); //CLOCK_KEY,保存退出
goto pre_end;
default:break;
}
}
pre_end:
c_flash = 0;
m_flash = 0;
s_flash = 0;
}
void start(void)
{SDA=1;
SCL=1;
nop(1);
SDA=0;
nop(1);
SCL=0;
}
void stop(void)
{SDA=0;
SCL=1;
nop(1);
SDA=1;
nop(1);
SCL=0;
}
void ack(bit a)
{ if(a){SDA=1;
SCL=1;
nop(1);
SCL=0;
SDA=0;
}
else {SDA=0;
SCL=1;
nop(1);
SCL=0;
SDA=1;
}
}
void wrbyt(uchar j)
{ uchar i,con;
con = 0;
for (i=0;i<8;i++)
{if (j&0x80)
{SDA=1;
SCL=1;
nop(1);
SCL=0;
SDA=0;
}
else
{SDA=0;
SCL=1;
nop(1);
SCL=0;
}
j<<=1;
}
SDA=1;
SCL=1;
nop(1);
if(SDA)ibflag=1;
else ibflag=0;
nop(1);
SCL=0;
}
uchar rdbyt(void)
{ uchar i;
uchar dat = 0;
for(i=0;i<8;i++)
{SDA=1; //输入方式
SCL=1;
nop(1);
dat<<=1;
if(SDA) dat|=0x01;
nop(1);
SCL=0;
}
return(dat);
}
//时钟芯片写入程序
//参数:3字节数组
void M41T0_Send (uchar *p)
{uchar i;
aa:;
start();
wrbyt(0xd0);
if(ibflag){stop();goto aa;}
wrbyt(0x00);
if(ibflag){stop();goto aa;}
for(i = 0;i < 8;i++)
{wrbyt(p[i]);
if(ibflag){stop();goto aa;}
}
stop();
}
//时钟芯片读出程序
//参数:返回3字节数组
uchar *M41T0_Receive (void)
{uchar pt[8];
uchar i;
aa:;
start();
wrbyt(0xd0);
if(ibflag){stop();goto aa;}
wrbyt(0x00);
if(ibflag){stop();goto aa;}
ab:;
start();
wrbyt(0xd1);
if(ibflag){stop();goto ab;}
for(i=0;i<7;i++)
{pt[i]=rdbyt();
ack(0);
}
pt[7]=rdbyt();
ack(1);
stop();
return(pt);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -