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

📄 lcd.c

📁 记录仪
💻 C
📖 第 1 页 / 共 3 页
字号:
        wlcd16x16(2,5,0,ch16x16_16);wlcd16x16(2,21,0,ch16x16_17);
        wlcd16x16(2,45,0,ch16x16_18);wlcd16x16(2,61,0,ch16x16_19);
        wlcd16x16(2,85,0,ch16x16_20);wlcd16x16(2,101,0,ch16x16_21);
        switch(d)               /*判断汉字显示在哪个区间*/
                {
                        case 0:
                              wlcd16x16(0,5,1,ch16x16_10);
                              wlcd16x16(0,21,1,ch16x16_11);
                              break;
                        case 1:
                              wlcd16x16(0,45,1,ch16x16_12);
                              wlcd16x16(0,61,1,ch16x16_13);
                              break;
                        case 2:
                              wlcd16x16(0,85,1,ch16x16_14);
                              wlcd16x16(0,101,1,ch16x16_15);
                              break;
                        case 3:
                              wlcd16x16(2,5,1,ch16x16_16);
                              wlcd16x16(2,21,1,ch16x16_17);
                              break;
                        case 4:
                              wlcd16x16(2,45,1,ch16x16_18);
                              wlcd16x16(2,61,1,ch16x16_19);
                              break;
                        case 5:
                              wlcd16x16(2,85,1,ch16x16_20);
                              wlcd16x16(2,101,1,ch16x16_21);
                              break;
                        default:break;
             }
             return;
}


/*身份显示程序,读取原来存储的驾驶员代码*/
void DISPLAYID()      /*需要修改,需要设定P11,P10,选择页,读完数据后,返回原来的初值*/
{
        unsigned char xdata i;
        clrlcd();
        wlcd16x16(0,0,0,ch16x16_30);      //驾驶员代码
        wlcd16x16(0,16,0,ch16x16_4);
        wlcd16x16(0,32,0,ch16x16_50);
        wlcd16x16(0,48,0,ch16x16_35);
        wlcd16x16(0,64,0,ch16x16_36);
        wlcd16x8(0,80,0,ch16x8_14);
        P11=1;
        P10=1;

        for(i=0;i<7;i++)
            wlcd16x8(2,66+8*i,0,ch16x8(cur_id[i]));//显示cur_id[]
}

/*修改驾驶员代码,位置参数j=0-5,显示的数字i=0-9,k=1反显*/
void CHANGEID(int i,int j,int k)
{
        wlcd16x8(2,66+8*j,k,ch16x8(i));
}



