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

📄 yibiao1.c

📁 这是我在我们公司做的C51加油单片机程序
💻 C
📖 第 1 页 / 共 5 页
字号:
        if(one==1)
        {
                xs_shu(6,6,yi_1+8*2);
                xs_shu(6,12,yi_1+8*0);
        }
        if ((year!=year1)||(one==1))
        {
                temp=year;
                xs_shu(6,24,clr);
                xs_shu(6,18,clr);
                xs_shu(6,24,yi_1+(temp&0x0f)*8);
                temp>>=4;
                xs_shu(6,18,yi_1+(temp&0x0f)*8);
        }
        /*月*/
        if ((month1!=month)||(one==1))
        {
                temp=month;
                xs_shu(6,42,clr);
                xs_shu(6,36,clr);
                xs_shu(6,42,yi_1+(temp&0x0f)*8);
                temp>>=4;
                xs_shu(6,36,yi_1+(temp&0x0f)*8);
        }
        /*日*/
        if ((day1!=day)||(one==1))
        {
                temp=day;
                xs_shu(6,60,clr);
                xs_shu(6,54,clr);
                xs_shu(6,60,yi_1+(temp&0x0f)*8);
                temp>>=4;
                xs_shu(6,54,yi_1+(temp&0x0f)*8);
        }
        /*时*/
        if ((hour1!=hour)||(one==1))
        {
                temp=hour;
                xs_shu(6,78,clr);
                xs_shu(6,72,clr);
                xs_shu(6,78,yi_1+(temp&0x0f)*8);
                temp>>=4;
                xs_shu(6,72,yi_1+(temp&0x0f)*8);
        }
        /*:*/
        if (one==1)
        xs_shu(6,85,yi_1+10*8);
        /*分*/
        if ((minutes1!=minutes)||(one==1))
        {
                temp=minutes;
                xs_shu(6,96,clr);
                xs_shu(6,90,clr);
                xs_shu(6,96,yi_1+(temp&0x0f)*8);
                temp>>=4;
                xs_shu(6,90,yi_1+(temp&0x0f)*8);
        }
        /*:*/
         if (one==1)
         xs_shu(6,103,yi_1+10*8);
         /*秒*/
        if ((second1!=second)||(one==1))
        {
                temp=second;
                xs_shu(6,114,clr);
                xs_shu(6,108,clr);
                xs_shu(6,114,yi_1+(temp&0x0f)*8);
                temp>>=4;
                xs_shu(6,108,yi_1+(temp&0x0f)*8);
        }
