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

📄 19264lcd.lst

📁 普通19264图形液晶模块的单片机驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   19264LCD                                                              04/01/2009 15:34:12 PAGE 1   


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

line level    source

   1                                                                                  //  CA19264A  Demo Program
   2          //***************************************************************************
   3          //*  Create by :liujun     2005.02.28                                       *
   4          //***************************************************************************
   5          //连线表:  CPU=89C52                                                        *
   6          //RS=P2.0     R/W=P2.1     E=P2.2     CS1=P2.3     CS2=P2.4                 *
   7          //SysClock=12MHz           DB0-DB7=P2.0-P2.7       /Reset=InBoard           *
   8          //因为这款液晶是两个片选,00 01 10表示三个芯片,三个片选各自代表一个道理是一样的。 
   9          //***************************************************************************
  10          
  11          #include <reg52.h>
  12          #include <stdlib.h>
  13          #include <intrins.h>
  14          #include <stdio.h>
  15          
  16          /********************引脚定义********************/
  17          
  18          sbit CS1 =P1^3; //1片选
  19          sbit CS2 =P1^5; //2片选
  20          sbit CS3 =P1^6; //3片选
  21          sbit RS  =P1^0; //数据指令
  22          sbit RW  =P1^1; //读写
  23          sbit E   =P1^2; //使能
  24          sbit RST =P1^5;//复位
  25          //sbit Sbreak=P
  26          
  27          unsigned char Page; //页 地址
  28          unsigned char Col; //列 地址
  29          
  30          unsigned char code BMP1[];
  31          unsigned char code BMP2[];
  32          char code Hanzi[];
  33          
  34          void Delay(unsigned int MS);
  35          void wtcom(void);
  36          
  37          /***************************/
  38          /*检查Busy                 */
  39          /***************************/
  40          void BusyL(void)
  41          {
  42   1       CS1= 0;
  43   1       CS2= 1;
  44   1       CS3= 1;
  45   1       wtcom();
  46   1      }
  47          
  48          void BusyM(void)
  49          {
  50   1       CS1= 1;
  51   1       CS2= 0;
  52   1       CS3= 1;
  53   1       wtcom();
  54   1      }
  55          
C51 COMPILER V8.02   19264LCD                                                              04/01/2009 15:34:12 PAGE 2   

  56          void BusyR(void)
  57          {
  58   1       CS1= 1;
  59   1       CS2= 1;
  60   1       CS3= 0;
  61   1       wtcom();
  62   1      }
  63          
  64          void wtcom(void)
  65          {
  66   1       RS = 0;  //指令
  67   1       RW = 1;
  68   1       P2 = 0xFF; //输出0xff以便读取正确
  69   1       E  = 1;
  70   1       _nop_();
  71   1       while(P2 & 0x80); //Status Read Bit7 = BUSY
  72   1       E  = 0;
  73   1       _nop_();
  74   1      }
  75          
  76          /********************************************************/
  77          /*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
  78          /********************************************************/
  79          void Locatexy(void)
  80          {
  81   1       unsigned char x,y;
  82   1       switch (Col&0xc0) /*  col.and.0xC0 */
  83   1       {   /*条件分支执行  */
  84   2        case 0: {BusyL();break;}/*左区 */
  85   2        case 0x40: {BusyM();break;}/*中区 */
  86   2        case 0x80: {BusyR();break;}/*右区 */
  87   2       }
  88   1       x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*/
  89   1       y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */
  90   1       wtcom();  /* waitting for enable */
  91   1       RS = 0;   //指令
  92   1       RW = 0;   //写
  93   1       P2 = y;   //设置页面地址
  94   1       E  = 1;
  95   1       _nop_();
  96   1       E  = 0;
  97   1       _nop_();
  98   1       wtcom();  /*  waitting for enable */
  99   1       RS = 0;
 100   1       RW = 0;
 101   1       P2 = x;   //设置列地址
 102   1       E  = 1;
 103   1       _nop_();
 104   1       E  = 0;
 105   1       _nop_();
 106   1      }
 107          
 108          /***************************/
 109          /*写指令                   */
 110          /***************************/
 111          void WriteCommandL( unsigned char CommandByte )
 112          {
 113   1       BusyL();
 114   1       P2 = CommandByte;
 115   1       RS = 0;  //指令
 116   1       RW = 0;
 117   1       E  = 1;
C51 COMPILER V8.02   19264LCD                                                              04/01/2009 15:34:12 PAGE 3   

 118   1       _nop_();
 119   1       E  = 0;
 120   1       _nop_();
 121   1      }
 122          
 123          void WriteCommandM( unsigned char CommandByte )
 124          {
 125   1       BusyM();
 126   1       P2 = CommandByte;
 127   1       RS = 0;  //指令
 128   1       RW = 0;
 129   1       E  = 1;
 130   1       _nop_();
 131   1       E  = 0;
 132   1       _nop_();
 133   1      }
 134          
 135          void WriteCommandR( unsigned char CommandByte )
 136          {
 137   1       BusyR();
 138   1       P2 = CommandByte;
 139   1       RS = 0;  //指令
 140   1       RW = 0;
 141   1       E  = 1;
 142   1       _nop_();
 143   1       E  = 0;
 144   1       _nop_();
 145   1      }
 146          
 147          /***************************/
 148          /*读数据                   */
 149          /***************************/
 150          unsigned char ReadData( void )
 151          {
 152   1       unsigned char DataByte;
 153   1       Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 154   1       RS = 1;  /*数据输出*/
 155   1       RW = 1;  /*读入  */
 156   1       P2 = 0xFF;  //输出0xff以便读取正确
 157   1       E  = 1;  /*读入到LCM*/
 158   1       _nop_();
 159   1       DataByte = P2; /*数据读出到数据口P2 */
 160   1       E  = 0;
 161   1       _nop_();
 162   1       return DataByte;
 163   1      }
 164          
 165          /***************************/
 166          /*写数据                   */
 167          /***************************/
 168          void WriteData( unsigned char DataByte )
 169          {
 170   1       Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 171   1       RS = 1;  /*数据输出*/
 172   1       RW = 0;  /*写输出  */
 173   1       P2 = DataByte; /*数据输出到数据口 */
 174   1       E  = 1;  /*写入到LCM*/
 175   1       _nop_();
 176   1       E  = 0;
 177   1       _nop_();
 178   1      }
 179          
