📄 c51.c
字号:
char CompDay(uchar addH,uchar addM,uchar addL)
{
char charA,charB;
if(addH%4==0) {testbit=1;}
else {testbit=0;}
NowIC_BlankAddress =0;
charB=addM; charB--;
for(charA=0;charA<charB;charA++)
{
if(testbit==1)
{NowIC_BlankAddress +=monthA[charA];} //闰年
else
{NowIC_BlankAddress +=monthB[charA];}
} //for
NowIC_BlankAddress +=addL;
NowIC_BlankAddress += (uint)(addH*365); // a+=c;
addL=year0;
if(addH%4==0) {testbit=1;}
else {testbit=0;}
NowIC_StartAddress =0;
charB=month0; charB--;
for(charA=0;charA<charB;charA++)
{
if(testbit==1)
{NowIC_StartAddress +=monthA[charA];} //闰年
else
{NowIC_StartAddress +=monthB[charA];}
} //for
addL=day0; NowIC_StartAddress +=addL;
addL=year0; NowIC_StartAddress +=(uint)(addH*365); // b+=c;
charA=NowIC_StartAddress -NowIC_BlankAddress ;
return charA;
}
uchar HexToDec(uchar abc) //十六进制到十进制 : 25H-->25
{
uchar i,j;
i=abc/16;j=abc%16;
i=i*10;
i+=j;
return i;}
uchar DecToHex(uchar abc) //十进制到十六进制: 25-->25H
{
uchar i,j;
i=abc/10;j=abc%10;
i=i*16;
i+=j;
return i;
}
//##################################################################################
void SegMentLcd_outbit(uchar i)
{
delay(10);
SegMentLcd_DATA=i;
SegMentLcd_CLK =0;
delay(10);
SegMentLcd_CLK=1;
}
void SegMentLcd_SystemON()
{
SegMentLcd_CS=0;
SegMentLcd_outbit(1);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0); //a
SegMentLcd_outbit(0); //b
SegMentLcd_outbit(0);
SegMentLcd_outbit(1); //c
SegMentLcd_outbit(0);
SegMentLcd_CS=1;
}
void SegMentLcd_ON()
{
//-----------LCD_ON---------------
SegMentLcd_CS=0;
SegMentLcd_outbit(1); SegMentLcd_outbit(0); SegMentLcd_outbit(0);
SegMentLcd_outbit(0); SegMentLcd_outbit(0);
SegMentLcd_outbit(0); SegMentLcd_outbit(0);
SegMentLcd_outbit(0); SegMentLcd_outbit(0);
SegMentLcd_outbit(1); SegMentLcd_outbit(1); SegMentLcd_outbit(0);
SegMentLcd_CS=1;
//-----------BIAS & COM---------------
SegMentLcd_CS=0;
SegMentLcd_outbit(1);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(0);
SegMentLcd_outbit(1);
SegMentLcd_outbit(0);
SegMentLcd_outbit(1); //a
SegMentLcd_outbit(0); //b
SegMentLcd_outbit(0);
SegMentLcd_outbit(1); //c
SegMentLcd_outbit(0);
SegMentLcd_CS=1;
}
void Disp_SegMentLcd(uchar whichAddress,uchar D0_3)
{
uchar abc;
SegMentLcd_CS=0;
SegMentLcd_outbit(1);
SegMentLcd_outbit(0);
SegMentLcd_outbit(1);
abc=whichAddress>>5;abc=abc& 0x01; SegMentLcd_outbit(abc);
abc=whichAddress>>4;abc=abc& 0x01;SegMentLcd_outbit(abc);
abc=whichAddress>>3;abc=abc& 0x01;SegMentLcd_outbit(abc);
abc=whichAddress>>2;abc=abc& 0x01;SegMentLcd_outbit(abc);
abc=whichAddress>>1;abc=abc& 0x01;SegMentLcd_outbit(abc);
abc=whichAddress&0x01 ;abc=abc& 0x01;SegMentLcd_outbit(abc);
abc=D0_3>>3;abc=abc& 0x01; SegMentLcd_outbit(abc);
abc=D0_3>>2;abc=abc& 0x01; SegMentLcd_outbit(abc);
abc=D0_3>>1;abc=abc& 0x01; SegMentLcd_outbit(abc);
abc=D0_3&0x01;abc=abc& 0x01;SegMentLcd_outbit(abc);
SegMentLcd_outbit(1);
SegMentLcd_CS=1;
}
void CLSSegMentLcd() //LCD清屏
{
uchar a;
for(a=0;a<28;a++) {Disp_SegMentLcd(a,0);}
}
/*
//---那一个序列号---要显示的数据-----是否出小数点----
void DispSegmentNumber(uchar whichNO,uchar mydata,uchar PointBit) //在数字区进行数据显示
{
whichNO--; whichNO= whichNO<<1;
switch(mydata)
{
/*
switch(mydata)
{
case 0: // Disp_SegMentLcd(whichNO,0x0f); whichNO++ ;Disp_SegMentLcd(whichNO,0x0a);if (PointBit==1){Disp_SegMentLcd(whichNO,0x0b);}break;//0
case 1: // Disp_SegMentLcd(whichNO,0x00);whichNO++; Disp_SegMentLcd(whichNO,0x0a); if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0b);} break;//1
case 2: //Disp_SegMentLcd(whichNO,0x0b);whichNO++; Disp_SegMentLcd(whichNO,0x0c);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0d);} break;//2
case 3: //Disp_SegMentLcd(whichNO,0x09);whichNO++; Disp_SegMentLcd(whichNO,0x0e);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0f);} break;//3
case 4: //Disp_SegMentLcd(whichNO,0x04);whichNO++; Disp_SegMentLcd(whichNO,0x0e); if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0f);} break;//4
case 5: //Disp_SegMentLcd(whichNO,0x0d);whichNO++; Disp_SegMentLcd(whichNO,0x06);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x07);} break;//5
case 6: // Disp_SegMentLcd(whichNO,0x0f);whichNO++; Disp_SegMentLcd(whichNO,0x06); if (PointBit==1){Disp_SegMentLcd(whichNO,0x07);} break;//6
case 7: //Disp_SegMentLcd(whichNO,0x08);whichNO++; Disp_SegMentLcd(whichNO,0x0a);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0b);} break;//7
case 8: // Disp_SegMentLcd(whichNO,0x0f);whichNO++; Disp_SegMentLcd(whichNO,0x0e);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0f);} break;//8
case 9: //Disp_SegMentLcd(whichNO,0x0d);whichNO++; Disp_SegMentLcd(whichNO,0x0e);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0f);} break;//9
case 10:// Disp_SegMentLcd(whichNO,0x0e);whichNO++; Disp_SegMentLcd(whichNO,0x0e);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0f);} break; //a
case 11:// Disp_SegMentLcd(whichNO,0x07);whichNO++; Disp_SegMentLcd(whichNO,0x06);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x07);} break; //b
case 12:// Disp_SegMentLcd(whichNO,0x0f);whichNO++; Disp_SegMentLcd(whichNO,0x00);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x01);} break; //c
case 13://Disp_SegMentLcd(whichNO,0x03);whichNO++; Disp_SegMentLcd(whichNO,0x0e); if (PointBit==1) {Disp_SegMentLcd(whichNO,0x0f);}break; //d
case 14:// Disp_SegMentLcd(whichNO,0x0f);whichNO++; Disp_SegMentLcd(whichNO,0x04);if (PointBit==1) {Disp_SegMentLcd(whichNO,0x05);}break; //e
case 15:// Disp_SegMentLcd(whichNO,0x0e);whichNO++; Disp_SegMentLcd(whichNO,0x04); if (PointBit==1){Disp_SegMentLcd(whichNO,0x05);}break; //f
case 16: Disp_SegMentLcd(whichNO,0x0f);whichNO++; Disp_SegMentLcd(whichNO,0x02); if (PointBit==1){Disp_SegMentLcd(whichNO,0x03);}break;//G
case 17: Disp_SegMentLcd(whichNO,0x06);whichNO++; Disp_SegMentLcd(whichNO,0x0E); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0F);}break; //H
case 18: Disp_SegMentLcd(whichNO,0x06);whichNO++; Disp_SegMentLcd(whichNO,0x00); if (PointBit==1){Disp_SegMentLcd(whichNO,0x01);}break;//I
case 19: Disp_SegMentLcd(whichNO,0x01);whichNO++; Disp_SegMentLcd(whichNO,0x0a); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0b);}break;//J
case 20: Disp_SegMentLcd(whichNO,0x06);whichNO++; Disp_SegMentLcd(whichNO,0x0a); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0b);}break;//K
case 21: Disp_SegMentLcd(whichNO,0x07);whichNO++; Disp_SegMentLcd(whichNO,0x00); if (PointBit==1){Disp_SegMentLcd(whichNO,0x01);}break;//L
case 22: Disp_SegMentLcd(whichNO,0x0d);whichNO++; Disp_SegMentLcd(whichNO,0x08); if (PointBit==1){Disp_SegMentLcd(whichNO,0x09);}break;//M
case 23: Disp_SegMentLcd(whichNO,0x02);whichNO++; Disp_SegMentLcd(whichNO,0x06); if (PointBit==1){Disp_SegMentLcd(whichNO,0x07);}break;//N
case 24: Disp_SegMentLcd(whichNO,0x03);whichNO++; Disp_SegMentLcd(whichNO,0x06); if (PointBit==1){Disp_SegMentLcd(whichNO,0x07);}break;//Q
case 25: Disp_SegMentLcd(whichNO,0x0e);whichNO++; Disp_SegMentLcd(whichNO,0x0c); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0d);}break;//P
case 26: Disp_SegMentLcd(whichNO,0x0c);whichNO++; Disp_SegMentLcd(whichNO,0x0e); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0f);}break;//Q
case 27: Disp_SegMentLcd(whichNO,0x02);whichNO++; Disp_SegMentLcd(whichNO,0x04); if (PointBit==1){Disp_SegMentLcd(whichNO,0x05);}break;//R
case 28: Disp_SegMentLcd(whichNO,0x05);whichNO++; Disp_SegMentLcd(whichNO,0x06); if (PointBit==1){Disp_SegMentLcd(whichNO,0x07);}break;//S
case 29: Disp_SegMentLcd(whichNO,0x07);whichNO++; Disp_SegMentLcd(whichNO,0x04); if (PointBit==1){Disp_SegMentLcd(whichNO,0x05);}break;//T
case 30: Disp_SegMentLcd(whichNO,0x07);whichNO++; Disp_SegMentLcd(whichNO,0x0a); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0b);}break;//U
case 31: Disp_SegMentLcd(whichNO,0x03);whichNO++; Disp_SegMentLcd(whichNO,0x02); if (PointBit==1){Disp_SegMentLcd(whichNO,0x03);}break;//V
case 32: Disp_SegMentLcd(whichNO,0x0b);whichNO++; Disp_SegMentLcd(whichNO,0x02); if (PointBit==1){Disp_SegMentLcd(whichNO,0x03);}break;//W
case 33: Disp_SegMentLcd(whichNO,0x09);whichNO++; Disp_SegMentLcd(whichNO,0x04); if (PointBit==1){Disp_SegMentLcd(whichNO,0x05);}break;//X
case 34: Disp_SegMentLcd(whichNO,0x05);whichNO++; Disp_SegMentLcd(whichNO,0x0e); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0f);}break;//Y
case 35: Disp_SegMentLcd(whichNO,0x03);whichNO++; Disp_SegMentLcd(whichNO,0x0c); if (PointBit==1){Disp_SegMentLcd(whichNO,0x0d);}break;//Z
case 0xf0: Disp_SegMentLcd(whichNO,0x00);whichNO++; Disp_SegMentLcd(whichNO,0x00);break; //不显示
case 0xe0: Disp_SegMentLcd(whichNO,0x00);whichNO++; Disp_SegMentLcd(whichNO,0x04);break; //-
case 0xf0: Disp_SegMentLcd(whichNO,0x00);whichNO++; Disp_SegMentLcd(whichNO,0x00);break; //不显示
case 0xe0: Disp_SegMentLcd(whichNO,0x00);whichNO++; Disp_SegMentLcd(whichNO,0x04);break; //-
}
}
*/
uchar code NumberCharA[36]={0x0f,0x00,0x0b,0x09, 0x04,0x0d,0x0f,0x08, 0x0f,0x0d,0x0e,0x07, 0x0f,0x03,0x0f,0x0e,
0x0f,0x06,0x06,0x01, 0x06,0x07,0x0d,0x02, 0x03,0x0e,0x0c,0x02, 0x05,0x07,0x07,0x03, 0xb,0x09,0x05,0x03};
uchar code NumberCharB[36]={0x0a,0x0a,0x0c,0x0e, 0x0e,0x06,0x06,0x0a, 0x0e,0x0e,0x0e,0x06, 0x00,0x0e,0x04,0x04,
0x02,0x0e,0x00,0x0a, 0x0a,0x00,0x08,0x06, 0x06,0x0c,0x0e,0x04, 0x06,0x04,0x0a,0x02 ,0x02,0x04,0x0e,0x0c};
//---那一个序列号---要显示的数据-----是否出小数点----
void DispSegmentNumber(uchar whichNO,uchar mydata,uchar PointBit) //在数字区进行数据显示
{
whichNO--; whichNO= whichNO<<1;
if (mydata==0xf0)
{ Disp_SegMentLcd(whichNO,0x00);whichNO++; Disp_SegMentLcd(whichNO,0x00); } //不显示
else if(mydata==0xe0)
{ Disp_SegMentLcd(whichNO,0x00);whichNO++; Disp_SegMentLcd(whichNO,0x04); } //-
else
{ Disp_SegMentLcd(whichNO,NumberCharA[mydata]);
whichNO++;
Disp_SegMentLcd(whichNO,NumberCharB[mydata]);
if (PointBit==1)
{ PointBit=NumberCharB[mydata];PointBit++; Disp_SegMentLcd(whichNO,PointBit);}
}
}
void ClsSegmentNumber() //清除数字区的全部显示
{
DispSegmentNumber(1,0x0f0,0); //此处不显示
DispSegmentNumber(2,0x0f0,0); //此处不显示
DispSegmentNumber(3,0x0f0,0); //此处不显示
DispSegmentNumber(4,0x0f0,0); //此处不显示
DispSegmentNumber(5,0x0f0,0); //此处不显示
DispSegmentNumber(6,0x0f0,0); //此处不显示
DispSegmentNumber(7,0x0f0,0); //此处不显示
DispSegmentNumber(8,0x0f0,0); //此处不显示
}
void DispErrCode(uchar abc)
{
Disp_SegMentLcd(26,0X08);
DispSegmentNumber(1,14,0); DispSegmentNumber(2,27,0); DispSegmentNumber(3,27,0); //ERR.
DispSegmentNumber(4,24,0);
DispSegmentNumber(5,27,1); DispSegmentNumber(6,0xf0,0); DispSegmentNumber(7,abc/10,0); //-abc-
DispSegmentNumber(8,abc%10,0);}
/*
void WaitDebug(uchar abc)
{
CLSSegMentLcd();
DispSegmentNumber(1,abc/100,0);
DispSegmentNumber(2,abc/10%10,0);
DispSegmentNumber(3,abc%10,0);
delay(30000); delay(30000);delay(30000); delay(30000);
}
*/
uchar ReturnSwitchState() //读取开关量的状态
{
uchar abc;
ReadSwitchState=0;
P0=0xff; //在作为输入脚的时候,应先写入0xff;
abc=P0;
ReadSwitchState=1;
return abc;
}
//##################################################################################
void SetSpecialAllocation (uchar index,uchar mode) //设置特殊事故的分配序列
{
// uchar code ClsBits[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
// uchar code SetBits[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar a;
if(index<9)
{
IIC_READ_ONEBYTE(0,0x17,1);a=ICC_DATA;
index=8-index;
if(mode==0xa0) //置0
{
a=ClsBits[index]&a;
}
else //置1
{
a=SetBits[index]|a;
}
ICC_DATA=a; ImportInfoEnable =0xaa; IIC_WRITE_ONEBYTE(0,0x17,1);
}
else
{
IIC_READ_ONEBYTE(0,0x18,1);a=ICC_DATA;
index=index-8;
index=8-index;
if(mode==0xa0) //置0
{
a=ClsBits[index]&a;
}
else //置1
{
a=SetBits[index]|a;
}
ICC_DATA=a; ImportInfoEnable =0xaa; IIC_WRITE_ONEBYTE(0,0x18,1);
}
}
void CLSALLSetRecord() //清除全部的设置日志记录
{
uchar a,b;
uint BaseAdd,SeekAdd;
SeekAdd =SetTimeRecordAddess + 490;
//得到应该存贮的基地址!
for(BaseAdd=SetTimeRecordAddess ;BaseAdd<SeekAdd;BaseAdd+=7)
{
a=BaseAdd/256; b=BaseAdd%256;
ICC_DATA=0XE0; IIC_WRITE_ONEBYTE(a,b,1);
}
}
void AddOneSetRecord(uchar mode) //增加一条设置记录:年月日时分秒:操作人员代码
{
uchar a,b,c;
uint BaseAdd,SeekAdd;
a=mode-0xa1;
BaseAdd=a*35; BaseAdd+=SetTimeRecordAddess ; //得到应该存贮的基地址!
for(c=0;c<35;c+=7)
{
SeekAdd=BaseAdd+c;
a=SeekAdd/256; b=SeekAdd%256;
IIC_READ_ONEBYTE(a,b,1);
a=ICC_DATA;
if (a!=0xe1) //表明这时空闲的地址,这时就写入时间
{
a=SeekAdd/256;b=SeekAdd%256;
ICC_DATA=0xe1; ICC_DATA1=year0; ICC_DATA2=month0; ICC_DATA3=day0;
ICC_DATA4=hour0; ICC_DATA5=minuts0; ICC_DATA6=second0;
IIC_WRITE_ONEBYTE(a,b,7);
goto WillClsNextFlag;
}
}
WillClsNextFlag: //将下一个标专改写为覆盖标志
if(c==28) {c=0; }
else {c+=7;}
SeekAdd=BaseAdd+c;
a=SeekAdd/256;b=SeekAdd%256;
ICC_DATA=0xe0;
IIC_WRITE_ONEBYTE(a,b,1);
}
/*
//返回设置特殊事故的分配序列
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -