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

📄 dian.c

📁 嵌入式点菜系嵌入式点菜系统源码供参考c51c51统源码供参考嵌入式点菜系统源码供参考c51c51c51c51
💻 C
📖 第 1 页 / 共 3 页
字号:
              moveto(11,4);
              putstr_h("异常    ");
              bell(5);
              k=key(0);
              if(k==0x82)            /* 若按下的是清除键则清除该记录数据,重新输入 */
                {
                 clslib(r);
                 goto cb_2;
                }
              disp2(bzs,r);           /* 显示抄表状态编码表,将所选的编码放在bzs */
              if(!(bzs[0]=='1'&&bzs[1]==0))
                  {                       /* 选的是已抄的各种状态 */
                   libset(r,CBBZ);
                   libwrite(bzs);
                  }
              else         /* 选的是未抄 */
                  {
                   clslib(r);
                   goto cb_2;
                  }
              disp1(r);   
             }
        }
      do             
        {
         k=key(0);
        }while(k!=0x88&&k!=0x82&&k!=0x89&&k!=0x8e&&k!=0x8f&&k!=0x8d);
      if(k==0x8d)      /* 若按下[确认]键,也把它当作向下箭头键来使用 */
         k=0x8f;
      if(k==0x88)      /* 若按下的是F1则查询抄表*/
        {
	r=cxcb();	/*查询抄表*/
         goto cb_0;
        }
      if(k==0x82)     /* 若按下的是清除键,清除该记录数据,重新输入 */
        {
         clslib(r);
         goto cb_2;
        }
      return(k);     /* 若按下的是其它键,返回 */
}



/* 计算本月底度(by)-上月底度(sy),l为上月底度的位数,结果放在sy */
/* 若by<sy,则by-sy+10*l  */
void cscal(xdata uchar *by,xdata uchar *sy,xdata uchar l)
     {
      xdata uchar gg[11],i;
      strsub(by,sy,10);
      if(sy[0]=='-')
         {
          gg[0]='1';
          for(i=1;i<=l;i++)
              gg[i]='0';
          gg[i]=0;
          stradd(gg,sy,10);
         }
     }



/* 清除数据库中所写入的数据 */
void clslib(xdata int r)
     {
      xdata uchar s[2];
      s[0]='0';
      s[1]=0;
      libset(r,BYXD);
      libwrite(s);
      libset(r,BYDL);
      libwrite(s);
      s[0]='1';
      s[1]=0;
      libset(r,CBBZ);
      libwrite(s);
      s[0]=0;
      libset(r,RQ);
      libwrite(s);
     }




/* 显示记录号为r的记录信息 */
void disp1(xdata int r)
     {
      xdata uchar kdata[31],l,bz[3];
      xdata int n;
      cls();
      moveto(15,14);
      putstr("   ");
      moveto(1,1);
      putstr("电表号");
      libset(r,DBH);
      libread(kdata);
      putstr_h(kdata);
      moveto(3,1);
      putstr("抄表号");
      libset(r,CBH);
      libread(kdata);
      putstr_h(kdata);
      moveto(5,1);
      libset(r,HM);
      libread(kdata);
      putn_h(16,kdata);
      moveto(7,1);
      libset(r,YDDZ);
      libread(kdata);
      putstr_h(kdata);
      moveto(13,1);
      putstr("上");
      libset(r,SYXD);
      libread(kdata);
      putn_h(6,kdata);
      moveto(13,9);
      putstr("本") ;
      libset(r,BYXD);
      libread(kdata);
      putn_h(6,kdata);
      moveto(15,1);
      putstr("电量: ");
      libset(r,CBBZ);
      libread(bz);
      if(!(bz[0]=='1'&&bz[1]==0))   /* 抄表状态为0时不显示电量 */
        {
         libset(r,BYDL);
         libread(kdata);
         putn_h(10,kdata);
        }
      moveto(11,1);
      libset(r,BL);
      libread(kdata);
      putstr_h(kdata);
      moveto(11,4);
      libset(r,CBBZ);
      l=libread(kdata);
      n=stoi(l,kdata);
      th(n);
      moveto(11,13);
      libset(r,DJH);
      libread(kdata);
      /*n=stoi(l,kdata);*/
      switch(kdata[0])
            {
             case '1': putstr("住宅"); break;
             case '2': putstr("商业"); break;
             case '3': putstr("工业"); break;
             case '4': putstr("非工"); break;
             case '5': putstr("机关"); break;
             case '6': putstr("职工"); break;
             case '7': putstr("集资"); break;
             default:return;
            }
     }



/* 根据n显示相应的抄表状态 */
void th(xdata uchar n)
     {
      switch(n)
            {
             case 1: putstr("未抄电表"); break;
             case 2: putstr("新换电表"); break;
             case 3: putstr("电表倒行"); break;
             case 4: putstr("电表烧坏"); break;
             case 5: putstr("违章用电"); break;
             case 6: putstr("电表丢失"); break;
             case 7: putstr("已抄电表"); break;
             case 8: putstr("多抄电表"); break;
             case 9: putstr("更换电表"); break;
             case 10: putstr("更换表箱"); break;
             case 11: putstr("回零处理"); break;
             case 12: putstr("已剪线户"); break;
            }
     }



/* 显示抄表状态编码表,选择编码并放在bzs,r为当前记录号 */ 
void disp2(xdata uchar *s,xdata int r)
      {
       xdata uchar n,f,one[4],thirteen[5];
       cls();
       moveto(15,14);
       putstr("   ");
       moveto(1,1);
       putstr_h("1.不抄    7.正常");
       moveto(3,1);
       putstr_h("2.新换    8.多抄");
       moveto(5,1);
       putstr_h("3.倒行    9.换表");
       moveto(7,1);
       putstr_h("4.烧坏   10.换箱");
       moveto(9,1);
       putstr_h("5.违章   11.回零");
       moveto(11,1);
       putstr_h("6.丢失   12.剪线");
       moveto(15,1);
       putstr("请选择: ");
d2_1:  do
         {
          moveto(15,9);
          putstr_h("  ");
          moveto(15,9);
          f=ksh(s,0,2,0);    /* 等待输入一串字符,只允许是数字,最多2位 */
          if(f==0)
            {
             if(s[0]==0&&s[1]==0x89)   /* 该记录原为未抄时,按F2可以退出 */
               {
                libset(r,CBBZ);
                libread(s);
                if(!(s[0]=='1'&&s[1]==0))
                   return;
               }
             moveto(13,1);
             putstr_h("输入错误!");
             bell(5);
             clsn(13,2);
            }
         }while(!f);
      if(s[0]=='0')         /* 以下判断输入数值是否在1-12范围内 */
        {
         s[0]=s[1];
         s[1]=0;
        }
       one[0]='1';
       one[1]=0;
       thirteen[0]='1';
       thirteen[1]='3';
       thirteen[2]=0;           
       strsub(s,one,3);         
       strsub(s,thirteen,4);    
       if(one[0]=='-'||thirteen[0]!='-')
         {
          moveto(13,1);
          putstr_h("选项超出范围!");
          bell(5);
          clsn(13,2);
          goto d2_1;
         }
      }





/* 从键盘接收一串全高数字字符,带回显,存放在cdata */
/* 入口: n1为欲显示的原cdata中数据的长度,n2为最多允许接收的数据长度,reg为0时只可接收数字,为1时可接收字母,运算符等 */
/* 出口: 返回接收字符串的长度,字符串为空时返回0(若按下数值键后再按功能键,则把功能键值存放在cdata[2],若首先就按下功能键,则把该键值存放在cdata[1] */
uchar ksh(xdata uchar *cdata,xdata uchar n1,xdata uchar n2,xdata uchar reg)
     {
      xdata uchar x1,x2,y1,y2,k,i1,i2,f,end=0;
      i1=n1;
      x1=getx();
      y1=gety();
      if(n1!=0)
         putn_h(n1,cdata);
      do
        {
         if(i1!=n2)
             {
              putch_h('_');
              x2=getx();
              y2=gety()-1;
             }
         else
             {
              x2=getx();
              y2=gety();
             }
         moveto(x2,y2);
ksh_1:   k=key(0);
         if(reg==0)
           {
            if(i1==n2&&k>=0x30&&k<=0x39)
            goto ksh_1;
            if(k<0x30||k>0x39&&k!=0x82)
               end=1;
           }
         if(reg==1)
           {
            if(k==0x80)
               goto ksh_1; 
            if(i1==n2&&!(k==0x8d||k==0x87||k==0x88||k==0x89||k==0x8e||k==0x8f||k==0x82))
               goto ksh_1;
            if(k==0x8d||k==0x87||k==0x88||k==0x89||k==0x8e||k==0x8f)
               end=1;
           }
         cdata[i1]=k;
         if(end)
             {
              f=0;
              if(i1==0)
                 {
                  cdata[0]=0;
                  cdata[1]=k;
                  moveto(x1,y1);
                  putch_h(' ');
                  moveto(x1,y1);
                 }
              else
                  {
                   if(k==0x8d)
                       {
                        cdata[i1]=0;
                        if(i1!=n2)
                           putch_h(' ');
                        f=i1;
                       }
                   else
                       {
                        cdata[0]=0;
                        cdata[1]=0;
                        cdata[2]=k;
                        moveto(x1,y1);
                        for(i2=0;i2<=y2-y1;i2++)
                            putch_h(' ');
                       }
                  }
              return(f);
             }
         if(k==0x82)
             {
              if(i1!=0)
                  {
                   putch_h(' ');
                   i1=i1-1;
                   y2=y2-1;
                   moveto(x2,y2);
                  }
             }
         else
             {
              putch_h(cdata[i1]);
              i1=i1+1;
             }
        }while(1);
     }            



/* 用于判断本月电量是否在正常波动范围内 */
/* 出口: s1*0.1<=s2<s1*20时返回1,否则返回0 */
/* 注: 可改变min及max的值,一般情况为min=0.5,max=1.5  */
uchar pd(xdata uchar *s1,xdata uchar *s2)
      {
       xdata uchar f,min[16],max[16];
       min[0]='0';
       min[1]='.';
       min[2]='1';
       min[3]=0;
       max[0]='2';
       max[1]='0';
       max[2]=0;
       strmul(s1,min,15);
       strmul(s1,max,15);
       strsub(s2,min,15);
       strsub(s2,max,15);
       if(min[0]=='-'||max[0]!='-')
           f=0;
       else
           f=1;
       return(f);
      }

⌨️ 快捷键说明

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