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

📄 cs23-2.lst

📁 LCD 128*64 的驱动软件 和适合学习的人 带全部解释
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   CS23_2                                                                09/15/2008 16:50:43 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CS23_2
OBJECT MODULE PLACED IN CS23-2.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE CS23-2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REG51.H>
   2          #include<math.h>                                
   3          #define uchar unsigned char     
   4          #define uint unsigned int
   5          sbit CS1=P2^4;                  
   6          sbit CS2=P2^3;
   7          sbit RS=P2^7;           
   8          sbit RW=P2^6;                   
   9          sbit EN=P2^5;                           
  10          sbit RST=P2^2;                  
  11          #define DataPort P0
  12          /**********常用操作命令和参数定义***********/
  13          #define DISPON 0x3f                             //显示屏开
  14          #define DISPOFF 0x3e                            //显示屏关
  15          #define DISPFIRST 0xc0                  //起始行显示定义
  16          #define SETX 0x40                                       //X定位(页)
  17          #define SETY 0xb8                                       //Y定位(列)
  18          #define Lcdbusy 0x80                            //LCM忙判断定义
  19          /***********************************************/
  20          #define MODL 0x00                               //左区
  21          #define MODM 0x40                               //左区与中区分界
  22          //#define MODR 0x80                     //中区与右区分界
  23          #define LCMLIMIT 0x80                   //中区的边界
  24          //#define LCMLIMIT 0xc0                 //右区的边界(这里不用)
  25          /*************************************************/
  26          uchar col,row,cbyte;                            //列、行、数据的变量定义                                        
  27          bit xy;                                                 //画线标志,"1"水平线,"0"垂直线。
  28          /**************************************************/
  29          void Lcminit(void);                                     //液晶模块初始化子函数
  30          void Delay(unsigned long MS);                           //延时子函数
  31          void lcdbusyL(void);                            //左区判忙子函数
  32          void lcdbusyM(void);                            //中区判忙子函数
  33          //void lcdbusyR(void);                          //右区判忙子函数(这里不用)
  34          void Wrdata(uchar X);              //写数据至LCM                               
  35          void Lcmcls(void);                              //LCM清屏
  36          void Lcmclsxx(void);               //LCM全屏置黑                             
  37          void wtcom(void);                  //公用判忙等待子函数                 
  38          void Locatexy(void);                     //光标定义    
  39          void WrcmdL(uchar X);                           //写命令至左区
  40          void WrcmdM(uchar X);                   //写命令至中区
  41          //void WrcmdR(uchar X);                 //写命令至右区(这里不用)
  42          void Rddata(void);                              //读LCM状态子函数
  43          void Linehv(uchar length);                      //水平、垂直画线子函数
  44          void point(void);                                       //画点子函数
  45          void Linexy(uchar endx, uchar endy);            //画斜线子函数
  46          /************************复位子函数*************************/
  47          void reset()                                            //复位子函数
  48          {                                                               //复位子函数开始
  49   1      RST=0;                                                  //复位端置0
  50   1      Delay(20);                                              //延时20ms
  51   1      RST=1;                                                  //复位端置1
  52   1      Delay(20);                                              //延时20ms
  53   1      }                                                               //复位子函数结束
  54          /*********************主函数**********************/
  55          void main(void)
