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

📄 lcd12864.lst

📁 本程序为12864点阵型液晶的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN LCD12864.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE LCD12864.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /****************************************************************************************************
   2          * 文件名:       LCD12864.c                                                                                                                                                              *
   3          * 描 述:       本文件包含了液晶模块的基本函数和显示汉字的所有操作子函数,可共其他的模块进行调用                 *       
   4          * 接口定义:     用的是熊涛那块12864接口板,接口按板上定义                                                                                                *
   5          *                       P1口接DB7 -- DB0                                                                                                                                                *
   6          *                       DI -- P3.7, 数据/指令 选择                                                                                                                              *
   7          *                       RW -- P3.6, 读/写选择                                                                                                                                   *
   8          *                       E -- P3.5, 使能信号                                                                                                                                             *
   9          *                       CS2 -- P3.4, 片选1, 右半片                                                                                                                              *
  10          *                       CS1 -- P3.3, 片选2, 左半片                                                                                                                              *
  11          *                       RST -- P3.2, 复位                                                                                                                                               *
  12          * 版 本:       KEIL uV2                                                                                                                                                                *
  13          ****************************************************************************************************/
  14          
  15          
  16          //头文件
  17          #include "config.h"
  18          #include "ziku.h"
  19          
  20          
  21          //定义结构体数组
  22          struct Word_Buffer
  23          {
  24                  uchar word[2];
  25          };
  26          struct Word_Buffer word_buf[32];                                                        //定义结构体数组来存储待显示的汉字,共32个
  27          
  28          
  29          /*****************************************************************************************************
  30          * 函 数 名:     Delay
  31          * 功能描述: 本函数为延时子函数,延时 i ms
  32          * 全局变量: 无
  33          * 入口参数:     i
  34          * 出口参数:     无
  35          * 调用模块: 无
  36          * 版    本:     KEIL uV2
  37          ******************************************************************************************************/
  38          void Delay(uchar i)
  39          {
  40   1              uchar   j;
  41   1              while(i > 0)
  42   1              {
  43   2                      i--;
  44   2                      j = 122;
  45   2                      while(j > 0)
  46   2                      {
  47   3                              j--;
  48   3                      }
  49   2              }
  50   1      }
  51          
  52          /*****************************************************************************************************
  53          * 函 数 名:     Initiate
  54          * 功能描述: 本函数为液晶初始化子函数
  55          * 全局变量: 无
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 2   

  56          * 入口参数:     无
  57          * 出口参数:     无
  58          * 调用模块: 无
  59          * 版    本:     KEIL uV2
  60          ******************************************************************************************************/
  61          void Initiate(void)
  62          {
  63   1              Delay(40);
  64   1              LEFTSIDE
  65   1              WriteCmd(0x3e);                                                                                 //关显示
  66   1              RIGHTSIDE
  67   1              WriteCmd(0x3e);                                                                                 //关显示
  68   1      
  69   1              LEFTSIDE
  70   1              WriteCmd(0x3f);                                                                                 //开显示
  71   1              RIGHTSIDE
  72   1              WriteCmd(0x3f);                                                                                 //开显示
  73   1      
  74   1              LEFTSIDE                                                                                                //起始行设置为第一行
  75   1              WriteCmd(0xc0); 
  76   1              RIGHTSIDE
  77   1              WriteCmd(0xc0); 
  78   1      
  79   1              ClearDDRAM();                                                                                   //清屏
  80   1      
  81   1              LEFTSIDE                                                                                                //读左右半屏
  82   1              ReadData();
  83   1              RIGHTSIDE
  84   1              ReadData();     
  85   1      }
  86          
  87          
  88          /*****************************************************************************************************
  89          * 函 数 名:     CheckBusy
  90          * 功能描述: 本函数为判断LCD忙子函数,BUSY=1时,为忙;BUSY=0时,为空闲
  91          * 全局变量: 无
  92          * 入口参数:     
  93          * 出口参数:     无
  94          * 调用模块: 无
  95          * 日   期:
  96          * 版    本:     KEIL uV2
  97          ******************************************************************************************************/
  98          void CheckBusy(void)
  99          {
 100   1              DPORT = 0xff;
 101   1              DI = 0;
 102   1              RW = 1;
 103   1              E = 1;
 104   1              while(DPORT & 0x80);                                                                    //BUSY=1时,为忙,则等待;BUSY=0时,为空闲
 105   1              E = 0;
 106   1      }
 107          
 108          
 109          /*****************************************************************************************************
 110          * 函 数 名:     WriteCmd
 111          * 功能描述: 本函数为写指令子函数
 112          * 全局变量: 无
 113          * 入口参数:     cmd -- 要写入的指令
 114          * 出口参数:     无
 115          * 调用模块: CheckBusy()
 116          * 版    本:     KEIL uV2
 117          ******************************************************************************************************/
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 3   

 118          void WriteCmd(uchar cmd)                                                                        //写指令子函数
 119          {
 120   1      //      CheckBusy();
 121   1              DI = 0;
 122   1              RW = 0;
 123   1              DPORT = cmd;
 124   1              E = 1;
 125   1              E = 0;  
 126   1      }
 127          
 128          
 129          /*****************************************************************************************************
 130          * 函 数 名:     WriteData
 131          * 功能描述: 本函数为写数据子函数
 132          * 全局变量: 无
 133          * 入口参数:     data -- 要写入的数据
 134          *                       opp     -- 显示标志位:  为1,显示阳码(点亮为0);为0,显示阴码(点亮为1)
 135          * 出口参数:     无
 136          * 调用模块: CheckBusy()
 137          * 版    本:     KEIL uV2
 138          ******************************************************************************************************/
 139          void WriteData(uchar dat)                                                                       //写数据子函数
 140          {
 141   1      //      CheckBusy();
 142   1              DI = 1;
 143   1              RW = 0;
 144   1              DPORT = dat;
 145   1              E = 1;
 146   1              E = 0;
 147   1      }
 148          
 149          
 150          /*****************************************************************************************************
 151          * 函 数 名:     ReadData
 152          * 功能描述: 本函数为读数据子函数
 153          * 全局变量: 无
 154          * 入口参数:     
 155          * 出口参数:     无
 156          * 调用模块: CheckBusy()
 157          * 版    本:     KEIL uV2
 158          ******************************************************************************************************/
 159          uchar ReadData(void)
 160          {
 161   1              uchar   rddata;
 162   1      //      CheckBusy();
 163   1              DI = 1;
 164   1              RW = 1;
 165   1              E = 1;
 166   1              rddata = DPORT;
 167   1              E = 0;
 168   1              return  rddata; 
 169   1      }
 170          
 171          
 172          /*****************************************************************************************************
 173          * 函 数 名:     SetPos
 174          * 功能描述: 本函数为设置显示起始地址(显示行,页地址,Y地址)子函数
 175          * 全局变量: 无
 176          * 入口参数:     st_line -- 液晶显示的起始行,0--63,共64行 
 177          *                       x_add -- 液晶显示的页地址,即为DDRAM的行地址,8行为一页,共8页
 178          *                       y_add --        液晶显示的Y地址,0--127,在对DDRAM进行读/写操作后,Y地址指针自动加1
 179          * 出口参数:     无
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 4   

 180          * 调用模块: WriteCmd()
 181          * 版    本:     KEIL uV2
 182          ******************************************************************************************************/
 183          void SetPos(uchar st_line, uchar x_add, uchar y_add)            //设置显示起始地址子函数
 184          {
 185   1              st_line &= 0x3f;                                                                                //st_line(起始行)的取值范围为0--63
 186   1              x_add &= 0x07;                                                                                  //x_add(页地址)的取值范围为0--7
 187   1              WriteCmd(st_line + 0xc0);                                                               //+ 0xc0根据液晶显示模块指令中设置起始行的格式
 188   1              WriteCmd(x_add + 0xb8);                                                                 //+ 0xb1根据液晶显示模块指令中设置页地址的格式
 189   1              if(y_add < 64)
 190   1              {
 191   2                      LEFTSIDE
 192   2                      WriteCmd(y_add + 0x40);                                                         //y_add的取值范围为0-63,y_add<64时,左半屏显示
 193   2              }
 194   1              else
 195   1              {
 196   2                      RIGHTSIDE
 197   2                      WriteCmd(y_add);                                                                        //63<y_add<124时,右半屏显示
 198   2              }                                       
 199   1      }
 200          
 201          
 202          /*****************************************************************************************************
 203          * 函 数 名:     ClearDDRAM
 204          * 功能描述: 本函数为清DDRAM子函数
 205          * 全局变量: 无
 206          * 入口参数:     无
 207          * 出口参数:     无
 208          * 调用模块: WriteData(),SetPos()
 209          * 版    本:     KEIL uV2
 210          ******************************************************************************************************/
 211          void ClearDDRAM(void)
 212          {
 213   1              uchar   i;                                                                                              //i表示页地址
 214   1              uchar   j;                                                                                              //j表示列地址
 215   1              for(i = 0; i < 8; i++)                                                                  //清右半屏
 216   1              {
 217   2                      //此处注意,起始行地址受到页地址的限制
 218   2                      SetPos(0, i, 0);                                                                        //设置起始行为第0行,起始页为第0页,起始列为第0列
 219   2                      for(j = 0; j < 64; j++)                                                         //将右半屏DRAM的64个字节全部清零
 220   2                      {
 221   3                              WriteData(0);
 222   3                      }
 223   2              }
 224   1              for(i = 0; i < 8; i++)                                                                  //清左半屏
 225   1              {
 226   2                      SetPos(0, i, 64);                                                                       //设置起始行为第0行,起始页为第0页,起始列为第64列
 227   2                      for(j = 0; j < 64; j++)                                                         //将左半屏DRAM的64个字节全部清零
 228   2                      {
 229   3                              WriteData(0);
 230   3                      }
 231   2              }
 232   1      }
 233          
 234          
 235          /*****************************************************************************************************
 236          * 函 数 名:     WriteWord
 237          * 功能描述: 本函数为在液晶屏的任意位置写单个汉字的子函数
 238          * 全局变量: 无
 239          * 入口参数:     st_line,显示的起始行,0--63
 240          *                       x_add,显示的页地址,0--7 
 241          *                       y_add,显示的列地址,0--127
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 5   

 242          *                       Index[2],字符串数组,用来存储汉字
 243          * 出口参数:     无
 244          * 调用模块: WriteData(),SetPos()
 245          * 版    本:     KEIL uV2
 246          ******************************************************************************************************/

⌨️ 快捷键说明

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