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

📄 st7529.lst

📁 ST7529为一32级灰度液晶显示屏驱动芯片
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   ST7529                                                                04/15/2008 16:12:18 PAGE 1   


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

line level    source

   1          /*--------------------------------------------
   2          主题:ST7529液晶屏驱动程序 
   3          编写人:龙寿华
   4          程序功能:本程序为ST7529驱动程序 
   5          LCM驱动IC型号为:ST7529  点阵数为193*91,工作于16BIT模式。左下角为坐标原点,COL的第一条为固定
   6             ICON显示。
   7          MCU型号为:STC89LEXX
   8          晶振频率为11.0592MHz
   9          ;连线图:
  10            ST7529工作于16bits 8080工作方式。
  11          ;*LCM---MCU*    *LCM---MCU*     *LCM----MCU*      *LCM----MCU*     LCM----MCU*   LCM---MCU*
  12          ;*DB0---P1.0*   *DB4---P1.4*    ;*DB8---P2.0*   *DB12--P2.4*     *AO-----P3.3*   RESET-P3.5
  13          ;*DB1---P1.1*   *DB5---P1.5*    ;*DB9---P2.1*   *DB13--P2.5*     *RD-----P3.7*
  14          ;*DB2---P1.2*   *DB6---P1.6*    ;*DB10--P2.2*   *DB14--P2.6*     *WR-----P3.6*
  15          ;*DB3---P1.3*   *DB7---P1.7*    ;*DB11--P2.3*   *DB15--P2.7*      CS1----P3.4*
  16          -------------------------------------------------*/
  17          /*#pragma src   /*生成ASM文件开关,必要时打开 */
  18          #include <reg52.h>
  19          #include <stdarg.h>
  20          #include<INTRINS.H>
  21          
  22          /***********液晶显示器接口引脚定义***************/
  23          sbit LCM_RES = P3^5;  //LCD复位引脚 
  24          sbit CE_LCM=P3^4;   //LCM的CE控制端口
  25          sbit Alcm = P3^3;  //LCD命令和数据控制口,为1时是读写数据;为0时写入命令
  26          sfr  Data1= 0x90;  //数据口低8位为P1
  27          sfr  Data2= 0xA0;  //数据口高8位为P2 
  28          
  29          /***********LCM常用操作命令和参数定义***************/
  30          #define  EXT_IN  0x30 //EXT=0 进入到常规命令输入
  31          #define  EXT_OUT 0x31 //EXT=1 
  32          //LCM EXT=0时常用操作命令和参数定 
  33          #define  DISPON  0xAf //显示on  
  34          #define  DISPOFF 0xAe //显示off 
  35          #define  DISNOR  0xA6 //常规显示 
  36          #define  DISINV  0xA7 //反显 
  37          #define  COMSCN  0xBB // COM扫描方式设定 1条指令。
  38          #define  DISCTRL 0xCA //显示控制指令 3条副加指令 
  39          #define  SLPIN   0x95 //进入到睡眠模式 
  40          #define  SLPOUT  0x94 //退出睡眠模式 
  41          #define  LASET   0x75 //行地址设定 2字节地址 
  42          #define  CASET   0x15 //列地址设定 2字节地址 
  43          #define  DATSDR  0xBC //数据扫描位置设定 3字节 
  44          #define  RAMWR   0x5C //写入数据到RAM中 
  45          #define  RAMRD   0x5D //从RAM中读取数据 
  46          #define  PTLIN   0xA8 //进入到区域显示指令 2字节 
  47          #define  PTLOUT  0xA9 //退出区域显示状态 
  48          #define  RMWIN   0xE0 //进入到读修改写模式指令 
  49          #define  RMWOUT  0xEE //退出读修改写模式指令 
  50          #define  ASCSET  0xAA //区域滚动设定 4字节 
  51          #define  SCSTART 0xAB //滚动初始设定  1字节 
  52          #define  OSCON   0xD1 //打开内部晶振指令 
  53          #define  OSCOFF  0xD2 //关闭内部晶振指令 
  54          #define  PWRCTRL 0x20 //电源控制指令 1字节 
  55          #define  VOLCTRL 0x81 //EC控制指令 2字节 