C51 COMPILER V8.02   CS23_2                                                                09/15/2008 16:50:43 PAGE 2   

  56          {                                                               //主函数开始
  57   1      col=0;                                                  //定位0列、0页
  58   1      row=0;
  59   1      Delay(10);                                              //延时一会
  60   1      Lcminit();                                              //液晶模块初始化
  61   1      Delay(1000);                                            //延时一会
  62   1      /***********以下使用画直线与斜线的方法,画出一条小舢舨*********/
  63   1      /****************先画出船上建筑**************/
  64   1      col=0;                                                  //定位x方位0、y方位32
  65   1      row=32;
  66   1      xy=1;                                                   //水平线
  67   1      Linehv(127);                                            //画线,长度127
  68   1      /*----------------------------------------------*/
  69   1      col=33;                                                 //定位x方位33、y方位48
  70   1      row=48;
  71   1      xy=1;                                                   //水平线
  72   1      Linehv(30);                                             //画线,长度30
  73   1      col=36;                                                 //定位x方位36、y方位32
  74   1      row=32;
  75   1      xy=0;                                                   //垂直线
  76   1      Linehv(16);                                             //画线,长度16
  77   1      col=64;                                                 //定位x方位64、y方位48
  78   1      row=48;
  79   1      xy=1;                                                   //水平线
  80   1      Linehv(30);                                             //画线,长度30
  81   1      col=91;                                                 //定位x方位91、y方位32
  82   1      row=32;
  83   1      xy=0;                                                   //垂直线
  84   1      Linehv(16);                                             //画线,长度16
  85   1      /*------------------------------------------------*/
  86   1      col=10;                                                 //定位x方位10、y方位32
  87   1      row=32;
  88   1      xy=0;                                                   //垂直线
  89   1      Linehv(27);                                             //画线,长度27
  90   1      /************以下画出船底的弧形***********/
  91   1      col=0;                                                  //定位x方位0、y方位32
  92   1      row=32;
  93   1      Linexy(10,16);                                  //画斜线,终点为x方位10、y方位16
  94   1      col=10;                                                 //定位x方位10、y方位16
  95   1      row=16;
  96   1      Linexy(30,8);                                           //画斜线,终点为x方位30、y方位8
  97   1      col=30;                                                 //定位x方位30、y方位8
  98   1      row=8;
  99   1      Linexy(64,5);                                           //画斜线,终点为x方位64、y方位5
 100   1      /*-----------------------------------------------------------------*/
 101   1      col=65;                                                 //定位x方位65、y方位5
 102   1      row=5;
 103   1      Linexy(97,8);                                           //画斜线,终点为x方位97、y方位8
 104   1      col=97;                                                 //定位x方位97、y方位8
 105   1      row=8;
 106   1      Linexy(117,16);                                 //画斜线,终点为x方位117、y方位16
 107   1      col=117;                                                        //定位x方位117、y方位16
 108   1      row=16;
 109   1      Linexy(127,32);                                 //画斜线,终点为x方位127、y方位32
 110   1      /*----------------------------------画舢舨结束------------------------------------*/
 111   1      while(1);                                                       //死循环
 112   1      
 113   1      }                                                               //主函数结束
 114          /*************************画斜线子函数************************/
 115          void Linexy(uchar endx, uchar endy) 
 116          {                               
 117   1      register uchar t;                               
C51 COMPILER V8.02   CS23_2                                                                09/15/2008 16:50:43 PAGE 3   

 118   1      char xerr=0,yerr=0,delta_x,delta_y,distance;
 119   1      uchar incx,incy;                                
 120   1      delta_x=endx-col;                               
 121   1      delta_y=endy-row;                       
 122   1      if(delta_x>0)incx=1;                    
 123   1      else if(delta_x==0)incx=0;              
 124   1          else incx=-1;                               
 125   1      if(delta_y>0)incy=1;                    
 126   1      else if(delta_y==0)incy=0;              
 127   1          else incy=-1;                                       
 128   1      delta_x=cabs(delta_x);                  
 129   1      delta_y=cabs(delta_y);                  
 130   1      if(delta_x>delta_y) distance=delta_x;  
 131   1      else distance=delta_y;                  
 132   1      /*-----------开始画线-------------*/
 133   1      for(t=0;t<=distance+1;t++){
 134   2      point();                                                
 135   2      xerr+=delta_x;
 136   2      yerr+=delta_y;
 137   2      if(xerr>distance){
 138   3      xerr-=distance;
 139   3      col+=incx;                                              
 140   3      }
 141   2      if(yerr>distance){
 142   3      yerr-=distance;
 143   3      row+=incy;                                      
 144   3      }
 145   2                                                      }
 146   1      }                                                       
 147          /*********************画水平、垂直线子函数***********************/
 148          void Linehv(uchar length)        /*函数名为Linehv的画水平、垂直线子函数,定义
 149          length 为线段长度的无符号字符型变量。*/
 150          {                                                       //画水平、垂直线子函数开始
 151   1      uchar xs,ys;                   //定义xs、ys 为无符号字符型变量。
 152   1      
 153   1      if(xy){ys=col;                                  //若xy为1,则为水平划线
 154   2              for(xs=0;xs<length;xs++){
 155   3                      col=ys+xs;
 156   3                      point();}
 157   2                      }
 158   1      else {xs=row;                                   //否则为垂直划线
 159   2              for(ys=0;ys<length;ys++)
 160   2                      {
 161   3                      row=xs+ys;
 162   3                      point();}
 163   2                      }
 164   1      }                                                               //画水平、垂直线子函数结束
 165          /**********************画点子函数***************************/
 166          void point(void)                                        //画点子函数
 167          {                                                               //画点子函数开始
 168   1      uchar x1,y1,x,y;                                        //定义x1、y1、x、y 为无符号字符型变量
 169   1      x1=col;                                                 //x方向座标col赋予x1(暂存)
 170   1      y1=row;                                                 //y方向座标row赋予y1(暂存)
 171   1      row=y1>>3;                                              //y1右移3位后赋予row,获得y方向的页地址
 172   1      Rddata();                                                       //读取列(x)地址、页(y)地址处的数据
 173   1      y=y1&0x07;                                              //计算出该页(1字节)内的y轴点位置地址

⌨️ 快捷键说明

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