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

📄 lcd12864.lst

📁 LCD12864做的强大模拟电子钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   LCD12864                                                             01/16/2009 09:13:17 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE lcd12864.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //proteus仿真论坛:http://proteus.5d6d.com
   2          
   3          #include <reg52.H>
   4          #include<intrins.h>
   5          #include<math.h>
   6          #include"lcd12864.h"
   7          #include"cncode.h"
   8          #include"encode.h"
   9          
  10          
  11          uchar xdata dispbuf[8][128];//1024Byte用于存放显示数据
  12          
  13          void LcdInit()                          //lcd初始化
  14          {
  15   1              cs1 = 1;
  16   1              cs2 = 1;
  17   1              WriteCmd(DISP_OFF);
  18   1              WriteCmd(DISP_Y);
  19   1              WriteCmd(DISP_ON);
  20   1      }
  21          
  22          void WriteCmd(uchar cmd)                //lcd写命令
  23          {
  24   1              WaiteBusy();
  25   1              e=0;
  26   1              rw = 0;
  27   1              rs = 0;
  28   1              DBPort = cmd;
  29   1              e = 1;
  30   1              _nop_();
  31   1              _nop_();
  32   1              e = 0;
  33   1      }
  34          
  35          void WriteData(uchar wdata)     //lcd写数据
  36          {
  37   1              WaiteBusy();
  38   1              rs = 1;
  39   1              rw = 0;
  40   1              DBPort = wdata;
  41   1              e = 1;
  42   1              _nop_();
  43   1              _nop_();
  44   1              e = 0;
  45   1      }
  46          /****************************************
  47          函数功能:将显示缓冲区所有数据送到12864显示
  48          ****************************************/
  49          void Show()
  50          {
  51   1              uchar i,j;
  52   1              LcdInit();
  53   1              for(j=0;j<8;j++)
  54   1              {
  55   2                      cs1=1;
C51 COMPILER V8.05a   LCD12864                                                             01/16/2009 09:13:17 PAGE 2   

  56   2                      cs2=0;
  57   2                      WriteCmd(DISP_PAGE+j);
  58   2                      WriteCmd(DISP_X);
  59   2                      for(i=0;i<64;i++)
  60   2                              WriteData(dispbuf[j][i]);               
  61   2                      cs1=0;
  62   2                      cs2=1;
  63   2                      WriteCmd(DISP_PAGE+j);
  64   2                      WriteCmd(DISP_X);
  65   2                      for(i=64;i<128;i++)
  66   2                              WriteData(dispbuf[j][i]);       
  67   2              }
  68   1      }
  69          
  70          void ClearBuff()//清空显存,0x00
  71          {
  72   1              uchar i,j;
  73   1              for(j=0;j<8;j++)
  74   1              {
  75   2                      for(i=0;i<128;i++)
  76   2                              dispbuf[j][i] = 0x00;
  77   2              }               
  78   1      }
  79          void ClearScreen()              //清屏
  80          {
  81   1              ClearBuff();
  82   1              Show();
  83   1      }
  84          /*********************************************
  85          函数功能:drawflag = 1:在12864任意位置画点
  86                            drawflag = 0:在12864任意位置清除点
  87          
  88          *********************************************/
  89          void DrawPixel(uchar x,uchar y,bit drawflag)
  90          {
  91   1              uchar a,b;
  92   1              a = y/0x08;
  93   1              b = y&0x07;
  94   1              if(drawflag)
  95   1                      dispbuf[a][x] |= BIT(b);
  96   1              else
  97   1                      dispbuf[a][x] &= ~BIT(b);               
  98   1      }
  99          
 100          /********************************************************************************
 101          **函数功能描述:画直函数,采用非浮点型变量计算,显著提高了运算速度
 102          **输        入:x0,y0,x1,y1:起始,结束点(坐标)
 103          
 104                                  ***注意坐标不要越界***
 105                                  x:0-127
 106                                  y:0-63
 107          
 108          
 109          **输        出:无
 110                                          坐标如图所示
 111          ----------------------------
 112          |(0,0)                          (127,0)|
 113          |                                                  |
 114          |                                                  |
 115          |                                                  |
 116          |                                                  |
 117          |                                                  |
C51 COMPILER V8.05a   LCD12864                                                             01/16/2009 09:13:17 PAGE 3   

 118          |                                                  |
 119          |(0,63)                    (127,63)|
 120          ----------------------------
 121          
 122          *******************************************************************************/
 123          
 124          void Line(uchar x0,uchar y0,uchar x1,uchar y1)
 125          {
 126   1      
 127   1      //使用Bresenham算法画直线
 128   1              char dx,dy,x_increase,y_increase;
 129   1              int error;
 130   1              uchar x,y;
 131   1              uchar i;
 132   1              dx = x1-x0;
 133   1              dy = y1-y0;
 134   1              if(dx>=0)//判断x增长方向
 135   1                      x_increase = 1;
 136   1              else
 137   1                      x_increase = -1;
 138   1              if(dy>=0)//判断y增长方向
 139   1                      y_increase = 1;
 140   1              else
 141   1                      y_increase = -1;
 142   1      
 143   1              x = x0;
 144   1              y = y0;
 145   1              dx = cabs(dx);
 146   1              dy = cabs(dy);
 147   1              if(dx > dy)
 148   1              {
 149   2                      error = -dx;
 150   2                      for(i=0;i<dx+1;i++)
 151   2                      {
 152   3                              DrawPixel(x,y,1);
 153   3                              x += x_increase;
 154   3                              error += 2*dy;
 155   3                              if(error >= 0)
 156   3                              {
 157   4                                      y += y_increase;
 158   4                                      error -= 2*dx;
 159   4                              }
 160   3                      }
 161   2              }
 162   1              else
 163   1              {
 164   2                      error = -dy;
 165   2                      for(i=0;i<dy+1;i++)
 166   2                      {
 167   3                              DrawPixel(x,y,1);
 168   3                              y += y_increase;
 169   3                              error += 2*dx;
 170   3                              if(error >= 0)
 171   3                              {
 172   4                                      x += x_increase;
 173   4                                      error -= 2*dy;
 174   4                              }
 175   3                      }
 176   2              }
 177   1      }
 178          
 179          /*****************************************************
C51 COMPILER V8.05a   LCD12864                                                             01/16/2009 09:13:17 PAGE 4   

 180          函数功能:指定的位置按传入的数据画一条长度为len(len=<8)点的竖线
 181          *****************************************************/
 182          void DrawVerticalLine(uchar x,uchar y,uchar len,uchar d)
 183          {
 184   1              uchar i;
 185   1              for(i=0;i<len;i++)
 186   1              {
 187   2                      if(d&0x01)
 188   2                              DrawPixel(x,y+i,1);
 189   2                      d >>= 1;
 190   2              }
 191   1      }
 192          
 193          
 194          
 195          /*********************************************
 196          函数功能:指定的位置显示一个12x12汉字
 197                          x:0~127-12
 198                          y:0~63-12
 199          *********************************************/
 200          void Print12_12CHN(uchar x,uchar y,bit cpl,struct typFNT_GB12 a)
 201          {
 202   1              uchar i;
 203   1              for(i=0;i<12;i++)
 204   1              {
 205   2                      if(cpl)
 206   2                              DrawVerticalLine(x+i,y,8,~a.Msk[i]);
 207   2                      else
 208   2                              DrawVerticalLine(x+i,y,8,a.Msk[i]);                             
 209   2              }
 210   1      
 211   1              for(i=0;i<12;i++)
 212   1              {
 213   2                      if(cpl)
 214   2                              DrawVerticalLine(x+i,y+8,4,~a.Msk[i+12]);
 215   2                      else
 216   2                              DrawVerticalLine(x+i,y+8,4,a.Msk[i+12]);
 217   2              }
 218   1      }
 219          /*********************************************
 220          函数功能:指定的位置显示一个12x6ASCII 
 221                          x:0~127-6
 222                          y:0~63-12
 223          *********************************************/
 224          void Print12_6En(uchar x,uchar y,bit cpl,uchar asc)
 225          {
 226   1              uchar i,j;
 227   1              for(j=0;j<2;j++)
 228   1              {
 229   2                      for(i=0;i<6;i++)
 230   2                      {
 231   3                              if(cpl)
 232   3                                      DrawVerticalLine(x+i,y+8*j,8-4*j,~AsciiDot[(asc-0x20)*12+i+6*j]);
 233   3                              else
 234   3                                      DrawVerticalLine(x+i,y+8*j,8-4*j,AsciiDot[(asc-0x20)*12+i+6*j]);
 235   3                      }
 236   2              }
 237   1      }
 238          
 239          /********************************************************************************
 240          **函数功能描述:送显示数据到显存,显示12x12文字(中,英,标点,数字)
 241          **输        入:ptr字符串首地址
C51 COMPILER V8.05a   LCD12864                                                             01/16/2009 09:13:17 PAGE 5   

 242          **输        出:无
 243          **说明:在显示字符串中遇到  "\n"  输出换行;反显两个"~"中间的包括的字符如:~反显~
 244          *******************************************************************************/
 245          void BufferPrint12(uchar x,uchar y,uchar *ptr)
 246          {
 247   1              uchar c1,c2,i,j;
 248   1              bit cpl = 0;
 249   1              for(i=0;ptr[i] != '\0';i++)

⌨️ 快捷键说明

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