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

📄 lcd_dis.lst

📁 本代码实现的是12864图形LCD模块
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   LCD_DIS                                                               11/02/2007 15:16:55 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LCD_DIS
OBJECT MODULE PLACED IN LCD_Dis.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Driver\LCD_Driver\LCD_Dis.c BROWSE DEBUG OBJECTEXTEND PRINT(.\LCD_Dis.lst) 
                    -OBJECT(LCD_Dis.obj)

line level    source

   1          //========================================================================
   2          // 文件名: LCD_Dis.c
   3          // 作  者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
   4          //                      www.Mzdesign.com.cn
   5          // 日  期: 2007/02/24
   6          // 描  述: 通用版LCD用户接口层程序集
   7          //
   8          // 参  考: 请参考具体显示器的硬件描述说明书或者是DataSheet,并以此来编写加速
   9          //                      版接口程序;适用于MCS51系列MCU
  10          // 版  本:
  11          //      2006/10/18      First version    Mz Design
  12          //              2007/01/13              V1.1  去掉坐标体系变换的功能,对速度进行一定的优化
  13          //                                                              并使该文件的代码更加通用于各种LCD
  14          //              2007/02/24              V1.2  为小资源的51单片机进行驱动精简,减少对RAM的占
  15          //                                                              用
  16          //========================================================================
  17          #include "LCD_Driver_User.h"                                    //LCD底层驱动声明头文件
  18          #include "LCD_Config.h"                                                 //LCD的配置文件,比如坐标轴是否倒置等的定义
  19          
  20          
  21          //extern unsigned int Asii8[];                                  //6X8的ASII字符库
  22          extern code unsigned char Asii0610[];                   //6X10的ASII字符库
  23          //extern code unsigned char Asii0816[];                 //8X16的ASII字符库
  24          extern code unsigned char GB1716[];                             //17*16自定义的汉字库
  25          extern code unsigned char GB1616[];
  26          
  27          unsigned char X_Witch;                                                                  //字符写入时的宽度
  28          unsigned char Y_Witch;                                                                  //字符写入时的高度
  29          unsigned char Font_Wrod;                                                                //字体的每个字模占用多少个存储单元数
  30          unsigned char *Char_TAB;                                                //字库指针
  31          //unsigned char Plot_Mode;                                                                      //绘图模式
  32          unsigned char BMP_Color;
  33          unsigned char Char_Color;
  34          
  35          //void Pos_Switch(unsigned int * x,unsigned int * y);
  36          //void Writ_Dot(int x,int y,unsigned int Color);
  37          //========================================================================
  38          // 函数: void FontSet(unsigned char Font_NUM,unsigned char Color)
  39          // 描述: 文本字体设置
  40          // 参数: Font_NUM 字体选择,以驱动所带的字库为准
  41          //               Color  文本颜色,仅作用于自带字库  
  42          // 返回: 无
  43          // 备注: 
  44          // 版本:
  45          //      2006/10/15      First version
  46          //========================================================================
  47          void FontSet(unsigned char Font_NUM,unsigned char Color)
  48          {
  49   1              switch(Font_NUM)
  50   1              {
  51   2      /*              case 0: Font_Wrod = 16; //ASII字符A
  52   2                                      X_Witch = 8;
  53   2                                      Y_Witch = 16;
  54   2                                      Char_Color = Color;
C51 COMPILER V8.08   LCD_DIS                                                               11/02/2007 15:16:55 PAGE 2   

  55   2                                      Char_TAB = (unsigned char *)(Asii0816 - 32*16);
  56   2                      break;*/
  57   2                      case 1: Font_Wrod = 10; //ASII字符B
  58   2                                      X_Witch = 6;
  59   2                                      Y_Witch = 10;
  60   2                                      Char_Color = Color;
  61   2                                      Char_TAB = (unsigned char *)(Asii0610 - (32*10));
  62   2                      break;          
  63   2                      case 2: Font_Wrod = 48; //汉字A
  64   2                                      X_Witch = 17;
  65   2                                      Y_Witch = 16;
  66   2                                      Char_Color = Color;
  67   2                                      Char_TAB = (unsigned char *)GB1716;
  68   2                      break;
  69   2                      case 3: Font_Wrod = 32; //汉字B
  70   2                                      X_Witch = 16;
  71   2                                      Y_Witch = 16;
  72   2                                      Char_Color = Color;
  73   2                                      Char_TAB = GB1616;
  74   2                      break;
  75   2                      default: break;
  76   2              }
  77   1      }
  78          //========================================================================
  79          // 函数: void PutChar(unsigned char x,unsigned char y,char a)  
  80          // 描述: 写入一个标准字符
  81          // 参数: x  X轴坐标     y  Y轴坐标
  82          //               a  要显示的字符在字库中的偏移量  
  83          // 返回: 无
  84          // 备注: ASCII字符可直接输入ASCII码即可
  85          // 版本:
  86          //      2006/10/15      First version
  87          //              2007/01/11              V1.1
  88          //========================================================================
  89          void PutChar(unsigned char x,unsigned char y,char a)       
  90          {
  91   1              unsigned char i,j;              //数据暂存
  92   1              unsigned char *p_data;
  93   1              unsigned char Temp;
  94   1              unsigned char Index = 0;
  95   1              p_data = Char_TAB + a*Font_Wrod;        //要写字符的首地址
  96   1              j = 0;
  97   1              while((j ++) < Y_Witch)
  98   1              {
  99   2                      if(y > Dis_Y_MAX) break;
 100   2                      i = 0;
 101   2                      while(i < X_Witch)
 102   2                      {
 103   3                              if((i&0x07)==0)
 104   3                              {
 105   4      //                              Temp = *(p_data + (Index>>1));
 106   4      //                              if((Index&0x01)==0)Temp = Temp>>8; 
 107   4                                      Temp = *(p_data+Index);
 108   4                                      Index++;
 109   4                              }
 110   3                              if((Temp & 0x80) > 0) Write_Dot_LCD/*Writ_Dot*/(x+i,y,Char_Color);
 111   3                              Temp = Temp << 1;
 112   3                              if((x+i) >= Dis_X_MAX) 
 113   3                              {
 114   4                                      Index += (X_Witch-i)>>3;
 115   4                                      break;
 116   4                              }
C51 COMPILER V8.08   LCD_DIS                                                               11/02/2007 15:16:55 PAGE 3   

 117   3                              i++;
 118   3                      }
 119   2                      y ++;
 120   2              }
 121   1      }
 122          
 123          //========================================================================
 124          // 函数: void PutString(unsigned char x,unsigned char y,char *p)
 125          // 描述: 在x、y为起始坐标处写入一串标准字符
 126          // 参数: x  X轴坐标     y  Y轴坐标
 127          //               p  要显示的字符串  
 128          // 返回: 无
 129          // 备注: 仅能用于自带的ASCII字符串显示
 130          // 版本:
 131          //      2006/10/15      First version
 132          //========================================================================
 133          void PutString(unsigned char x,unsigned char y,char *p)
 134          {
 135   1              while(*p!=0)
 136   1              {
 137   2                      PutChar(x,y,*p);
 138   2                      x += X_Witch;
 139   2                      if((x + X_Witch) > Dis_X_MAX)
 140   2                      {
 141   3                              x = 0;
 142   3                              if((Dis_Y_MAX - y) < Y_Witch) break;
 143   3                              else y += Y_Witch;
 144   3                      }
 145   2                      p++;
 146   2              }
 147   1      }
 148          //========================================================================
 149          // 函数: void SetPaintMode(unsigned char Mode,unsigned char Color)
 150          // 描述: 绘图模式设置
 151          // 参数: Mode 绘图模式    Color  像素点的颜色,相当于前景色  
 152          // 返回: 无
 153          // 备注: Mode无效
 154          // 版本:
 155          //      2006/10/15      First version
 156          //========================================================================
 157          void SetPaintMode(unsigned char Mode,unsigned char Color)
 158          {
 159   1              Mode = Mode;//Plot_Mode = Mode;         //仅仅是为了保持与其它驱动的一至性,绘图模式在该版驱动中未用
 160   1              BMP_Color = Color;
 161   1      }
 162          //========================================================================
 163          // 函数: void PutPixel(unsigned char x,unsigned char y)
 164          // 描述: 在x、y点上绘制一个前景色的点
 165          // 参数: x  X轴坐标     y  Y轴坐标
 166          // 返回: 无
 167          // 备注: 使用前景色
 168          // 版本:
 169          //      2006/10/15      First version
 170          //========================================================================
 171          void PutPixel(unsigned char x,unsigned char y)
 172          {
 173   1              Write_Dot_LCD/*Writ_Dot*/(x,y,BMP_Color);
 174   1      }
 175          //========================================================================
 176          // 函数: void Line(unsigned char s_x,unsigned char s_y,unsigned char e_x,unsigned char e_y)
 177          // 描述: 在s_x、s_y为起始坐标,e_x、e_y为结束坐标绘制一条直线
 178          // 参数: x  X轴坐标     y  Y轴坐标
C51 COMPILER V8.08   LCD_DIS                                                               11/02/2007 15:16:55 PAGE 4   

 179          // 返回: 无
 180          // 备注: 使用前景色
 181          // 版本:
 182          //      2006/10/15      First version
 183          //========================================================================
 184          void Line(unsigned char s_x,unsigned char s_y,unsigned char e_x,unsigned char e_y)
 185          {  
 186   1              char Offset_x,Offset_y,Offset_k = 0;
 187   1              char Err_d = 1;
 188   1              if(s_y>e_y)
 189   1              {
 190   2                      Offset_x = s_x;
 191   2                      s_x = e_x;
 192   2                      e_x = Offset_x;
 193   2                      Offset_x = s_y;
 194   2                      s_y = e_y;
 195   2                      e_y = Offset_x;
 196   2              }
 197   1              Offset_x = e_x-s_x;
 198   1              Offset_y = e_y-s_y;
 199   1              Write_Dot_LCD/*Writ_Dot*/(s_x,s_y,BMP_Color);
 200   1              if(Offset_x<=0)
 201   1              {
 202   2                      Offset_x = s_x-e_x;

⌨️ 快捷键说明

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