/*默认的显示屏*/
void idle()
{
    unsigned char xdata a[3],b[3],c[7],a1,b1;int xdata i;unsigned char xdata t;int xdata o,p,q;

    P11=1;
    P10=1;
    if(FL_RDSEC)
    {
        ctr_beiguang++;
        if(ctr_beiguang>=10)
        {
            P14=1;//背光灯灭
            ctr_beiguang=9;
        }


        Get_1s_speed();

        clrlcd();
        wlcd8x8(0,0,0,ch8x8_2);         //在第零页显示20以及斜线
        wlcd8x8(0,8,0,ch8x8_0);
        wlcd8x8(0,32,0,ch8x8_21);
        wlcd8x8(0,56,0,ch8x8_21);
        wlcd8x8(1,24,0,ch8x8_10);      //在第一页显示时间中间的冒号
        wlcd8x8(1,48,0,ch8x8_10);
        wlcd8x8(2,0,0,ch8x8_13);       //在第二页显示V:  以及km/h
        wlcd8x8(2,8,0,ch8x8_10);
        wlcd8x8(2,90,0,ch8x8_15);
        wlcd8x8(2,98,0,ch8x8_16);
        wlcd8x8(2,106,0,ch8x8_21);
        wlcd8x8(2,114,0,ch8x8_14);
        wlcd8x8(3,0,0,ch8x8_11);       //在第三页显示“No. :”
        wlcd8x8(3,8,0,ch8x8_17);
        wlcd8x8(3,16,0,ch8x8_20);
        wlcd8x8(3,24,0,ch8x8_10);

                a[0]=OLD_YEAR;
                a[1]=OLD_MONTH;
                a[2]=OLD_DAY;
                b[0]=OLD_HOUR;
                b[1]=OLD_MIN;
                b[2]=OLD_SEC;

                for(i=0;i<7;i++)
                {
                   Clr_WDog();       //清w-dog
                   c[i]=cur_id[i];
                }
                t=speed_1sec;

                //把读到的BCD码的时间转换成一个一个字符
                for(i=0;i<3;i++)
                {
                   a1=a[i]&0x0f;                   //写年、月、日
                   a[i]=a[i]>>4;
                   b1=a[i]&0x0f;
                   wlcd8x8(0,16+24*i,0,ch8x8(b1));
                   wlcd8x8(0,24*(i+1),0,ch8x8(a1));
                }

                for(i=0;i<3;i++)
                {
                   a1=b[i]&0x0f;                   //写时
                   b[i]=b[i]>>4;
                   b1=b[i]&0x0f;
                   wlcd8x8(1,8+24*i,0,ch8x8(b1));
                   wlcd8x8(1,16+24*i,0,ch8x8(a1));
                }

                o=t/100;                //把读到的速度转化为可显示三位数
                t=t%100;
                p=t/10;
                q=t%10;


                wlcd8x8(2,58,0,ch8x8(o));       //显示三位的速度
                wlcd8x8(2,66,0,ch8x8(p));
                wlcd8x8(2,74,0,ch8x8(q));

                for(i=0;i<7;i++)                      //显示当前的驾驶员代码
                    wlcd8x8(3,66+8*i,0,ch8x8(c[i]));

                
                if (FL_RUN==0)                        //如果停止,则显示停止
                {
                    wlcd16x16(0,90,0,ch16x16_5);
                    wlcd16x16(0,106,0,ch16x16_6);
                }
                else if (FLAG_LEGAL==0)               //如果行驶中,判断是否非法驾驶,如果非法则只显示非法
                {
                    wlcd16x16(0,90,0,ch16x16_1);
                    wlcd16x16(0,106,0,ch16x16_2);
                }
                else if (FL1_OVERSPEED)               //如果合法驾驶,则判断是否超速,如果超速,则显示超速
                {
                    //P15=1;    //超速蜂鸣器鸣叫
                    wlcd16x16(0,90,0,ch16x16_7);
                    wlcd16x16(0,106,0,ch16x16_9);
                }
                else if (FL_OVERTIME)                 //如果合法驾驶,且不超速,则判断是否超时,如果超时,则显示超时
                {
                    //P16=1;    //超时蜂鸣器鸣叫
                    wlcd16x16(0,90,0,ch16x16_7);
                    wlcd16x16(0,106,0,ch16x16_8);
                }
                else                                  //如果合法驾驶,且既不超速也不超时,则显示行驶
                {
                    wlcd16x16(0,90,0,ch16x16_3);
                    wlcd16x16(0,106,0,ch16x16_4);
                }

                FL_RDSEC=0;
    }
}

void DISPLAY_OVERTIME(unsigned char num,unsigned char t[])
{
        unsigned char xdata a1;
        unsigned char xdata b1;
        unsigned char xdata j;
        unsigned char xdata k;
        unsigned char xdata d[10];

           P11=1;
           P10=1;

           clrlcd();

           if(num<10)                      //在第0 行最左端显示num
           {
             wlcd8x8(0,0,0,ch8x8(num));    //第num条记录
             wlcd8x8(0,8,0,ch8x8_20);
           }
           else
           {
               wlcd8x8(0,0,0,ch8x8(num/10));
               wlcd8x8(0,8,0,ch8x8(num%10));
               wlcd8x8(0,16,0,ch8x8_20);
           }
           //上两行显示驾驶证号码
           wlcd8x8(0,24,0,ch8x8_11);       //在第0 行显示“No:”
           wlcd8x8(0,32,0,ch8x8_17);
           wlcd8x8(0,40,0,ch8x8_10);


           for(j=0;j<2;j++)
           for(k=0;k<9;k++)                   //在0行和1行右端分两行显示18位驾驶证号码
           {
              a1=t[j*9+k]-0x30;
              wlcd8x8(j,50+8*k,0,ch8x8(a1));
           }

           for(k=0;k<10;k++)
           {
             Clr_WDog();       //清w-dog
             d[k]=t[18+k];
           }
           wlcd8x8(2,16,0,ch8x8_21);        //在第二三页固定位置写上“/”和“:”
           wlcd8x8(2,40,0,ch8x8_21);
           wlcd8x8(2,98,0,ch8x8_10);
           wlcd8x8(3,16,0,ch8x8_21);
           wlcd8x8(3,40,0,ch8x8_21);
           wlcd8x8(3,98,0,ch8x8_10);
           //把年月日等BCD码从一个字节拆成可显示的两个自节
           for(j=2;j<4;j++)
           {
               for(k=0;k<3;k++)
               {
                   Clr_WDog();       //清w-dog
                   a1=(d[5*(j-2)+k])&0x0f;
                   d[5*(j-2)+k]=(d[5*(j-2)+k])>>4;
                   b1=(d[5*(j-2)+k])&0x0f;
                   wlcd8x8(j,24*k,0,ch8x8(b1));
                   wlcd8x8(j,24*k+8,0,ch8x8(a1));
               }
               for(k=3;k<5;k++)
               {
                   a1=(d[5*(j-2)+k])&0x0f;
                   d[5*(j-2)+k]=(d[5*(j-2)+k])>>4;
                   b1=(d[5*(j-2)+k])&0x0f;
                   wlcd8x8(j,10+24*k,0,ch8x8(b1));
                   wlcd8x8(j,18+24*k,0,ch8x8(a1));
               }
           }
}



