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

📄 venus.c

📁 继电保护测试仪开发程序。已经是项目式的文档
💻 C
📖 第 1 页 / 共 3 页
字号:
                                                       case  2:{;}break;
                                                  }
                                             }break;
                                case       0:
                                case       1:
                                case       2:
                                case       3:
                                case       4:
                                case       5:
                                case       6:
                                case       7:
                                case       8:
                                case       9:{
                                                  move_data(&lcd_buf[1],&lcd_buf[0],7);  //YIWEI
                                                  lcd_buf[7]=i|0x10;
                                                  move_data(&lcd_buf,&xtcs_x[counter_new][0],8);  //SAVE
                                                  print_e(MENU_DIS[counter_new]);
                                             }break;
                        }
                        print_fill(menu_add[counter_old],0x00,0x8,0x9);
                }
}
gzsd()    //故障设定
{
        unsigned char code TABLE01[5]={24,25,26,27,0xFF};//故障设定
        unsigned char code TABLE02[15]={29,30,0xfe,0xfe,0xfe,29,30,0xfe,0xfe,0xfe,0xfe,31,32,0xFF};//系统电压
        unsigned int code  MENU_DIS[18]={154,163,172,
                                         214,223,232,
                                         274,283,292,
                                         334,343,352,
                                         394,403,412,
                                         454,463,472,
                                        };//菜单显示位置数组
        unsigned char xdata gzsd_x[18][9];  //设置数据存放数组
        unsigned int xdata  menu_add[18];   //激活块地址数组 menu_add=(MENU_DIS/30)*240+(MENU_DIS%30)
        unsigned char i,counter_old,counter_new;
        bit off,first_char;
        off=1;
        first_char=1;
        load_data(cshsj_page,&gzsd_c,0,&gzsd_x,162);   //装初始设置数据
        menu_add[0]=(MENU_DIS[0]/30)*240+(MENU_DIS[0]%30);
        menu_add[1]=(MENU_DIS[1]/30)*240+(MENU_DIS[1]%30);
        menu_add[2]=(MENU_DIS[2]/30)*240+(MENU_DIS[2]%30);
        menu_add[3]=(MENU_DIS[3]/30)*240+(MENU_DIS[3]%30);
        menu_add[4]=(MENU_DIS[4]/30)*240+(MENU_DIS[4]%30);
        menu_add[5]=(MENU_DIS[5]/30)*240+(MENU_DIS[5]%30);
        menu_add[6]=(MENU_DIS[6]/30)*240+(MENU_DIS[6]%30);
        menu_add[7]=(MENU_DIS[7]/30)*240+(MENU_DIS[7]%30);
        menu_add[8]=(MENU_DIS[8]/30)*240+(MENU_DIS[8]%30);
        menu_add[9]=(MENU_DIS[9]/30)*240+(MENU_DIS[9]%30);
        menu_add[10]=(MENU_DIS[10]/30)*240+(MENU_DIS[10]%30);
        menu_add[11]=(MENU_DIS[11]/30)*240+(MENU_DIS[11]%30);
        menu_add[12]=(MENU_DIS[12]/30)*240+(MENU_DIS[12]%30);
        menu_add[13]=(MENU_DIS[13]/30)*240+(MENU_DIS[13]%30);
        menu_add[14]=(MENU_DIS[14]/30)*240+(MENU_DIS[14]%30);
        menu_add[15]=(MENU_DIS[15]/30)*240+(MENU_DIS[15]%30);
        menu_add[16]=(MENU_DIS[16]/30)*240+(MENU_DIS[16]%30);
        menu_add[17]=(MENU_DIS[17]/30)*240+(MENU_DIS[17]%30);
        counter_new=0x0;
        counter_old=0x0;
        lcd_cls(lcd_page1);
        lcd_cls(lcd_page2);
        load_data(0,&TABLE01,0,&lcd_buf,5);
        print_c16(0x8);
        load_data(0,&TABLE02,0,&lcd_buf,15);
        print_c16(0x1E6);
        lcd_buf[0]=0x35;   //U
        lcd_buf[1]=0x41;   //a
        lcd_buf[2]=0xff;
        print_e(151);
        lcd_buf[0]=0x35;   //U
        lcd_buf[1]=0x42;   //b
        lcd_buf[2]=0xff;
        print_e(211);
        lcd_buf[0]=0x35;   //U
        lcd_buf[1]=0x43;   //c
        lcd_buf[2]=0xff;
        print_e(271);
        lcd_buf[0]=0x29;   //I
        lcd_buf[1]=0x41;   //a
        lcd_buf[2]=0xff;
        print_e(331);
        lcd_buf[0]=0x29;   //I
        lcd_buf[1]=0x42;   //b
        lcd_buf[2]=0xff;
        print_e(391);
        lcd_buf[0]=0x29;   //I
        lcd_buf[1]=0x43;   //c
        lcd_buf[2]=0xff;
        print_e(451);
        move_data(&gzsd_x[0][0],&lcd_buf,9);
        print_e(MENU_DIS[0]);
        move_data(&gzsd_x[1][0],&lcd_buf,9);
        print_e(MENU_DIS[1]);
        move_data(&gzsd_x[2][0],&lcd_buf,9);
        print_e(MENU_DIS[2]);
        move_data(&gzsd_x[3][0],&lcd_buf,9);
        print_e(MENU_DIS[3]);
        move_data(&gzsd_x[4][0],&lcd_buf,9);
        print_e(MENU_DIS[4]);
        move_data(&gzsd_x[5][0],&lcd_buf,9);
        print_e(MENU_DIS[5]);
        move_data(&gzsd_x[6][0],&lcd_buf,9);
        print_e(MENU_DIS[6]);
        move_data(&gzsd_x[7][0],&lcd_buf,9);
        print_e(MENU_DIS[7]);
        move_data(&gzsd_x[8][0],&lcd_buf,9);
        print_e(MENU_DIS[8]);
        move_data(&gzsd_x[9][0],&lcd_buf,9);
        print_e(MENU_DIS[9]);
        move_data(&gzsd_x[10][0],&lcd_buf,9);
        print_e(MENU_DIS[10]);
        move_data(&gzsd_x[11][0],&lcd_buf,9);
        print_e(MENU_DIS[11]);
        move_data(&gzsd_x[12][0],&lcd_buf,9);
        print_e(MENU_DIS[12]);
        move_data(&gzsd_x[13][0],&lcd_buf,9);
        print_e(MENU_DIS[13]);
        move_data(&gzsd_x[14][0],&lcd_buf,9);
        print_e(MENU_DIS[14]);
        move_data(&gzsd_x[15][0],&lcd_buf,9);
        print_e(MENU_DIS[15]);
        move_data(&gzsd_x[16][0],&lcd_buf,9);
        print_e(MENU_DIS[16]);
        move_data(&gzsd_x[17][0],&lcd_buf,9);
        print_e(MENU_DIS[17]);
        while (off)
                {
                        move_data(&gzsd_x[counter_new][0],&lcd_buf,9);
                        print_fill(menu_add[counter_new],0xff,0x8,0x8);
                        counter_old=counter_new;
                        i=getchar();
                        switch (i)
                        {
                                case    LEFT:{    first_char=1;
                                                  if (counter_new==0) {counter_new=17;}
                                                  else {counter_new--;}
                                             }break;
                                case   ENTER:
                                case   RIGHT:{    first_char=1;
                                                  if (counter_new<17) {counter_new++;}
                                                  else {counter_new=0x0;}
                                             }break;
                                case      UP:{    first_char=1;
                                                  if (counter_new>2) {counter_new=counter_new-3;}
                                                  else {counter_new=counter_new+15;}
                                             }break;
                                case    DOWN:{    first_char=1;
                                                  if (counter_new<15) {counter_new=counter_new+3;}
                                                  else {counter_new=counter_new-15;}
                                             }break;
                                case     ESC:{off=0;}break;
                                case   START:{
                                                  switch (counter_new)
                                                  {
                                                       case  0:{;}break;
                                                       case  1:{;}break;
                                                       case  2:{;}break;
                                                  }
                                             }break;
                                case       0:
                                case       1:
                                case       2:
                                case       3:
                                case       4:
                                case       5:
                                case       6:
                                case       7:
                                case       8:
                                case       9:{    
                                                  if (first_char) 
                                                      {first_char=0;
                                                       lcd_buf[0]=0x00;
                                                       lcd_buf[1]=0x00;
                                                       lcd_buf[2]=0x00;
                                                       lcd_buf[3]=0x00;
                                                       lcd_buf[4]=0x00;
                                                       lcd_buf[5]=0x00;
                                                       lcd_buf[6]=0x00;
                                                       lcd_buf[7]=i|0x10;
                                                       move_data(&lcd_buf,&gzsd_x[counter_new][0],8);  //SAVE
                                                       print_e(MENU_DIS[counter_new]);
                                                      }
                                                  else
                                                      {
                                                       move_data(&lcd_buf[1],&lcd_buf[0],7);  //YIWEI
                                                       lcd_buf[7]=i|0x10;
                                                       move_data(&lcd_buf,&gzsd_x[counter_new][0],8);  //SAVE
                                                       print_e(MENU_DIS[counter_new]);
                                                      }
                                             }break;
                        }
                        print_fill(menu_add[counter_old],0x00,0x8,0x8);
                }
}
long d_to_hex(unsigned char xdata *k)
{
    unsigned char i,j;
    float n,m;
    n=0;
    j=7;
    for (i=0;i<8;i++)
    {
        if (k[i]==0xe) {j=i;break;}
    }
    for (i=7;i>j;i--)
    {
        n=n+(k[i]&0xf);
        n=n/10;
    }
    m=0;
    for (i=0;i<j;i++)
    {
        if (k[i]>=0x10) {m=m*10+(k[i]&0xf);}
    }
    m=m+n;
    for (i=0;i<8;i++)
    {
        if (k[i]==0xd) {m=-m;break;}
    }
    return (m*0x10000);
}
/*---------------------------------------------
I2C总线驱动程序(用两个普通IO模拟I2C总线)
----------------------------------------------*/
#define SDA P30
#define SCL P31
#define true 1
#define false 0

