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

📄 12864p.lst

📁 MS12864-R驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.12   12864P                                                                07/17/2008 09:40:08 PAGE 1   


C51 COMPILER V8.12, COMPILATION OF MODULE 12864P
OBJECT MODULE PLACED IN 12864p.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864p.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************
   2          *【文 件 名】:12864p.c                                            *
   3          *【建立日期】:2008年7月16日                                       *
   4          *【修改日期】:2008年7月17日                                       *
   5          *【文件作用】:液晶12864驱动程序,包括所有关于液晶得函数           *
   6          *【说    明】:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;   *
   7          *              (一般RW都设为0,即只向液晶写数据,不读数据)       *
   8          *              RS=1,写入的是数据;RS=0,写入的是指令;            *
   9          *              一般模式:RW=0,RS=1;写数据                         *
  10          *                        RW=0,RS=0;写指令                         *
  11          *------------------------------------------------------------------*
  12          *【作    者】:郭鑫(ben)                                           *
  13          *【版    权】:国家创新性实验项目,编号GCS07001                    *
  14          *******************************************************************/
  15          
  16          
  17          
  18          /*******************************************************************
  19          *【函 数 名】:delay                                               *
  20          *【修改日期】:2008年7月2日                                        *
  21          *【函数作用】:延时x MS                                            *
  22          *------------------------------------------------------------------*
  23          *【备    注】:                                                    *
  24          *******************************************************************/
  25          #include "12864p.h"
  26          
  27          void delay(uint ms) 
  28          { 
  29   1          uint i; 
  30   1          while(ms--)    
  31   1         { 
  32   2           for(i=1;i<1142;i++); 
  33   2         }   
  34   1      }
  35          
  36          
  37          
  38          //延时约2us
  39          void delayUs()
  40          {
  41   1          _nop_();_nop_();
  42   1      }
  43          //延时 a * 1ms
  44          void delayMs(uint a)
  45          {
  46   1          uint i, j;
  47   1          for(i = a; i > 0; i--)
  48   1              for(j = 150; j > 0; j--);
  49   1      }
  50          
  51          //检测LCD是否处于忙状态, 若忙返回1, 空闲返回0
  52          bit checkBusy()
  53          {
  54   1          bit busy;
  55   1          RS = 0;
C51 COMPILER V8.12   12864P                                                                07/17/2008 09:40:08 PAGE 2   

  56   1          RW = 1;
  57   1          E = 1;
  58   1          delayUs();
  59   1          busy = (bit)(P0&0x80);
  60   1          E = 0;
  61   1          delayMs(1);
  62   1      
  63   1          return busy;
  64   1      }
  65          
  66          //等待LCD到空闲
  67          void wait()
  68          {
  69   1          while(checkBusy());
  70   1      }
  71          
  72          /*******************************************************************
  73          *【函 数 名】:lcd_cmd_w                                           *
  74          *【修改日期】:2008年7月16日                                       *
  75          *【函数作用】:12864写入一条命令                                   *
  76          *------------------------------------------------------------------*
  77          *【备    注】:                                                    *
  78          *******************************************************************/
  79          void lcd_cmd_w(uchar cmd)
  80          {
  81   1          wait();
  82   1          RS = 0;
  83   1          RW = 0;
  84   1          E = 0;
  85   1          delayUs();
  86   1          P0 = cmd;
  87   1          delayUs();
  88   1          E = 1;
  89   1          delayUs();
  90   1          E = 0;
  91   1      
  92   1          delayMs(1);
  93   1      
  94   1      }
  95          
  96          /*******************************************************************
  97          *【函 数 名】:lcd_dat_w                                           *
  98          *【修改日期】:2008年7月16日                                       *
  99          *【函数作用】:12864写入一个字节数据                               *
 100          *------------------------------------------------------------------*
 101          *【备    注】:                                                    *
 102          *******************************************************************/
 103          void lcd_dat_w(uchar dat)
 104          {
 105   1          wait();
 106   1          RS = 1;
 107   1          RW = 0;
 108   1          E = 0;
 109   1          delayUs();
 110   1          P0 = dat;
 111   1          delayUs();
 112   1          E = 1;
 113   1          delayUs();
 114   1          E = 0;
 115   1      
 116   1          delayMs(1);
 117   1      
C51 COMPILER V8.12   12864P                                                                07/17/2008 09:40:08 PAGE 3   

 118   1      }
 119          
 120          /*******************************************************************
 121          *【函 数 名】:lcd_initial                                         *
 122          *【修改日期】:2008年7月6日                                        *
 123          *【函数作用】:12864初始化                                         *
 124          *------------------------------------------------------------------*
 125          *【备    注】:                                                    *
 126          *******************************************************************/
 127          void lcd_initial()
 128          {
 129   1          lcd_cmd_w(0x30); //基本指令, 扩充指令为34H
 130   1          lcd_cmd_w(0x0c); //显示开, 关光标
 131   1          lcd_cmd_w(0x01); //清屏
 132   1          lcd_cmd_w(0x02); 
 133   1          lcd_cmd_w(0x80); 
 134   1      
 135   1      
 136   1      
 137   1      }
 138          
 139          /*******************************************************************
 140          *【函 数 名】:lcd_setpostion                                      *
 141          *【修改日期】:2008年7月16日                                       *
 142          *【函数作用】:12864写入8位数据                                    *
 143          *------------------------------------------------------------------*
 144          *【备    注】:从高位开始传送                                      *
 145          *******************************************************************/
 146          void lcd_setposition(uchar row, uchar col)
 147          {
 148   1          uchar p;
 149   1          switch(row%5)
 150   1          {
 151   2              case 1: p = 0x80; break; //第一行开始地址
 152   2              case 2: p = 0x90; break; //第二行
 153   2              case 3: p = 0x88; break; //第三行
 154   2              case 4: p = 0x98; break; //第四行
 155   2          }
 156   1          p += col;
 157   1          lcd_cmd_w(p);
 158   1          delayMs(2);
 159   1      
 160   1      }
 161          
 162          /*******************************************************************
 163          *【函 数 名】:lcd_str_w                                           *
 164          *【修改日期】:2008年7月16日                                       *
 165          *【函数作用】:12864写入字符串                                     *
 166          *------------------------------------------------------------------*
 167          *【备    注】:                                                    *
 168          *******************************************************************/
 169          void lcd_str_w(uchar * str)
 170          {
 171   1          uchar i = 0;
 172   1          while(str[i] != '\0')
 173   1          {
 174   2              lcd_dat_w(str[i++]);
 175   2          }
 176   1      }
 177          
 178          /*******************************************************************
 179          *【函 数 名】:lcd_row_on                                          *
C51 COMPILER V8.12   12864P                                                                07/17/2008 09:40:08 PAGE 4   

 180          *【修改日期】:2008年7月8日                                        *
 181          *【函数作用】:选择一行反白显示                                    *
 182          *------------------------------------------------------------------*
 183          *【备    注】:                                                    *
 184          *******************************************************************/
 185          void lcd_row_on(uchar temp)
 186          {
 187   1              uchar i, j, x, y;
 188   1          y = temp - 1;
 189   1          if(y >= 2)
 190   1          {
 191   2              x = 8;
 192   2              y = (y-2)*16;
 193   2           }
 194   1           else
 195   1           {
 196   2              x = 0;
 197   2              y = y*16;
 198   2            }
 199   1      
 200   1      //      lcd_cmd_w(0x34);
 201   1              lcd_cmd_w(0x36);
 202   1              for(i=0; i<16; i++)
 203   1              {    
 204   2              
 205   2              lcd_cmd_w(0x80+y);
 206   2              lcd_cmd_w(0x80+x);
 207   2              y++;
 208   2      
 209   2                      for(j=0; j<16; j++)
 210   2                      {
 211   3                              lcd_dat_w(0xff);    
 212   3               }
 213   2              }
 214   1          lcd_cmd_w(0x30);
 215   1          delay(2);
 216   1      }

⌨️ 快捷键说明

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