second1=second;
minutes1=minutes;
hour1=hour;
day1=day;
month1=month;
year1=year;
one=0;
}
unsigned char  password(bit aa)/*aa=0 员工密码  aa=1 用户密码*/
{
       // unsigned charkey_buf_p=0;
        huakuang(3,6,2);
        key_buf_p=0;
        while(1)
        {
                key=getkey();
                if ((key>=0)&&(key<=9)&&(key_buf_p<4))
                {
                        key_buf[key_buf_p]=key;
                        xs_shu(3,2*16+key_buf_p*8+1,xin);
                        key_buf_p++;

                 }
                 if(key=='l')
                 {
                        if(key_buf_p>0)
                        {
                                xs_shu(3,2*16+(key_buf_p-1)*8+1,clr);
                                key_buf_p--;
                        }
                        else
                            return 2;
                 }
                 if (key=='k')
                 {
                        astobcd(4);
                        if (aa==0)
                           if (strcomp(key_buf,ygmm,2))
                              return 0x01;/*密码正确返回*/
                           else
                               return 0x00;/*密码错误返回*/
                        else
                           if (strcomp(key_buf,yhmm,2))
                               return 0x01;/*密码正确返回*/
                           else
                               return 0x00;/*密码错误返回*/

                 }
                 if (key=='t')
                 {
                        return 2;/*退卡返回*/
                 }
                xs_time();
        }
}
unsigned char pass_card()
{
        huakuang(3,6,2);
        key_buf_p=0;
        while(1)
        {
                key=getkey();
                if ((key>=0)&&(key<=9)&&(key_buf_p<12))
                {
                        key_buf[key_buf_p]=key;
                        xs_shu(3,2*16+key_buf_p*8+1,xin);
                        key_buf_p++;

                 }
                 if(key=='l')
                 {
                        if(key_buf_p>0)
                        {
                                xs_shu(3,2*16+(key_buf_p-1)*8+1,clr);
                                key_buf_p--;
                         }
                 }
                 if (key=='k')
                 {
                        astobcd(key_buf_p);
                        pin_dat[0]=key_buf_p;
                        pin_dat[1]=key_buf[0];
                        pin_dat[2]=key_buf[1];
                        pin_dat[3]=key_buf[2];
                        pin_dat[4]=key_buf[3];
                        pin_dat[5]=key_buf[4];
                        return 0x0;
                 }
                 if (key=='t')
                    return 0x02;/*退卡返回*/
                xs_time();
        }

}
unsigned char sendcard()
{
  unsigned char idata card_err_state;        //卡片错误状态
  unsigned char idata wait_counter;          //卡片连续等待计数器
  unsigned char idata rec_data;              //接收一字节缓冲
   sendcard_st:                              //重发地址
   send(0,5);                                //发送5字节命令头
   wait_counter=3;                           // 可以连续接收3次
   do_byte_state:                            //状态字节处理地址
      card_err_state=0;
   recv_buf[0]=0xff;
   card_err_state =recv(0,1);                //接收一字节

     if (card_err_state == 0)                //接收正确?
         {
            //  de100u();                      //接收正确
              rec_data=recv_buf[0];           //取一字节
              switch (rec_data)
               {
                  case 0x60:                 //卡片要求延长等待
                     if (wait_counter--==0)  //连续三次?
                       {
                          card_err_state=0x80;    //连续三次
                          break;                  //退出
                       }
                      else goto   do_byte_state;


                  case 0x6c:                      //卡片要求安后续一字节为Le,重发命令头
                       card_err_state =recv(0,1); //接收后续字节
                       send_buf[4]=recv_buf[0];     //重置Le
                       de100u();
                       goto sendcard_st;          //重发

                  case 0x61:
                        card_err_state =recv(0,1);  //卡片要求取XX字节
                       if (card_err_state == 0)
                         {
                         card_err_state =getcard_data(); //按卡片要求取XX 字节
                         }
                       break;                  //退出

                       default :       //前者都不是  继续
                        rec_data=recv_buf[0];
                        if (((rec_data&0xf0)==0x60)||((rec_data&0xf0)==0x90)) card_err_state =recv(1,1);  //卡片返回6X 9X 取一字节状态码 退出

                         else if  (recv_buf[0]==send_buf[1])  card_err_state =recv(0,(send_buf[4]+2));  //卡片要求接收全部剩余字节
                         else if  ((~(recv_buf[0])+1)==send_buf[1])        //卡片要求接收一字节后等待下一个状态字
                              {
                                  card_err_state =recv(0,1);          //接收一字节
                                  if (card_err_state==0)              //接收正确?
                                        {                             //接收正确
                                        if (wait_counter--==0) card_err_state=0x81;   //连续三次 退出
                                        else   goto      do_byte_state;               //不足三次  等待下一个状态字
                                        }
                               }
                        break;                  //退出 switch

               }


          }
         return(card_err_state);   //返回错误状态
}

