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

📄 lcd_part_12864j.lst

📁 C51单片机对st7920并行方式驱动128*64液晶驱动,实现任意位置坐标位置写入图片;自动画线;自动画圆;任意位置反显等功能。
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.15   LCD_PART_12864J                                                       03/17/2009 18:11:02 PAGE 1   


C51 COMPILER V8.15, COMPILATION OF MODULE LCD_PART_12864J
OBJECT MODULE PLACED IN LCD_Part_12864j.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE LCD_Part_12864j.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************************
   2          Copyright 2009 
   3          All rights reserved.
   4          
   5          文件名  : .c
   6          模块名称:st7920 并行方式驱动128*64液晶驱动
   7          功能概要:st7920显示驱动
   8          
   9          取代版本:0.0.2
  10          修改人  :lujian
  11          完成日期:2009.3.16
  12          升级说明:create
  13          CPU: stc89c58   主频:11.0592M
  14          液晶型号:       生产厂家:        驱动芯片:st7920
  15          ******************************************************************************/
  16          
  17          #include <AT89X52.H>
  18          #include <string.h>
  19          
  20          typedef unsigned char  uchar;           //无符号8位数
  21          typedef signed   char  schar;           //有符号8位数
  22          typedef unsigned int   uint;            //无符号16位数
  23          typedef signed   int   sint;            //有符号16位数
  24          typedef unsigned long  ulong;           //无符号32位数
  25          typedef signed   long  slong;           //有符号32位数
  26          typedef float          FP32;            //单精度浮点数
  27          typedef double         FP64;            //双精度浮点数
  28          
  29          #define FALSE   0
  30          #define TRUE    1
  31          
  32          //初始化指令
  33          #define FUN_MODE                0x30                    //工作模式:8位基本指令集(ASCII工作方式)
  34          #define DISPLAY_OFF             0x34                    //显示关(工作模式:8位扩展指令集)
  35          #define DISPLAY_ON              0x36                    //显示开(工作模式:8位扩展指令集)
  36          
  37          #define comm  0
  38          #define dat   1
  39          
  40          
  41          sbit E    = P2^0;                                       //时钟端(从高变低时数据输入)
  42          sbit RW   = P2^7;                                       //数据读(H)/写(L)选择
  43          sbit RS   = P2^6;                                       //数据(H)/状态(L)寄存器选择
  44          
  45          /*------------------------------------------------
  46          B Bit Registers
  47          ------------------------------------------------*/
  48          sbit B_0 = B^0;
  49          sbit B_1 = B^1;
  50          sbit B_2 = B^2;
  51          sbit B_3 = B^3;
  52          sbit B_4 = B^4;
  53          sbit B_5 = B^5;
  54          sbit B_6 = B^6;
  55          sbit B_7 = B^7;
