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

📄 d_lock.lst

📁 12864的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   D_LOCK                                                                11/05/2007 15:59:30 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE D_LOCK
OBJECT MODULE PLACED IN d_lock.OBJ
COMPILER INVOKED BY: E:\Program Files\UV2\C51\BIN\C51.EXE d_lock.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***************************************************************\
   2          |*          12864LCD显示程序 proteus7.1仿真AMPIRE128*64       *|
   3          |*        Copyright (c) 2007山师.传播       */
   4          /*        All rights reserved.                  */
   5                /*赵彦彬                                  *|
   6          |*                                       *|
   7          |*          
   8          \***************************************************************/
   9          
  10          
  11          
  12          #include"w_word.h"
  13          
  14          
  15          
  16          /**********************************************\
  17          |*   写命令子程序  
  18                 使用变量:
  19                 入口参数:NULL
  20                 返回参数:NULL                        
  21                 调用函数:NULL
  22                 实现功能 :         
  23          \**********************************************/ 
  24          void write_cmd(uchar cmd)             //写命令子程序 
  25          { RW=0;
  26   1        DI=0;                  //DI=0 写命令 
  27   1        E=1;
  28   1        P1=cmd;
  29   1        E=0;       //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR 
  30   1         }
  31          
  32          /**********************************************\
  33          |*   写数据子程序                             *|
  34                  使用变量:
  35                 入口参数:NULL
  36                 返回参数:NULL                        
  37                 调用函数:NULL
  38                 实现功能 :                              *|
  39          \**********************************************/ 
  40          void write_dat(uchar dat)             //写数据子程序
  41          { RW=0;
  42   1        DI=1;   //DI=1  写数据
  43   1        E=1;
  44   1        P1=dat;
  45   1        E=0;    //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR 
  46   1         }
  47          
  48          /**********************************************\
  49          |*   设置显示起始行 X地址和Y地址              *|
  50          |      使用变量:
  51                 入口参数:st_line 起始行x_ad起始页y_ad起始列
  52                 返回参数:NULL                        
  53                 调用函数:NULL
  54                 实现功能 :
  55          \**********************************************/ 
C51 COMPILER V7.50   D_LOCK                                                                11/05/2007 15:59:30 PAGE 2   

  56          
  57          void set_dis(uchar st_line,uchar x_ad,uchar y_ad)  //设置显示起始行 X地址和Y地址
  58          {  
  59   1      //write_cmd(st_line+0xc0);                //+0xc0是参照设置起始行的格式
  60   1       write_cmd(x_ad+0xb8);                  //+0xb8是参照设置页地址的格式
  61   1        if(y_ad<64) { CS1=0;CS2=1;write_cmd(y_ad+0x40);} //Y_add地址实际上只有0~63 采用CS1和CS2选左右半屏
  62   1            else     { CS1=1;CS2=0;write_cmd(y_ad);}      //选第一片时,+64第二片为y_add-64+64
  63   1       }
*** WARNING C280 IN LINE 57 OF D_LOCK.C: 'st_line': unreferenced local variable
  64          
  65          
  66          
  67          /***********************************************\
  68          |*   显示子程序                                                          *|
  69                 使用变量:i,j,k
  70                 入口参数:st_line 起始行x_ad起始页y_ad起始列
  71                                     buf数据指针count显示字数
  72                 返回参数:NULL                        
  73                 调用函数:set_dis(),write_dat()
  74                                      write_cmd  
  75                 实现功能 :
  76          \***********************************************/ 
  77          void write_word(uchar st_line,uchar x_a,uchar y_a,uchar *buf,uchar count) //写入汉字
  78          { uint i,j,k=1;
  79   1          set_dis(st_line, x_a,y_a);
  80   1       for(j=0;j<count;j++)                //显示的字数
  81   1       {      set_dis(st_line,x_a,y_a);
  82   2              for(i=0;i<16;i++)
  83   2               write_dat(*(buf+i+j*32)) ;        //字的下半部分,x_add+1
  84   2              set_dis(st_line,x_a+1,y_a);
  85   2              for(i=16;i<32;i++)
  86   2         write_dat(*(buf+i+j*32));         
  87   2              set_dis(st_line,x_a,y_a=y_a+16);
  88   2      
  89   2              if(y_a==128)                   //一行的字数超过8 y_add>128时换行
  90   2              {                         //为什么每次换行第一列子的上半部分出现错误?
  91   3      
  92   3              x_a=2*k;
  93   3      
  94   3              y_a=0;
  95   3      
  96   3              set_dis(st_line,x_a,y_a);
  97   3              set_dis(st_line,x_a,y_a);
  98   3              k++;
  99   3              }
 100   2      }
 101   1      write_cmd(0x3f); 
 102   1      CS1=CS2=1;
 103   1      }
 104          /****************************************/
 105          /*     使用变量:j,k
 106                 入口参数:st_line ,x_a,y_a,(x_end终止行y_enda终止列
 107                 返回参数:NULL                        
 108                 调用函数:set_dis()
 109                                     write_dat( )write_cmd()
 110                 实现功能:
 111          /***************************************/
 112          void clrdis(uchar st_line,uchar x_a,uchar y_a,uchar count) //写入汉字
 113          { uint i,j,k=1;
 114   1      
 115   1          set_dis(st_line, x_a,y_a);
 116   1       set_dis(st_line, x_a,y_a);//////////////////111111111111111111
C51 COMPILER V7.50   D_LOCK                                                                11/05/2007 15:59:30 PAGE 3   

 117   1       for(j=0;j<count;j++)                //显示的字数
 118   1       {      //set_dis(st_line,x_ad,y_ad);//////////////1111111111111111111111111111
 119   2              for(i=0;i<16;i++)
 120   2               write_dat(0) ;        //字的下半部分,x_add+1
 121   2              set_dis(st_line,x_a+1,y_a);
 122   2              for(i=16;i<32;i++)
 123   2         write_dat(0); 
 124   2           
 125   2              set_dis(st_line,x_a,y_a=y_a+16);
 126   2      
 127   2              if(y_a==128)                   //一行的字数超过8 y_add>128时换行
 128   2              {                         //为什么每次换行第一列子的上半部分出现错误?
 129   3      
 130   3              x_a=2*k;
 131   3      
 132   3              y_a=0;
 133   3      
 134   3              set_dis(st_line,x_a,y_a);
 135   3              set_dis(st_line,x_a,y_a);
 136   3              k++;
 137   3              }
 138   2      }
 139   1      
 140   1      
 141   1      
 142   1      }
 143          
 144          
 145          /****************************************/
 146          /*    去抖动延时
 147                 使用变量:i
 148                 入口参数:NULL
 149                 返回参数:NULL                        
 150                 调用函数:NULL
 151                 实现功能:
 152          /***************************************/
 153          void delay(void)
 154          {
 155   1              uchar i;
 156   1      
 157   1              for (i=300;i>0;i--);     //0.5ms
 158   1      
 159   1      }
 160          
 161          /* 键扫描函数 */
 162          uchar keyscan(void)
 163          {       uchar i=1;
 164   1              uchar scancode,tmpcode;
 165   1       while(P2!=0xf0)    
 166   1              {P2=0xff;
 167   2               P2=0xf0;
 168   2           }// 发全0行扫描码
 169   1      while(i)
 170   1                                                                      //?????????? 延时去抖动
 171   1      {               
 172   2              
 173   2              if ((P2&0xf0)!=0xf0)                            // 延时后再判断一次,去除抖动影响
 174   2                      {   TR1=1;
 175   3                          TR0=1;
 176   3                              i=0;
 177   3                              delay();
 178   3                              scancode = 0xfe;
C51 COMPILER V7.50   D_LOCK                                                                11/05/2007 15:59:30 PAGE 4   

 179   3                              while((scancode&0x10)!=0)               // 逐行扫描
 180   3                              {
 181   4                                      P2 = scancode;                          // 输出行扫描码
 182   4                                      if ((P2&0xf0)!=0xf0)            // 本行有键按下
 183   4                                      {
 184   5                                              tmpcode = (P2&0xf0)|0x0f;
 185   5      
 186   5                                              /* 返回特征字节码,为1的位即对应于行和列 */
 187   5                                              return((~scancode)+(~tmpcode));
 188   5                                              scancode=0x00;
 189   5                                      }
 190   4                                      else scancode = (scancode<<1)|0x01;             // 行扫描码左移一位
 191   4                              }
 192   3                      }
 193   2              
 194   2      }       
 195   1      
 196   1      }
 197          
 198          /****************************************/
 199          /*   音频定时0
 200                  使用变量:music
 201                 入口参数:NULL
 202                 返回参数:NULL                        
 203                 调用函数:NULL
 204                 实现功能:
 205          /***************************************/
 206          
 207          void time0_int()  interrupt 1 
 208          {
 209   1      
 210   1              TH0=0XFD;
 211   1              TL0=0X34;
 212   1        music=~music;
 213   1      }
 214          /****************************************/
 215          /*   音响时长定时1 
 216                  使用变量:time_500ms
 217                 入口参数:NULL
 218                 返回参数:NULL                        
 219                 调用函数:NULL
 220                 实现功能:
 221          /***************************************/
 222          void time1_int()  interrupt 3
 223          {TH1=0X3C;
 224   1      TL1=0XB0;
 225   1      time_500ms++;
 226   1      if(time_500ms==30)
 227   1              {  TR1=0;

⌨️ 快捷键说明

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