unsigned char sendcard1()
{
  unsigned char idata card_err_state;        //卡片错误状态
  unsigned char idata wait_counter;          //卡片连续等待计数器
  unsigned char idata rec_data;              //接收一字节缓冲
  unsigned char idata data_le;              //数据的长度
  unsigned char idata data_adr;              //数据的地址

   data_le=send_buf[4];
   data_adr=5;
   send(0,5);                                //发送5字节命令头
   wait_counter=3;                           // 可以连续接收3次
   do_byte_state:                            //状态字节处理地址
      card_err_state=0;
   recv_buf[0]=0xff;
   card_err_state =recv(0,1);                //接收一字节

     if (card_err_state == 0)                //接收正确?
         {
              de100u();                      //接收正确
              rec_data=recv_buf[0];           //取一字节

                  if (rec_data==0x60)                 //卡片要求延长等待
                     {
                       if (wait_counter--==0)  //连续三次?
                       {
                          card_err_state=0x82;    //连续三次

                       }
                       else goto   do_byte_state;
                     }
                  else if (rec_data==0x90)
                     {
                      card_err_state=recv(1,1);
                      goto  send_card1_end ;
                     }
                  else if (rec_data==send_buf[1])
                     {
                        send(data_adr,data_le);
                     }
                  else if (((~rec_data)+1)==send_buf[1])
                     {
                     send(data_adr,data_le);
                     data_adr=data_adr+1;
                     data_le=data_le-1;
                     if  (data_le!=0) goto  do_byte_state;
                     }
                  else
                     {
                     card_err_state=0x83;
                     goto  send_card1_end;
                     }
          }
       wait_counter=3;
       de100u();
       do_byte_state1:
       if ((card_err_state=recv(0,1))==0)
          {
                rec_data=recv_buf[0];
                  if (rec_data==0x60)                 //卡片要求延长等待
                     {
                       if (wait_counter--==0)  //连续三次?
                         {
                          card_err_state=0x84;    //连续三次

                         }
                       else goto   do_byte_state1;
                     }
                 else if (rec_data==0x61)
                     {
                         if ((card_err_state=recv(0,1)) == 0)
                         {
                         card_err_state =getcard_data(); //按卡片要求取XX 字节
                         }
                     }
                 else if (((rec_data&0xf0)==0x60)||((rec_data&0xf0)==0x90))   card_err_state =recv(1,1);
                 else    card_err_state=0x85;
          }

         send_card1_end:
         return(card_err_state);   //返回错误状态
}

unsigned char sendcard2()
{
  unsigned char idata card_err_state;        //卡片错误状态
  unsigned char idata wait_counter;          //卡片连续等待计数器
  unsigned char idata rec_data;              //接收一字节缓冲
  unsigned char idata data_le;              //数据的长度
  unsigned char idata data_adr;              //数据的地址

   data_le=send_buf[4];
   data_adr=5;
   send(0,5);                                //发送5字节命令头
   wait_counter=3;                           // 可以连续接收3次
   do_byte_state:                            //状态字节处理地址
      card_err_state=0;
   recv_buf[0]=0xff;
   card_err_state =recv(0,1);                //接收一字节

     if (card_err_state == 0)                //接收正确?
         {
              de100u();                      //接收正确
              rec_data=recv_buf[0];           //取一字节

                  if (rec_data==0x60)                 //卡片要求延长等待
                     {
                       if (wait_counter--==0)  //连续三次?
                       {
                          card_err_state=0x86;    //连续三次

                       }
                       else goto   do_byte_state;
                     }
                  else if (rec_data==0x90)
                     {
                      card_err_state=recv(1,1);
                      goto  send_card1_end ;
                     }
                  else if (rec_data==send_buf[1])
                     {
                        send(data_adr,data_le);
                     }
                  else if (((~rec_data)+1)==send_buf[1])
                     {
                     send(data_adr,data_le);
                     data_adr=data_adr+1;
                     data_le=data_le-1;
                     if  (data_le!=0) goto  do_byte_state;
                     }
                  else
                     {
                     card_err_state=0x87;
                     goto  send_card1_end;
                     }
          }
       wait_counter=3;
       de100u();
       do_byte_state1:
       if ((card_err_state=recv(0,1))==0)
          {
                rec_data=recv_buf[0];
                  if (rec_data==0x60)                 //卡片要求延长等待
                     {
                       if (wait_counter--==0)  //连续三次?
                         {
                          card_err_state=0x88;    //连续三次

                         }
                       else goto   do_byte_state1;
                     }
                 else if (rec_data==0x61)
                     {
                         if ((card_err_state=recv(0,1)) == 0)
                         {
                         card_err_state =getcard_data(); //按卡片要求取XX 字节
                         }
                     }
                 else if (((rec_data&0xf0)==0x60)||((rec_data&0xf0)==0x90))   card_err_state =recv(1,1);
                 else    card_err_state=0x89;
          }

         send_card1_end:
         return(card_err_state);   //返回错误状态
}


unsigned char getcard_data()
{
 unsigned char idata card_err_state;        //卡片错误状态
         send_buf[0]=0;
         send_buf[1]=0xc0;
         send_buf[2]=0;
         send_buf[3]=0;
         send_buf[4]=recv_

⌨️ 快捷键说明

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