?? 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 + -