/*--------------------------------------------------------------------------------
调用方式:void I2CStart(void)
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
   EA=0;
   SDA=1; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SCL=0;
}
/*--------------------------------------------------------------------------------
调用方式:void I2CStop(void)
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
   SCL=0; SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SDA=1;
   EA=1;
}
/*--------------------------------------------------------------------------------
调用方式:bit WaitAck(void)
函数说明:私有函数,I2C专用,等待从器件接收方的应答
---------------------------------------------------------------------------------*/
bit WaitAck(void)
{
   unsigned char errtime=255;//因故障接收方无ACK,超时值为255。
   SDA=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   while(SDA) 
   {
   	errtime--;
   	if (!errtime) {I2CStop();return false;}
   }
   SCL=0;
   return true;
}
/*--------------------------------------------------------------------------------
调用方式:void SendAck(void)
函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。
---------------------------------------------------------------------------------*/
void SendAck(void)
{
   SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   SCL=0;
}
/*--------------------------------------------------------------------------------
调用方式:void SendNotAck(void)
函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。
--------------------------------------------------------------------------------*/
void SendNotAck(void)
{
   SDA=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   SCL=0;
}
/*--------------------------------------------------------------------------------
调用方式:void I2CSendByte(unsigned char x)
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CSendByte(unsigned char x)
{
   unsigned char i=8;
   while (i--)
   {
      SCL=0;_nop_();
      SDA=(bit)(x&0x80); x<<=1; _nop_(); _nop_(); _nop_(); _nop_(); 
      SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   }
   SCL=0;
}
/*--------------------------------------------------------------------------------
调用方式:uchar I2CReceiveByte(void)
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
unsigned char I2CReceiveByte(void)
{
    unsigned char i=8;
    unsigned char j=0;
    SDA=1;
    while (i--)
    {
       j<<=1;
       SCL=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
       SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
       j|=SDA;
    }
    SCL=0;
    return j;
}
//---------------------------------------------------------------------------
//开始PCF8563T驱动程序
/*--------------------------------------------------------------------------------
调用方式:void GetPCF8563(unsigned char *buff)
函数说明:读取时钟芯片PCF8563的时间
          一次读取秒、分、小时、日、星期、月(世纪)、年共7个值放入缓冲区buff
---------------------------------------------------------------------------------*/
void GetPCF8563(unsigned char *buff)
{
    unsigned char i;
    I2CStart();
    I2CSendByte(0xA2);
    WaitAck();
    I2CSendByte(0x2);   //从秒开始读
    WaitAck();
    I2CStart();
    I2CSendByte(0xA3);
    WaitAck();
    for (i=0;i<7;i++)
    {
       buff[i]=I2CReceiveByte();
       if (i<6) SendAck();//除最后一个字节外,其他都要从MASTER发应答。
    }
    SendNotAck();
    I2CStop();
}
/*--------------------------------------------------------------------------------
调用方式:void SetPCF8563(unsigned char timetype,unsigned char value)
函数说明:调整时钟。timetype是要改的时间类型,value是新设置的时间值(BCD格式)。
0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年
---------------------------------------------------------------------------------*/
void SetPCF8563(unsigned char timetype,unsigned char value)
{
    I2CStart();
    I2CSendByte(0xA2);
    WaitAck();
    I2CSendByte(timetype);
    WaitAck();
    I2CSendByte(value);
    WaitAck();
    I2CStop();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -