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

📄 ocm240128.lst

📁 OCM240128-7.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   OCM240128                                                             11/21/2009 22:14:42 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE OCM240128
OBJECT MODULE PLACED IN OCM240128.OBJ
COMPILER INVOKED BY: f:\Keil3\C51\BIN\C51.EXE OCM240128.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**********************************************************************************************
   2          **  文件名称:       OCM240128.H
   3          **  最后修改:       2009-10-26
   4          **  版    本:       1.0
   5          **  描    素:       OCM240128液晶驱动程序
   6          **---------------------------------------------------------------------------------------------
   7          **  作    者:       李雪川
   8          **  创作日期:       2009-10-6-26
   9          **  文件描述:       OCM240128液晶驱动程序,采用8位数据总线方式驱动
  10                                                  内部字符库使用方式:字符地址 = ASCII - 0x20
  11                                    
  12          ------------------------硬件端口连接定义-------------------------------------------------------
  13          **  OXM240128           MCU
  14          **      FS                                      GND                             字形选择0: 8*8 1: 6*8
  15          **  C_D                 P2.6            =1选择指令, =0选择数据
  16          **  _CE                 P2.7            片选=0有效
  17          **  _RW                 P3.6(_RW)       总线控制读写
  18          **  _RD                 P3.7(_RD)
  19          **  PDAT                P0              8位总线数据端口
  20          ----------------------------------------------------------------------------------------------
  21          **  全局变量:
  22                  
  23          **  主要函数:           
  24          ******************OCM240128内部有CGRAM 2K(256字节)空间*************************************
  25                                  使用内部字符发生器CGROM时低128字节为内部字符,CGROM的高128字节可自己定义
  26                                  禁止内部字符发生器CGROM时CGRAM256字节都用于用户字符定义
  27                                  通过void OCM_mode(uchar mod,uchar cg) cg参数控制
  28          *******************************************************************************************
  29                                  void OCM_ac(uchar target, uint dat)                             地址设置                                        
  30                                  void OCM_area(uchar target, uint int)                   显示区域设置                                                                                                                                                            
  31                                  OCM_onewr(mod, dat)                                                             单次写
  32                                  void OCM_autrd(uint, uchar num, uchar *p)               连续自动读
  33                                  void OCM_autwr(uadd, uchar num, uchar *p)               连续自动写)
  34                                  void OCM_picture(uint addr, uchar w, uchar h, uchar *tab)       图形显示
  35                                  void OCM_picture_clr(uint addr, uchar w, uchar h)                       图形清除
  36                                  void OCM_line_clr(uint addr,uchar dat)                                          清除一行
  37                                  void OCM_clr(uchar dat)                                                 清屏            
  38                                  void OCM_init(void)                                                             初始化
  39                                                  
  40          
  41                                                  
  42                          
  43          **----------------------------------------------------------------------------------------------
  44          **  硬件平台:       51系列单片机,总线方式驱动
  45          **  软件平台:       Keil3.0
  46          *************************************************************************************************/
  47          #include "OCM240128.H"
  48          
  49          
  50          
  51          
  52          /****************************************************************************************
  53          **  函数名称:           uchar OCM_rdint(void)
  54          **  功能描述:           读OCM液晶状态字
  55          **  输入参数;           无
C51 COMPILER V8.08   OCM240128                                                             11/21/2009 22:14:42 PAGE 2   

  56          **  输出参数:           uchar   OCM液晶当前状态字
  57          **  全局变量:           无
  58          **  调用模块:           OCM240128.C文件内部调用               
  59          ****************************************************************************************/
  60          uchar OCM_rdint(void)
  61          {
  62   1          uchar init; 
  63   1          init = C_Addr;      //定义外部数据,总线方式读取指令
  64   1          return (init);
  65   1      }
  66          
  67          /******************************************************************************************
  68          **  函数名称:       uchar OCM_busy(uchar mode)     
  69          **  功能描述:       读忙判断,单次读写,自动读,自动写,屏读/考呗出错
  70                              对应位为1准备好,0状态忙
  71          **  输入参数:       uchar mode: 0       单次读写遇忙判断
  72                                          1       自动读遇忙判断
  73                                          2       自动写遇忙判断
  74                                          3       屏读/考呗出错判断
  75                                          其他    默认为0,单次读写遇忙判断 
  76          **  输出参数:       uchar               1当前查询状态准备好,0当前查询状态忙
  77          **  全局变量:       无
  78          **  调用模块:       0CM240128.C文件内部调用
  79          ******************************************************************************************/
  80          uchar OCM_busy(uchar mode)
  81          {
  82   1          uchar state = 0,busy = 0;
  83   1              
  84   1          state = OCM_rdint();        //读取当前状态字
  85   1              
  86   1          switch (mode)
  87   1          {
  88   2              case 0: busy = ((state & 0X03) == 0X03)? 1 : 0; break;     //单次读写遇忙判断
  89   2              case 1: busy = state & (0X01 << 2); break;      //自动读遇忙判断
  90   2              case 2: busy = state & (0X01 << 3); break;      //自动写遇忙判断
  91   2              case 3: busy = state & (0X01 << 6); break;      //屏读/考呗出错判断
  92   2              default:busy = ((state & 0X01) & (state & 0X02));               //默认为判断单次读写遇忙
  93   2          }
  94   1              
  95   1          return (busy);
  96   1      }
  97          
  98          
  99          
 100          /******************************************************************************************
 101          **  函数名称:           void 0CM_ac(uchar target, uint dat)
 102          **  功能描述:           AC地址设置:光标地址,CGRAM地址,显示地址设置
 103                                  双参数指令       
 104          **  输入参数:           target: 0:  光标地址设置
 105                                          1:  CGRAM地址设置默认设置的地址为0X80开始
 106                                          2:  显示地址设置(显示存储器的地址为, 该地址指针计
 107                                                                                  数器为 16 位字长)显示地址超出范围无效
 108                                          其他:默认为0:光标地址设置
 109                                                          tartet:0                                                1                               2
 110                                  dat低位:  水平位置(字节单位)    偏置地址值      低 8 位地址(字节单位)
 111                                  dat高位:  垂直位置                              0X80                    高 8 位地址
 112          **  输出参数:           无
 113          **  全局变量:           无
 114          **  调用模块:           0CM240128.C文件内部调用
 115          ******************************************************************************************/
 116          void OCM_ac(uchar target, uint dat)
 117          {
C51 COMPILER V8.08   OCM240128                                                             11/21/2009 22:14:42 PAGE 3   

 118   1              uchar dat1 ,dat2;
 119   1              
 120   1              dat1 = (uchar)(dat & 0xFF);
 121   1              dat2 = (uchar)(dat >> 8);
 122   1              
 123   1          while (!OCM_busy(0));                       //单次读写遇忙判断
 124   1                      
 125   1          switch (target)
 126   1              {
 127   2                      case 0:
 128   2                              D_Addr = (dat1 & 0X7F); //水平位置,数据的第7位有效,地址范围(0~0X4F),该指令判断不准确        
 129   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 130   2                              D_Addr = (dat2 & 0X1F); //垂直位置,第5位有效
 131   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 132   2                              C_Addr = 0X21;                                  //光标地址设置
 133   2                              break;
 134   2                      case 1:         
 135   2                              D_Addr = (dat1 & 0X1F); // 偏置地址值(高 5 位),数据第5位有效
 136   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 137   2                              D_Addr = 0X80;                          //数据2格式为0
 138   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 139   2                              C_Addr = 0X22;                                  //CGRAM地址设置
 140   2                              break;  
 141   2                      case 2:
 142   2                              D_Addr = dat1;                                  //dat1为低 8 位地址
 143   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 144   2                              D_Addr = dat2;                                  //dat2为高 8 位地址
 145   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 146   2                              C_Addr = 0X24;                                  //显示地址设置 
 147   2                              break;
 148   2                      default:
 149   2                              D_Addr = (dat1 & 0X7F); 
 150   2                              while (!OCM_busy(0));                   
 151   2                              D_Addr = (dat2 & 0X1F); 
 152   2                              while (!OCM_busy(0));                   
 153   2                              C_Addr = 0X21;                                  //默认为光标地址设置
 154   2                              break;          
 155   2              }
 156   1      }
 157          
 158          
 159          
 160          /******************************************************************************************
 161          **  函数名称:           void OCM_area(uchar target, uint dat)
 162          **  功能描述:           显示区域设置:文本显示区   图形显示区
 163                                  双参数指令       
 164          **  输入参数:           target: 0:  文本显示区首地址设置
 165                                                                          1:      文本显示区宽度设置
 166                                                                          2:      图形显示区首地址设置
 167                                                                          3:      图形显示区宽度设置
 168                                          其他:默认为无效
 169                                                          tartet: 0                       1               2              3                      
 170                                  datL:   低字节   字节数         低字节  字节数
 171                                  datH:   高字节   00           高字节  00
 172          **  输出参数:           无
 173          **  全局变量:           无
 174          **  调用模块:           0CM240128.C文件内部调用
 175          ******************************************************************************************/
 176          void OCM_area(uchar target, uint dat)
 177          {
 178   1              uchar dat1 ,dat2;
 179   1              
C51 COMPILER V8.08   OCM240128                                                             11/21/2009 22:14:42 PAGE 4   

 180   1              dat1 = (uchar)(dat & 0xFF);
 181   1              dat2 = (uchar)(dat >> 8);
 182   1              
 183   1              while (!OCM_busy(0));                   //单次读写遇忙判断
 184   1                      
 185   1          switch (target)
 186   1              {
 187   2                      case 0:
 188   2                              D_Addr = dat1;                                  //文本显示区首地址低字节        
 189   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 190   2                              D_Addr = dat2;                                  //文本显示区首地址高字节
 191   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 192   2                              C_Addr = 0X40;                                  //文本显示区首地址设置
 193   2                              break;
 194   2                      case 1:         
 195   2                              D_Addr = dat1;                                  //文本显示区宽度字节数
 196   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 197   2                              D_Addr = 0;                                             //数据2格式为0
 198   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 199   2                              C_Addr = 0X41;                                  //文本显示区宽度设置
 200   2                              break;  
 201   2                      case 2:
 202   2                              D_Addr = dat1;                                  //图形显示区首地址低字节        
 203   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 204   2                              D_Addr = dat2;                                  //图形显示区首地址高字节
 205   2                              while (!OCM_busy(0));                   //单次读写遇忙判断
 206   2                              C_Addr = 0X42;                                  //图形显示区首地址设置
 207   2                              break;

⌨️ 快捷键说明

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