C51 COMPILER V8.08   ST7529                                                                04/15/2008 16:12:18 PAGE 2   

  56          #define  VOLUP   0xD6 //EC加1指令 
  57          #define  VOLDOWN 0xD7 //EC减1指令 
  58          #define  EPSRRD1 0x7C //读寄存器1 
  59          #define  EPSRRD2 0x7D //读寄存器2 
  60          #define  DISNOP  0x25 //空闲指令 相当于没有操作 
  61          #define  EPINT   0x07 //初始化代码指令 1字节 
  62          //LCM EXT=1时常用操作命令和参数定 
  63          #define  Gray_1set  0x20 //框架1灰度PWM设定 16字节 
  64          #define  Gray_2set  0x21 //框架2灰度PWM设定 16字节 
  65          #define  ANASET     0x32 //Analog电路设定 3字节 
  66          #define  SWINT      0x34 //软件初始化 
  67          #define  EPCTIN     0xCD //控制EEPROM指令 1字节 
  68          #define  EPCTOUT    0xCC //退出EEPROM控制 
  69          #define  EPMWR      0xFC //写入数据到EEPROM
  70          #define  EPMRD      0xFD //从EEPROM读出数据 
  71          
  72          
  73          #define freq      6000000       //系统时钟,6MHz
  74          #define us1000H   ((65536 - (freq/1200)*1000/10000) / 256)      //延时1ms的定时H数值
  75          #define us1000L   ((65536 - (freq/1200)*1000/10000) % 256)      //延时1ms的定时L数值
  76          
  77          #define START_LINE       32       //LCD的起始行 
  78          #define END_LINE         122  //LCD的结束行    LINE      32~122 MAX=159
  79          #define START_COL        20       //LCD的起始列 
  80          #define END_COL      84   //LCD的结束列          COLUMN 20~84  MAX=84
  81          #define MAX_ROW      91   //最大的ROW数 
  82          #define MAX_COL      194   //最大的COL数 
  83          #define MAX_COL_BLOCK 65   //最大的COL的块数,一个块含有3个像素点。
  84          /****************全局变量定义*******************/
  85          unsigned char col,row;  /*列x,行(页)y,输出数据 */
  86          bit Reverse;  /*反显控制标志位,=1时反显 */
  87          
  88          bit TimeMark;  /*定时响应标志位*/
  89          unsigned char T_TH;
  90          unsigned char T_TL;
  91          
  92          unsigned char code two_boy[];
  93          unsigned char code zimo[];
  94          
  95          /****************************************************************************/
  96          //      Timer0初始化
  97          /****************************************************************************/
  98          void InitTimer0(void)
  99          {
 100   1              TR0 = 0;
 101   1              TimeMark=0;
 102   1              TMOD = (TMOD&0xf0)|0x01;                //模式1,十六位定时器 
 103   1              TH0  = T_TH;
 104   1              TL0  = T_TL;
 105   1              ET0 = 1;
 106   1              TR0 = 1;
 107   1              EA  = 1;
 108   1      }
 109          /****************************************************************************/
 110          //      Timer0  中断程序 定时
 111          /****************************************************************************/
 112          void timer0 (void) interrupt 1
 113          {
 114   1              TR0 = 0;                
 115   1              TH0 = T_TH;
 116   1              TL0 = T_TL;                             //reload
 117   1              TR0 = 1;
C51 COMPILER V8.08   ST7529                                                                04/15/2008 16:12:18 PAGE 3   

 118   1              TimeMark=1;
 119   1      }
 120          /****************************************************************************/
 121          //      Ms延时程序
 122          /****************************************************************************/
 123          void  Delay(unsigned int ms)
 124          {
 125   1          unsigned int i;
 126   1              T_TH=us1000H;
 127   1              T_TL=us1000L;
 128   1          InitTimer0(); //定 时1ms
 129   1          TimeMark=0;
 130   1              for (i=0;i<ms;i++)
 131   1              {
 132   2                 while(!TimeMark);
 133   2                 TimeMark=0;
 134   2              }
 135   1              TR0=0;  //关定时器0
 136   1              ET0 = 0;
 137   1      }
 138          
 139          
 140          
 141          /****************************************/
 142          //LCD复位程序 
 143          /****************************************/
 144          void LCD_Reset(void )
 145          {
 146   1         LCM_RES=1;
 147   1         Delay(10);
 148   1         LCM_RES=0;
 149   1         Delay(10);
 150   1         LCM_RES=1;
 151   1      }
 152          /****************************************/
 153          //LCD读数据接初始化函数 
 154          /****************************************/
 155          void LCD_initRead(void)
 156          {
 157   1         Data1=0xFF;
 158   1         Data2=0xFF;
 159   1         LCM_RES=1;
 160   1         Alcm = 1;   //读数据操作 
 161   1         WR=1;
 162   1         RD=1;
 163   1         CE_LCM =0;
 164   1      }
 165          /****************************************/
 166          //LCD读数据 
 167          /****************************************/
 168          void LCD_dummyRead(void)
 169          {
 170   1         RD=0;
 171   1         RD=1;
 172   1      }
 173          /****************************************/
 174          //LCD读数据 
 175          //首次调用此函数前,需调LCD_dummyRead()函数一次 
 176          /****************************************/
 177          unsigned int LCD_DataRead(void)
 178          {
 179   1         unsigned int Dat_m=0;
C51 COMPILER V8.08   ST7529                                                                04/15/2008 16:12:18 PAGE 4   

 180   1         RD=0;
 181   1         Dat_m=(Data1|(Data2<<8));
 182   1         RD=1;
 183   1         return Dat_m;
 184   1      }
 185          /****************************************/
 186          //LCM忙判断函数   
 187          /****************************************/
 188          void wtcom(void)
 189          {
 190   1      }
 191          /****************************************/
 192          //LCD写数据接初始化函数 
 193          /****************************************/
 194          void LCD_initWR(void)
 195          {
 196   1        //  wtcom();  //等待LCM操作允许,这里暂不用它 
 197   1        Alcm = 1;   //写数据操作 
 198   1        RD = 1;   //读数据端置1
 199   1        CE_LCM = 0;  //选中LCM 
 200   1      }
 201          /****************************************/
 202          //写入数据函数 
 203          /****************************************/
 204          void Wrcom(unsigned int X)
 205          {
 206   1        Data1=(unsigned char)X;   //输出数据   
 207   1        Data2=(unsigned char)(X>>8);   //输出数据        
 208   1        WR = 0;   //写数据端置0
 209   1      // NOP();
 210   1        WR = 1;       //写入数据  
 211   1      }
 212          /****************************************/
 213          //对LCM写入数据 
 214          /****************************************/
 215          void Wrdata(unsigned int X)
 216          {
 217   1      //  wtcom();  //等待LCM操作允许,这里暂不用它 
 218   1        if(Reverse)
 219   1          {X=~X;}  //取反,以反显
 220   1        Alcm = 1;   //写数据操作 
 221   1        RD = 1;   //读数据端置1
 222   1        CE_LCM = 0;  //选中LCM 
 223   1        Wrcom(X);  //调用写数据共享程序 
 224   1      }
 225          /****************************************/
 226          //对LCM写入命令 
 227          /****************************************/
 228          void Wrcmd(unsigned int X)
 229          {
 230   1      //  wtcom();  //等待LCM操作允许,这里暂不用它 
 231   1        Alcm = 0;   //写命令操作 
 232   1        RD = 1;   //读数据端置1
 233   1        CE_LCM = 0;  //选中LCM 
 234   1        Wrcom(X);  //调用写数据共享程序 
 235   1      }
 236          /********************************/

⌨️ 快捷键说明

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