C51 COMPILER V8.15   LCD_PART_12864J                                                       03/17/2009 18:11:02 PAGE 2   

  56          
  57          sbit ACC_7 = ACC^7;
  58          
  59          bit lcd_point(uchar x,uchar y);
  60          bit lcd_display(uchar Byte[], uchar x, uchar y, uchar xrange, uchar yrange);
  61          void wr_lcd(bit dat_comm,unsigned char content);
  62          void XYadr(unsigned char x,unsigned char y);
  63          unsigned char rd_lcd(void);
  64          
  65          /******************************************************************************************
  66          * 函数名称    :lcd_line 
  67          * 功能描述    :画线函数
  68          * 参数        :  参数名称:    输入/输出       类型              描述
  69          *                                         x1              input                 uchar   第一点行位置数据(0-127)
  70          *                                         y1              input                 uchar   第一点列位置数据(0-63)
  71          *                                         x2              input             uchar   第二点位置数据(0-127)
  72          *                                         y2              input                 uchar   第二点位置数据(0-63)
  73          * 返回值      :
  74          * 作者        :lujian
  75          * 创建日期    :2003-12-19
  76          * 全局变量    :
  77          * 全局静态变量:
  78          * 局部静态变量:
  79          *----------------------------------------修改历史------------------------------------------
  80          * 当前版本    :0.0.2                    修改人:lujian                  修改日期:2009-3-16
  81          * 修改说明    :
  82          ******************************************************************************************/
  83          
  84          bit lcd_line(uchar x1, uchar y1, uchar x2, uchar y2)
  85          {
  86   1              FP32 a = 0;
  87   1              schar b = 0,c = 0,t = 0,e = 0,f = 0;
  88   1      
  89   1              if(     x1 < 0 || x1 > 127 ||
  90   1                      x2 < 0 || x2 > 127 ||   
  91   1                      y1 < 0 || y1 > 63  ||
  92   1                      y2 < 0 || y2 > 63)
  93   1              {
  94   2                      return FALSE;
  95   2              }
  96   1              else if(x1 == x2)
  97   1              {
  98   2                      if(y1 > y2)
  99   2                      {
 100   3                              for(b = y1 - y2; b >= 0; b--)
 101   3                              lcd_point(x1, y2+b);
 102   3                      }
 103   2                      else
 104   2                      {
 105   3                              for(b = y2-y1; b >= 0; b--)
 106   3                              lcd_point(x1, y1+b);
 107   3                      }
 108   2              }
 109   1              else if(y1 == y2)
 110   1              {
 111   2                      if(x1 > x2)
 112   2                      {
 113   3                              for(b = x1-x2; b >= 0; b--)
 114   3                              lcd_point(x2+b, y1);
 115   3                      }
 116   2                      else
 117   2                      {
C51 COMPILER V8.15   LCD_PART_12864J                                                       03/17/2009 18:11:02 PAGE 3   

 118   3                              for(b = x2-x1; b >= 0; b--)
 119   3                              lcd_point(x1+b, y1);
 120   3                      }
 121   2              }
 122   1              else
 123   1              {
 124   2                      if(x1 < x2)
 125   2                      {
 126   3                              t = x1;
 127   3                              x1 = x2;
 128   3                              x2 = t;
 129   3                              t = y1;
 130   3                              y1 = y2;
 131   3                              y2 = t;
 132   3                      }
 133   2                      if(y1 > y2)
 134   2                      {
 135   3                              e = x1-x2;
 136   3                              f = y1-y2;
 137   3                              a = (float)e/(float)f;
 138   3                              for(b = f; b >= 0; b--)
 139   3                              {
 140   4                                      c = b * a;
 141   4                                      lcd_point(x2+c, y2+b);
 142   4                              }
 143   3                      }
 144   2                      else
 145   2                      {
 146   3                              e = y2-y1;
 147   3                              f = x1-x2;
 148   3                              a = (float)e/(float)f;
 149   3                              for(b = f; b >= 0; b--)
 150   3                              {
 151   4                                      c = a * b;
 152   4                                      lcd_point(b+x2, y2-c);
 153   4                              }
 154   3                      }
 155   2              }
 156   1              return TRUE;
 157   1      }
 158          
 159          /******************************************************************************************
 160          * 函数名称    :lcd_Point 
 161          * 功能描述    :画点函数
 162          * 参数        :  参数名称:    输入/输出       类型              描述
 163          *                                         x                   input                     uchar   第一点行位置数据(0-127)
 164          *                                         y                   input                     uchar   第一点列位置数据(0-63)
 165          * 返回值      :正确:1; 错误:0,x或y值超范围
 166          * 作者        :lujian
 167          * 创建日期    :2003-12-19
 168          * 全局变量    :
 169          * 全局静态变量:
 170          * 局部静态变量:
 171          *----------------------------------------修改历史------------------------------------------
 172          * 当前版本    :0.0.2                    修改人:lujian                  修改日期:2009-3-16
 173          * 修改说明    :
 174          ******************************************************************************************/
 175          
 176          bit lcd_point(uchar x,uchar y)
 177          {
 178   1              uchar a, d1, d2;
 179   1              uchar code Dot1[16] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
C51 COMPILER V8.15   LCD_PART_12864J                                                       03/17/2009 18:11:02 PAGE 4   

 180   1                                              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 181   1              uchar code Dot2[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 182   1                                              0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
 183   1      
 184   1              if(0 <= x && x <= 127)
 185   1              {
 186   2                      a = x & 0x0f;
 187   2                      x = x >> 4;
 188   2              }
 189   1              else return FALSE;
 190   1      
 191   1              if(y > 63)
 192   1              {
 193   2                      return FALSE;
 194   2              }
 195   1      
 196   1              wr_lcd(comm,DISPLAY_OFF);
 197   1              XYadr(x,y);                     //x(0-7),y(0-63)
 198   1      
 199   1              rd_lcd();
 200   1              d1 = rd_lcd();
 201   1              d2 = rd_lcd();
 202   1              d1 = d1 ^ Dot1[a];
 203   1              d2 = d2 ^ Dot2[a];
 204   1      
 205   1              XYadr(x,y);
 206   1              wr_lcd(dat,d1);
 207   1              wr_lcd(dat,d2);
 208   1              wr_lcd (comm,DISPLAY_ON);
 209   1              return TRUE;
 210   1      }
 211          
 212          /******************************************************************************************
 213          * 函数名称    :lcd_display 
 214          * 功能描述    :图像填入函数支持图像最大分辨率255*255(x,y都为0时)

⌨️ 快捷键说明

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