C51 COMPILER V8.02   19264LCD                                                              04/01/2009 15:34:12 PAGE 4   

 180          void LcmClear( void )
 181          {
 182   1       Page = 0;
 183   1       Col  = 0;
 184   1       for(Page=0;Page<8;Page++)
 185   1        for(Col=0;Col<192;Col++)
 186   1         WriteData(0);
 187   1      }
 188          
 189          void LcmInit( void )
 190          {
 191   1       WriteCommandL(0x3f); //开显示
 192   1       WriteCommandM(0x3f);
 193   1       WriteCommandR(0x3f);
 194   1       
 195   1       WriteCommandL(0xc0); //设置起始地址=0
 196   1       WriteCommandM(0xc0);
 197   1       WriteCommandR(0xc0);
 198   1      
 199   1       WriteCommandL(0x3f); //开显示
 200   1       WriteCommandM(0x3f);
 201   1       WriteCommandR(0x3f);
 202   1      
 203   1       LcmClear();
 204   1       Col = 0;
 205   1       Page= 0;
 206   1       Locatexy();
 207   1      }
 208          /*
 209          void LcmPutDots( unsigned char DotByte )
 210          {
 211           Page = 0;
 212           Col  = 0;
 213           for(Page=0;Page<8;Page++)
 214           {
 215            for(Col=0;Col<192;Col++)
 216            {
 217             WriteData( DotByte );
 218             DotByte = ~DotByte;
 219            }
 220           }
 221          }  */
 222          
 223          void LcmPutBMP( unsigned char *puts )
 224          {
 225   1       unsigned int X=0;
 226   1       Page = 0;
 227   1       Col  = 0;
 228   1       for(Page=0;Page<8;Page++)
 229   1       {
 230   2        for(Col=0;Col<192;Col++)
 231   2        {
 232   3         WriteData( puts[X] );
 233   3         X++;
 234   3        }
 235   2       }
 236   1      }
 237          
 238          void LcmReverseBMP( void )
 239          {
 240   1       unsigned char temp;
 241   1       Page = 0;
C51 COMPILER V8.02   19264LCD                                                              04/01/2009 15:34:12 PAGE 5   

 242   1       Col  = 0;
 243   1       for(Page=0;Page<8;Page++)
 244   1       {
 245   2        for(Col=0;Col<192;Col++)
 246   2        {
 247   3         temp = ReadData(); //空读一次
 248   3         temp = ReadData();
 249   3         temp = ~temp;
 250   3         WriteData(temp);

⌨️ 快捷键说明

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