⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51.c

📁 一段C的小程序
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -