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

📄 12232driver.lst

📁 单片机课程设计指导--源程序 89C52单片机+GSM模块
💻 LST
📖 第 1 页 / 共 3 页
字号:
 522   3               j++;
 523   3             }
 524   2      
 525   2           if (j == 27)                               //显示'"'(秒)
 526   2             {
 527   3               draw_bmp(40+row*8,0,8,num[14]); 
 528   3               row++;
 529   3               break;
 530   3             }
 531   2           draw_bmp(40+row*8,0,8,num[serial_buff[j]]); //显示数字
 532   2           row++;
 533   2      
 534   2          }
 535   1        
 536   1        
 537   1        row = 0;
 538   1        draw_bmp(0,1,16,azimuth[serial_buff[17]-20]);  //判断南、北,并显示
 539   1        draw_bmp(16,1,16,wei);                         //显示纬
 540   1        draw_bmp(32,1,8,num[13]);                      //显示:
 541   1        for(j = 7;j<15;j++)
 542   1          {
 543   2           
 544   2           if (j==9)                                  //显示数字度符号
 545   2             {
 546   3               draw_bmp(40+row*8,1,8,num[11]); 
 547   3               row++;
 548   3             }
 549   2           if (j==11)
 550   2             {
 551   3               draw_bmp(40+row*8,1,8,num[12]);        //显示'''(分)
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 10  

 552   3               row++;
 553   3               j++;
 554   3               
 555   3             }
 556   2           if (j==14)                                 //显示'"'(秒)
 557   2             {
 558   3               draw_bmp(40+row*8,1,8,num[14]); 
 559   3               row++;
 560   3               break;
 561   3             }
 562   2           draw_bmp(40+row*8,1,8,num[serial_buff[j]]); //显示数字
 563   2           row++;
 564   2           
 565   2          }                      
 566   1         
 567   1      
 568   1      }
 569          
 570          
 571          disp_time()
 572          {
 573   1        uchar hour, j, row = 0;       
 574   1        lcd_clr();                    //清屏
 575   1        draw_bmp(29,0,64,bjsj);       //在液晶上部29列开始显示'北京时间'
 576   1        hour = serial_buff[0]*10+serial_buff[1]+8;    //格林尼治时间转化为北京时间
 577   1        if (hour>23)                                  //北京时间=格林尼治时间+8
 578   1        {hour = hour - 24;}                           //当大于24时,减去24
 579   1        serial_buff[0] = hour/10;                     //回存到缓冲区
 580   1        serial_buff[1] = hour%10;
 581   1        for( j=0;j<6;j++ )                            //显示6个数字和2个冒号,格式为XX:XX:XX
 582   1         {
 583   2           draw_bmp(29+row*8,1,8,num[serial_buff[j]]); //显示6个数字
 584   2           row++;
 585   2           if ((j==1)||(j==3))                        //第2个和第4个数字后面显示':'
 586   2             {
 587   3               draw_bmp(29+row*8,1,8,num[13]);        //显示冒号
 588   3               row++;
 589   3             }
 590   2         }
 591   1        
 592   1      }
 593          
 594          disp_level()
 595          {
 596   1       uchar i,j,row = 1;
 597   1       lcd_clr();
 598   1       draw_bmp(0,0,120,level);
 599   1       if(serial_buff[32] == 0)  //无GPS接收信号
 600   1         {
 601   2           draw_bmp(0,1,112,nosignal);
 602   2         }
 603   1       else
 604   1         {                    //探测水平信号数据存放的位置
 605   2           for (i=35;row;)
 606   2             {
 607   3               if (serial_buff[i] == 'M')
 608   3                 {
 609   4                   i = i+2;
 610   4                   row = 0;   //跳出循环
 611   4                 }
 612   3               else
 613   3                 {
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 11  

 614   4                  i++;
 615   4                 }
 616   3             }
 617   2           j = i;
 618   2           row = 1;
 619   2           for (;row;)
 620   2             {
 621   3              if (serial_buff[j] == 'M')
 622   3                 {
 623   4                   row = 0;   //跳出循环
 624   4                 }
 625   3               else
 626   3                 {
 627   4                  j++;
 628   4                 }
 629   3             } 
 630   2             
 631   2           for (;i<j-1;i++)
 632   2             {
 633   3               draw_bmp(0+row*8,1,8,num[serial_buff[i]]);
 634   3               row ++;
 635   3             }
 636   2          draw_bmp(0+row*8,1,8,num[15]);
 637   2         }
 638   1       
 639   1      }
 640          
 641          
 642          disp_speed()                                    //速度显示程序
 643          {
 644   1      
 645   1      }
 646          
 647          disp_direction()                                //方向显示程序
 648          {
 649   1      
 650   1      }
 651          /*-----------------------------------------------------------------------
 652                          显示程序,根据键盘值调用不同的显示函数
 653          -------------------------------------------------------------------------*/
 654          
 655          
 656          display()
 657          {
 658   1       ASCII2BCD ();                  //先调用ASCII转换函数,将ASCII转换为BCD
 659   1       
 660   1       switch (key)
 661   1         {                            //根据键盘值调用不同的显示函数
 662   2           case 0 : { disp_transit();  break;}        //键盘值0,显示经纬度
 663   2           case 1 : { disp_time();     break;}        //键盘值1,显示北京时间
 664   2           case 2 : { disp_level();    break;}
 665   2           case 3 : { disp_speed();    break;}        //键盘值3,显示速度
 666   2           case 4 : { disp_direction();break;}        //键盘值4,显示方向
 667   2           default: { disp_transit();  break;}
 668   2                                                      //可扩充
 669   2         }
 670   1      
 671   1      }
 672          
 673          
 674          /*-----------------------------------------------------------------------
 675                          将接收到的ASCII转换位BCD码和特定值
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 12  

 676          ------------------------------------------------------------------------*/
 677          
 678          void ASCII2BCD(void)
 679          {                       
 680   1        uchar i;
 681   1        for (i=0;i<60;i++)            //只转换前38个接收到的数据
 682   1          {
 683   2            if ((serial_buff[i] >= 48) && (serial_buff[i] <= 57) )  
 684   2              {                       //接收到的是数字,转换为BCD码。BCD码=ASCII码-48
 685   3                serial_buff[i] = serial_buff[i]-48 ;
 686   3              }
 687   2            else
 688   2              {
 689   3                switch ( serial_buff[i] )
 690   3                             {        //非数字,将它们转换为特定值
 691   4                              case '.' : { serial_buff[i] = 10; break; }
 692   4                              
 693   4                              case '-' : { serial_buff[i] = 16; break; }
 694   4                                                      
 695   4                              case 'E' : { serial_buff[i] = 20; break; }
 696   4                              case 'S' : { serial_buff[i] = 21; break; }
 697   4                              case 'W' : { serial_buff[i] = 22; break; }
 698   4                              case 'N' : { serial_buff[i] = 23; break; }
 699   4                              case ',' : { serial_buff[i] = 0xff;break;}
 700   4                              default : break;
 701   4                             }
 702   3              }
 703   2          }
 704   1      }
 705          /*-------------------------------------------------------------------------
 706                              开机LOGO画面,开机时调用一次
 707          ---------------------------------------------------------------------------*/
 708          
 709          void logo(void)
 710          {                                
 711   1        uchar i, j, h ;
 712   1        LED = 0;                       //点亮背光灯
 713   1        TR0 = 1;                       //开定时器0,背光灯亮10S
 714   1        lcd_clr();
 715   1        draw_bmp(0,0,112,welcome_1);  //在液晶上部第0列开始显示’Welcome to GPS‘
 716   1        draw_bmp(32,1,48,welcome_2);  //在液晶下部第32列开始显示显示’System‘
 717   1        for(i=0;i<10;i++)for(j=1;j;j++)for(h=1;h;h++);  //延时3S
 718   1        lcd_clr();                    //清屏
 719   1        draw_bmp(0,0,64,welcome_3);   //在液晶上部第0列开始显示'设计者:'
 720   1        draw_bmp(64,1,48,welcome_4);  //在液晶下部第64列开始显示'唐召波'
 721   1        for(i=0;i<5;i++)for(j=1;j;j++)for(h=1;h;h++);  //延时1.5S
 722   1        
 723   1      }
 724          
 725          
 726          ////////////////////////////////////////////////////////////////////////////////
 727          //                              主程序
 728          ////////////////////////////////////////////////////////////////////////////////
 729          void main(void)
 730          { 
 731   1        P0   = 0xff;                  //端口复位
 732   1        P1   = 0xff;
 733   1        P2   = 0xff;
 734   1        P3   = 0xff;
 735   1        delay(255);   
 736   1        lcd_init();                   //初始化液晶显示器
 737   1        lcd_init();
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 13  

 738   1        lcd_init();
 739   1        lcd_clr();                    //清屏
 740   1        logo();                       //显示开机画面
 741   1      
 742   1      //TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0
 743   1      //        0    0   1  0   0    0   0  1
 744   1        TMOD = 0x21;                  //T0 16位定时器,T1 自动重装,方式3
 745   1        TH0  = 0x4C;
 746   1        TL0  = 0x00;                  //定时50mS
 747   1      //SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI
 748   1      //        0   1   0   0   0   0  0  0
 749   1        SCON = 0x40;                  //串行口8位UTRA
 750   1        TH1  = 0xFA;
 751   1        TL1  = 0xFA;                  //波特率发生器,4800bps
 752   1        ET0  = 1;                     //开定时器0中断允许
 753   1        ES   = 1;                     //开串行口中断
 754   1        EA   = 1;                     //开总中断
 755   1        REN  = 1;                     //允许串行接收
 756   1        TR1  = 1;                     //开串行口波特率发生(T1)
 757   1        while(1)                      //主程序
 758   1          {
 759   2           up = 1;                    //把键盘位置1,以便进行键盘输入
 760   2           down = 1;
 761   2           keywork();                 //键盘扫描
 762   2           if(disp_flag)              //判断是否可以更新显示
 763   2             {
 764   3               disp_flag = 0;         //清显示更新标志
 765   3               display();             //显示程序
 766   3             }
 767   2      
 768   2           }
 769   1      }
 770          
 771          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1877    ----
   CONSTANT SIZE    =   1600    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      29
   IDATA SIZE       =     77    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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