/*显示部分函数*/
void DISPLAY()
{
        unsigned char xdata NUM_OVERTIME=0;
        unsigned char xdata i,j,k,l,m;
        unsigned int xdata temp;
        //unsigned int xdata temp;
        unsigned char xdata e[21],a[3],b[3],c[5],d[5],a1,b1,c1,key;
        P11=1;
        P10=1;

        //----------------------------------------------------------显示累计里程
        clrlcd();

        wlcd16x16(0,0,0,ch16x16_75);                /*--累--*/
        wlcd16x16(0,16,0,ch16x16_76);               /*--计--*/
        wlcd16x16(0,32,0,ch16x16_77);               /*--里--*/
        wlcd16x16(0,48,0,ch16x16_78);               /*--程--*/
        wlcd16x8(0,64,0,ch16x8_14);                 /*--:--*/

        for(i=0;i<10;i++)                   //得到e[]的0至9
        {
            Clr_WDog();       //清w-dog
            temp_long=1;
            for(j=0;j<(9-i);j++)
            {
               Clr_WDog();       //清w-dog
               temp_long*=10;             //得到10的(9-i)次方
            }
            temp_long=LICHEN_ALL/temp_long;                   //LICHEN_ALL=LICHEN_ALL/10的(9-i)次方

            e[i]=temp_long%10;                        //LICHEN_ALL对10取模
        }


        i=0;
        do
        {
           Clr_WDog();       //清w-dog
           k=e[i];
           i++;
        }while(k==0&&i<10);
        switch (i)
        {
          case 10:
             if(k)
             {
                wlcd8x8(3,76,0,ch8x8_0);                /*--0--*/
                wlcd8x8(3,84,0,ch8x8_20);               /*--.--*/
                k=e[9];
                wlcd8x8(3,92,0,ch8x8(k));
             }
             else
                wlcd8x8(3,92,0,ch8x8_0);                /*--0--*/
             break;

          default:
             for(j=(i-1);j<9;j++)
             {
                k=e[j];
                wlcd8x8(3,12+8*j,0,ch8x8(k));
             }
             wlcd8x8(3,84,0,ch8x8_20);               /*--.--*/
             k=e[9];
             wlcd8x8(3,92,0,ch8x8(k));
             break;
        }

        wlcd8x8(3,104,0,ch8x8_15);               /*--k--*/
        wlcd8x8(3,112,0,ch8x8_16);               /*--m--*/

        key=WaitKey(300);
        if(FL_RUN) return;
        if(key==KEY1|key==LKEY1)return;

        //----------------------------------------------------------显示超时纪录


        //stop_3day[11]数组中前9个字节存放停车当天以及之前2天的日期,先从中取出各自的日期
        for(i=0;i<3;i++)           //读取停车前2天的年月日
        {
           Clr_WDog();       //清w-dog
           a[i]=stop_3day[i];
        }
        for(i=0;i<3;i++)           //读取停车前1天的年月日
        {
           Clr_WDog();       //清w-dog
           b[i]=stop_3day[3+i];
        }
        for(i=0;i<5;i++)           //读取停车当天的年月日时分
        {
           Clr_WDog();       //清w-dog
           d[i]=stop_3day[6+i];
        }
        k=0;
        l=0;
        i=num_ovrec;

        do
        {
            Clr_WDog();       //清w-dog
            for(j=0;j<5;j++)
            {
               Clr_WDog();       //清w-dog
               c[j]=overtime_rec[i][23+j];           //取出 overtime_rec[]数组中的一个停止年月日时分
            }
            if((a[0]==c[0]) && (a[1]==c[1]) && (a[2]==c[2]))       //如果停车前2天的年月日与之相同
            {
               if(c[3]>d[3])
               {
                   //判断驾驶员是否为当前驾驶员
                   m=0;
                   for(j=0;j<18;j++)
                   {
                      Clr_WDog();       //清w-dog
                      if(cur_id[7+j]==overtime_rec[i][j])
                      m++;
                   }
                   if(m==18)       //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
                   {
                      NUM_OVERTIME++;
                      e[k]=i;                                            //将对应的数组下标保存在e[]
                      k++;
                   }
               }
               else if(c[3]==d[3])
               {
                  if(c[4]>=d[4])
                  {
                      //判断驾驶员是否为当前驾驶员
                      m=0;
                      for(j=0;j<18;j++)
                      {
                         Clr_WDog();       //清w-dog
                         if(cur_id[7+j]==overtime_rec[i][j])
                         m++;
                      }
                      if(m==18)       //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
                      {
                         NUM_OVERTIME++;
                         e[k]=i;                                            //将对应的数组下标保存在e[]
                         k++;
                      }
                  }
               }
            }
            else if((b[0]==c[0]) && (b[1]==c[1]) && (b[2]==c[2]))  //如果停车前1天的年月日与之相同
            {
                //判断驾驶员是否为当前驾驶员

                m=0;
                for(j=0;j<18;j++)
                {
                   Clr_WDog();       //清w-dog
                   if(cur_id[7+j]==overtime_rec[i][j])
                   m++;
                }

                if(m==18)       //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
                {
                   NUM_OVERTIME++;
                   e[k]=i;                                            //将对应的数组下标保存在e[]
                   k++;
                }
            }
            else if((d[0]==c[0]) && (d[1]==c[1]) && (d[2]==c[2]))  //如果停车当天的年月日与之相同
            {
                //判断驾驶员是否为当前驾驶员
                m=0;
                for(j=0;j<18;j++)
                {
                   Clr_WDog();       //清w-dog
                   if(cur_id[7+j]==overtime_rec[i][j])
                   m++;
                }

                if(m==18)       //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
                {
                   NUM_OVERTIME++;

                   e[k]=i;                                            //将对应的数组下标保存在e[]
                   k++;

                }
            }
            i=(i+1)%21;
            l++;
        }while(l<21);

        clrlcd();
        if(NUM_OVERTIME==0)
        {
           wlcd16x16(1,13,0,ch16x16_53);     //显示没有超时记录
           wlcd16x16(1,29,0,ch16x16_54);
           wlcd16x16(1,45,0,ch16x16_7);
           wlcd16x16(1,61,0,ch16x16_8);
           wlcd16x16(1,77,0,ch16x16_28);
           wlcd16x16(1,93,0,ch16x16_29);
        }

⌨️ 快捷键说明

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