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

📄 lcd12864.lst

📁 单片机上的贪吃蛇。12864显示。含详细资料
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   LCD12864                                                              03/12/2009 22:02:27 PAGE 1   


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

line level    source

   1          #include "Reg52.h"
   2          #include "intrins.h"
   3          #include "Lcd12864.h"
   4          /*************
   5          测试LCD是否处于忙状态
   6          如果忙则返回0x80,否则返回0
   7          **************/
   8          unsigned char Lcd_CheckBusy(void)
   9          {
  10   1          unsigned char Busy;
  11   1              LcdData=0xff;
  12   1          RS=0;
  13   1          RW=1;
  14   1          E=1;
  15   1          _nop_(); 
  16   1          Busy=LcdData&0x80;
  17   1          E=0;
  18   1          return Busy;
  19   1      }
  20          
  21          /*********************************
  22          向LCD写入字节数据
  23          **********************************/
  24          void Lcd_WriteData(unsigned char Data)
  25          {  
  26   1              while(Lcd_CheckBusy());
  27   1              RS=1;
  28   1              RW=0;
  29   1              E=0;
  30   1              _nop_();  
  31   1              _nop_(); 
  32   1              LcdData=Data;
  33   1              E=1;
  34   1              _nop_();
  35   1              _nop_();
  36   1              E=0;
  37   1      }
  38          
  39          /***********************************
  40          从LCD中读出数据
  41          ************************************/
  42          unsigned char Lcd_ReadData(void)
  43          {
  44   1              unsigned char Temp;
  45   1              while(Lcd_CheckBusy());
  46   1              LcdData=0xff;
  47   1              RS=1;
  48   1              RW=1;
  49   1              E=1;
  50   1              _nop_();
  51   1              Temp=LcdData;
  52   1              E=0;
  53   1              return Temp;
  54   1      }
  55          
C51 COMPILER V8.02   LCD12864                                                              03/12/2009 22:02:27 PAGE 2   

  56          /*************************************
  57          想LCD中写入指令代码
  58          **************************************/
  59          void Lcd_WriteCmd(unsigned char CmdCode)
  60          {  
  61   1              while(Lcd_CheckBusy());
  62   1              RS=0;
  63   1              RW=0;
  64   1              E=0;
  65   1              _nop_();  
  66   1              _nop_();
  67   1              LcdData=CmdCode;
  68   1              _nop_(); 
  69   1              _nop_();
  70   1              E=1;
  71   1              _nop_();  
  72   1              _nop_();
  73   1              E=0;
  74   1      }
  75          
  76          /*************************************
  77          向LCD指定起始位置写入一个字符串
  78          *************************************/
  79          void Lcd_WriteStr(unsigned char x,unsigned char y,unsigned char *Str)
  80          {
  81   1              if((y>3)||(x>7))
  82   1                      return;//如果指定位置不在显示区域内,则不做任何写入直接返回
  83   1              EA=0;
  84   1              switch(y)
  85   1              {
  86   2                      case 0:
  87   2                                      Lcd_WriteCmd(0x80+x);
  88   2                                      break;
  89   2                      case 1:
  90   2                                      Lcd_WriteCmd(0x90+x);
  91   2                                      break;                          
  92   2                      case 2:
  93   2                                      Lcd_WriteCmd(0x88+x);
  94   2                                      break;
  95   2                      case 3:
  96   2                                      Lcd_WriteCmd(0x98+x);
  97   2                                      break;
  98   2              }
  99   1              while(*Str>0)
 100   1              {  
 101   2                      Lcd_WriteData(*Str);
 102   2                      Str++;     
 103   2              }
 104   1              EA=1;
 105   1      }
 106          
 107          /**************************************
 108          为加速逻辑运算而设置的掩码表,这是以牺牲空间而换取时间的办法
 109          ***************************************/
 110          code unsigned int MaskTab[]={0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,
 111                                                                   0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000};
 112          /***************************************
 113          向LCD指定坐标写入一个象素,象素颜色有两种,0代表白(无显示),1代表黑(有显示)
 114          ****************************************/
 115          void Lcd_PutPixel(unsigned char x,unsigned char y,unsigned char Color)
 116          {
 117   1              unsigned char z,w;
C51 COMPILER V8.02   LCD12864                                                              03/12/2009 22:02:27 PAGE 3   

 118   1              unsigned int Temp;
 119   1              if(x>=128||y>=64)
 120   1                      return;
 121   1              Color=Color%2;
 122   1              w=15-x%16;//确定对这个字的第多少位进行操作
 123   1              x=x/16;//确定为一行上的第几字
 124   1      
 125   1              if(y<32) //如果为上页
 126   1                      z=0x80;
 127   1              else     //否则如果为下页
 128   1                      z=0x88;
 129   1      
 130   1              y=y%32;
 131   1              EA=0;
 132   1              Lcd_WriteCmd(0x36);
 133   1              Lcd_WriteCmd(y+0x80);        //行地址
 134   1              Lcd_WriteCmd(x+z);     //列地址 
 135   1              Temp=Lcd_ReadData();//先空读一次
 136   1              Temp=(unsigned int)Lcd_ReadData()<<8;//再读出高8位
 137   1              Temp|=(unsigned int)Lcd_ReadData();//再读出低8位
 138   1              EA=1;
 139   1              if(Color==1) //如果写入颜色为1
 140   1                      Temp|=MaskTab[w];//在此处查表实现加速
 141   1              else         //如果写入颜色为0
 142   1                      Temp&=~MaskTab[w];//在此处查表实现加速
 143   1              EA=0;
 144   1              Lcd_WriteCmd(y+0x80);        //行地址
 145   1              Lcd_WriteCmd(x+z);     //列地址
 146   1          Lcd_WriteData(Temp>>8);//先写入高8位,再写入低8位
 147   1          Lcd_WriteData(Temp&0x00ff);
 148   1              Lcd_WriteCmd(0x30);
 149   1              EA=1;
 150   1      }
 151          
 152          /******************************************
 153          从LCD指定坐标读取象素颜色值
 154          *******************************************/
 155          unsigned char Lcd_ReadPixel(unsigned char x,unsigned char y)
 156          {
 157   1              unsigned char z,w;
 158   1              unsigned int Temp;
 159   1              x=x%128;
 160   1              y=y%64;
 161   1              w=15-x%16;//确定对这个字的第多少位进行操作
 162   1              x=x/16;//确定为一行上的第几字
 163   1      
 164   1              if(y<32) //如果为上页
 165   1                      z=0x80;
 166   1              else     //否则如果为下页
 167   1                      z=0x88;
 168   1      
 169   1              y=y%32;
 170   1              Lcd_WriteCmd(0x36);
 171   1              Lcd_WriteCmd(y+0x80);        //行地址
 172   1              Lcd_WriteCmd(x+z);     //列地址 
 173   1              Temp=Lcd_ReadData();//先空读一次
 174   1              Temp=(unsigned int)Lcd_ReadData()<<8;//再读出高8位
 175   1              Temp|=(unsigned int)Lcd_ReadData();//再读出低8位
 176   1      
 177   1              if((Temp&&MaskTab[w])==0)

⌨️ 快捷键说明

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