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

📄 12232driver.lst

📁 单片机课程设计指导--源程序 89C52单片机+GSM模块
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 12232DRIVER
OBJECT MODULE PLACED IN 12232DRIVER.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE 12232DRIVER.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          #include <reg52.h>              //89C52单片机头文件
   4          #include <LCD_code.h>           //液晶LCD的字模文件
   5          #include <intrins.h>            
   6          
   7          //功能引脚定义
   8          
   9          sbit A = P0^7;                  //数据1/命令0选择
  10          sbit RW = P0^6;                 //读1/写0
  11          sbit E1 = P0^4;                 //片选1(Master)
  12          sbit E2 = P0^5;                 //片选2(slave)
  13          sbit LED= P0^3;                 //背光 
  14          sbit up  = P0^0;                //向上翻页键             
  15          sbit down= P0^1;                //向下翻页键
  16          #define data P2                 //液晶并行数据
  17          
  18          
  19          //液晶显示控制命令表
  20          #define disp_on 0xAf            //显示关闭
  21          #define disp_off 0xAe           //显示打开
  22          #define disp_start_line 0xC0    //显示起始地址(后5位-表示0-31行)
  23          #define page_addr_set 0xB8      //页地址设置(0~3)
  24          #define col_addr_set 0x00       //列地址设置(0~61)
  25          #define status_busy 0x80        //0=ready
  26          #define modeRWite 0xEE          //写模式
  27          #define dynamic_driver 0xA4     //动态驱动 
  28          #define adc_select 0xA0         //clockwise
  29          #define clk32 0xA9              //刷新时钟设置1/32
  30          #define clk16 0xA8              //刷新时钟设置1/16
  31          #define reset 0xE2              //软件复位
  32          
  33          #define uchar unsigned char
  34          #define uint unsigned int
  35          
  36          //全局变量,及标志位定义
  37          uchar time_counter = 0;         //定时器的软件计数器
  38          uchar key = 0;                  //键盘值
  39          uchar serial_counter;           //串行计数器
  40                  
  41          bit disp_flag = 0;              //显示更新标志
  42          uchar bdata serial_byte = 0;    //串行口标志位定义字节
  43          sbit Sflag = serial_byte^0;     //串行接收头部标志,一下8个都定义在'serial_byte'内
  44          sbit G1flag = serial_byte^1;
  45          sbit Pflag = serial_byte^2;
  46          sbit G2flag = serial_byte^3;
  47          sbit G3flag = serial_byte^4;
  48          sbit Aflag = serial_byte^5;
  49          sbit DFflag = serial_byte^6;
  50          sbit ENflag = serial_byte^7;
  51          bit r_flag = 0;
  52          
  53          unsigned char idata serial_buff[77];    //串行接收缓冲
  54          //uchar code head[] = {'$','G','P','G','G','A',','};
  55          //bit serial_flag = 0;  
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 2   

  56          
  57          
  58          ////液晶操作主要函数////////////////////////////////////////////////////////////
  59          //void lcd_init(void)
  60          //引用:lcd_init(); 说明:LCD初始化;
  61          ////////////////////////////////////////////////////////////////////////////////
  62          //void lcd_clr(void)
  63          //引用:lcd_clr(); 说明:LCD清屏;
  64          ////////////////////////////////////////////////////////////////////////////////
  65          
  66          void lcd_init(void);            //LCD初始化
  67          void lcd_clr(void);             //LCD清屏
  68          void wait_ready(void);          //等待ready
  69          void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp); //点阵码显示输出
  70          void ASCII2BCD(void);           //ASCII码转换为BCD码    
  71          void logo(void);                //开机画面显示
  72          
  73          /*----------------------------------------------------------------------------
  74                                          中断程序
  75          -----------------------------------------------------------------------------*/
  76          ////////////////////////////////////////////////////////////////////////////////
  77          //定时器0中断函数,用于控制背光灯延时10S熄灭
  78          ///////////////////////////////////////////////////////////////////////////////
  79          void int_t0() interrupt 1 using 1
  80          {                               //定时器0中断函数,用于控制背光灯延时10S熄灭
  81   1        TH0  = 0x4C;
  82   1        TL0  = 0x00;                  //重装定时器0,定时50mS
  83   1        time_counter ++;              //软件计数器+1;
  84   1        if (time_counter == 200)      //软件计数器定时到10S,关背光,定时器0,清软件计数器
  85   1              {
  86   2                time_counter = 0;
  87   2                LED = 1;
  88   2                TR0 = 0;
  89   2               }
  90   1      }
  91          
  92          ////////////////////////////////////////////////////////////////////////////////
  93          //串行口中断函数,用于语句'$GPGGA'判断和此语句的接收
  94          ///////////////////////////////////////////////////////////////////////////////
  95          
  96          
  97          void serial() interrupt 4 using 2
  98          {
  99   1       uchar pp;
 100   1       RI=0;                                          
 101   1       pp=SBUF;
 102   1              if(ENflag==1)                           //串口接收完毕,可以用来显示,清标志位重新开始
 103   1                 {
 104   2                   disp_flag=1;
 105   2                   serial_byte = 0;           
 106   2                  }
 107   1              else if(DFflag==1)                      //'$GPGGA'头判断完毕,开始接收$GPGGA,语句的数据
 108   1                    {
 109   2                     if(pp==42)                       
 110   2                          ENflag=1;                   //等待收到'*'结束接收
 111   2                     else  
 112   2                        {
 113   3                          serial_buff[serial_counter]=pp;     //没收到'*',继续接收,数据放入串口缓冲
 114   3                          serial_counter++;   
 115   3                        }                
 116   2                    }  
 117   1              else if(Aflag==1)                       //第六个为'A',判断第七个是不是','
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 3   

 118   1                     {
 119   2                       if(pp==44)
 120   2                            DFflag=1;                 //第七个个是','开始接收$GPGGA,语句的数据
 121   2                       else 
 122   2                            serial_byte = 0;          //不是',',清标志位
 123   2                     } 
 124   1              else if(G3flag==1)                      //第五个为'G',判断第六个是不是'A'
 125   1                     {
 126   2                       if(pp==65)
 127   2                            Aflag=1;                  //第六个是'A'判断下一个是不是','
 128   2                       else 
 129   2                            serial_byte = 0;          //不是'A',清标志位
 130   2                      } 
 131   1              else if(G2flag==1)                      //第四个为'G',判断第五个是不是'G'
 132   1                      {
 133   2                        if(pp==71)
 134   2                             G3flag=1;                //第五个是'G'判断下一个是不是'A'
 135   2                        else 
 136   2                             serial_byte = 0;         //不是'G',清标志位
 137   2                            } 
 138   1              else if(Pflag==1)                       //第三个为'P',判断第四个是不是'G'
 139   1                      {
 140   2                        if(pp==71)
 141   2                             G2flag=1;                //第四个是'G'判断下一个是不是'G'
 142   2                        else 
 143   2                             serial_byte = 0;         //不是'G',清标志位
 144   2                                 }
 145   1              else if(G1flag==1)                      //第二个为'G',判断第三个是不是'P'
 146   1                       {
 147   2                         if(pp==80)
 148   2                               Pflag=1;               //第三个是'P'判断下一个是不是'G'
 149   2                         else 
 150   2                               serial_byte = 0;       //不是'P',清标志位
 151   2                       } 
 152   1               else if(Sflag==1)                      //第一个为'$',判断第二个是不是'G'
 153   1                       {
 154   2                         if(pp==71)
 155   2                                G1flag=1;             //第二个是'G'判断下一个是不是'P'
 156   2                         else
 157   2                                serial_byte = 0;      //不是'G',清标志位
 158   2                       }  
 159   1               else if(pp==0x24)                      //判断第一个是不是$
 160   1                       {
 161   2                          Sflag=1;                    //第一个为$,判断下一个是不是G
 162   2                          serial_counter=0;           //串行计数器清零
 163   2                        } 
 164   1      } 
 165          
 166          
 167          /*
 168          
 169          void serial() interrupt 4 using 2
 170          {
 171            uchar i,buff;
 172            RI = 0;
 173            buff = SBUF;
 174            if(serial_flag == 1)
 175              {
 176                serial_buff[serial_counter] = buff;
 177                serial_counter ++;
 178                if(serial_counter > 37)
 179                  {
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 4   

 180                    serial_flag = 0;
 181                    serial_counter = 0;
 182                    for(i=0;i>7;i++)
 183                      {
 184                       if(head[i] == serial_buff[i])
 185                         {
 186                           disp_flag = 1;
 187                         }
 188                       else
 189                         {
 190                           disp_flag = 0;
 191                           i = 8;
 192                         }
 193                       
 194                       }
 195          
 196                  }
 197          
 198               }
 199            else
 200              {
 201                if(SBUF == '$')
 202                  {
 203                    serial_buff[0] = buff;
 204                    serial_flag = 1;
 205                    serial_counter ++;
 206                  }
 207                else
 208                  {
 209                    serial_flag = 0;
 210                    serial_counter = 0;
 211                    
 212                  } 
 213              }
 214          }
 215          */
 216          
 217          
 218          ////////////////////////////////////////////////////////////////////////////////
 219          //调用方式:void send_mi(uchar instuction)
 220          //函数说明:发指令instruction到主窗口(内函数,私有,用户不能直接调用)
 221          ////////////////////////////////////////////////////////////////////////////////
 222          void send_mi(uchar instruction)
 223          { 
 224   1      E2 = 0;                 //关Slaver 
 225   1      E1 = 1;                 //开Master 
 226   1      wait_ready();           //判断忙
 227   1      A = 0;                  //指令
 228   1      RW = 0;                 //写触发 
 229   1      data = instruction;     //指令码
 230   1      E1 = 0;                 //关Master
 231   1      }
 232          
 233          ////////////////////////////////////////////////////////////////////////////////
 234          //调用方式:void OutMD(uchar i)
 235          //函数说明:发数据data到主窗口(内函数,私有,用户不能直接调用)
 236          ////////////////////////////////////////////////////////////////////////////////
 237          void send_md(uchar c)
 238          {
 239   1      E2 = 0;                 //关Slaver
 240   1      E1 = 1;                 //开Master
 241   1      wait_ready();           //判断忙
C51 COMPILER V7.09   12232DRIVER                                                           10/07/2004 17:58:58 PAGE 5   

 242   1      A = 1;                  //数据
 243   1      RW = 0;                 //写触发 
 244   1      data = c;               //数据
 245   1      E1 = 0;                 //关Master
 246   1      }
 247          
 248          ////////////////////////////////////////////////////////////////////////////////
 249          //调用方式:void send_si(uchar instruction)
 250          //函数说明:发指令instruction到从窗口(内函数,私有,用户不能直接调用)
 251          ////////////////////////////////////////////////////////////////////////////////
 252          void send_si(uchar instruction)
 253          { 
 254   1      E1 = 0;                 //关Master
 255   1      E2 = 1;                 //开Slaver
 256   1      wait_ready();           //判断忙

⌨️ 快捷键说明

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