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

📄 mdp.lst

📁 用AT89S52编写的12864显示的方波!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.06   MDP                                                                   03/03/2009 22:18:33 PAGE 1   


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

line level    source

   1          /***********************************************************************/  
   2          /*显示模块的应用,LCD12864并行接法画波形程序
   3          /*LCD12864点阵高电平亮,低电平暗
   4          /*LCD12864在X轴方向分有上下各8个区(一个屏幕上共有16个区)
   5          /*上半部分有00~07区;下半部分有08~0F区
   6          /*每个区X轴向上有16个点阵;Y轴向上有32个点阵
   7          /*LCD12864写点阵每个区都是先对前面的8个点阵进行操作,再对后8个点阵操作
   8          /*      创作时间    2008.7.31
   9          /************************************************************************/
  10          #include<reg52.h>
  11          #include<intrins.h>
  12          #include<math.h>         //调用sin()函数
  13          #define uint unsigned int 
  14          #define uchar unsigned char
  15          /************变量定义**************/
  16          uint i,j;
  17          uchar temp,x,y;
  18          
  19          
  20          /********* LCD12864边线图***********/
  21          sbit RS=P2^5;    //数据\命令选择
  22          sbit RW=P2^6;    //读\写选择
  23          sbit E=P2^7;     //使能
  24          /*************************/
  25          /* 延迟子函数
  26          /*************************/
  27          void delay(uint ms)
  28          {
  29   1          for(i=0;i<ms;i++)
  30   1              for(j=0;j<110;j++);     
  31   1      }
  32          /********************************/
  33          /* LCD12864子函数
  34          /********************************/
  35          //============LCDbegin==========/
  36          /*******检查LCD忙位********/
  37          void check_busy()       
  38          {
  39   1          RS=0;   //命令选择  
  40   1          RW=1;
  41   1          E=1;
  42   1          P0=0xff;
  43   1          while((P0&0x80)==0x80);   //确定读忙标志位BF为0
  44   1          E=0;
  45   1      }
  46          /********LCD写命令子函数*********/
  47          void write_com(uchar com)
  48          {
  49   1          check_busy();    //检忙
  50   1          RS=0;
  51   1          RW=0;
  52   1          E=1;
  53   1          P0=com;
  54   1          delay(2);
  55   1          E=0;
C51 COMPILER V8.06   MDP                                                                   03/03/2009 22:18:33 PAGE 2   

  56   1          delay(2);   
  57   1      }
  58          /**********LCD写数据子函数**********/
  59          void write_data(uchar dat)
  60          {
  61   1          check_busy();
  62   1          RS=1;
  63   1          RW=0;
  64   1          E=1;
  65   1          P0=dat;
  66   1          delay(2);
  67   1          E=0;
  68   1          delay(2);
  69   1      }
  70          /********LCD写字符串子函数**********/
  71          void write_str(uchar add,uchar *str)
  72          {
  73   1          write_com(add);
  74   1          while(*str!='\0')
  75   1          {
  76   2              write_data(*str++);
  77   2              delay(2);
  78   2          }
  79   1      }
  80          /********LCD初始化子函数********/
  81          void init_LCD()
  82          {
  83   1          write_com(0x30);    //选择基本指令集  选择8bit数据流
  84   1          write_com(0x02);     //地址归位
  85   1          write_com(0x0c);     //开显示(无游标、不反白)
  86   1          write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
  87   1          write_com(0x01);       //清除显示,并且设定地址指针为00H
  88   1          delay(5);
  89   1      }
  90          
  91          /**************显示坐标(x-y轴)*******************/
  92          void display_XY_line()
  93          {
  94   1              for(x=0;x<16;x++)               //16个区
  95   1              for(y=0;y<32;y++)               //每个区有32行
  96   1              { 
  97   2                      if(x<8&&y==31)           //在前八个区的第32行画一条横线---x轴
  98   2                      {
  99   3                              write_com(0x36);          //扩充指令集,开绘图功能
 100   3                              write_com(0x80+y);    //行地址
 101   3                              write_com(0x80+x);     //列地址
 102   3                              write_com(0x30);           //改变“RE”位元,基本指令集,以下为写数据
 103   3      //连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写                      
 104   3                              write_data(0xff);               //前8个点
 105   3                              write_data(0xff);          //后8个点
 106   3                      }
 107   2                      
 108   2                      
 109   2                      else if(x==0||x==8)             //在第零和第八区画一条竖线---y轴
 110   2                      {
 111   3                              write_com(0x36);          //扩充指令集,开绘图功能
 112   3                              write_com(0x80+y);    //行地址
 113   3                              write_com(0x80+x);     //列地址
 114   3                              write_com(0x30);           //改变“RE”位元,基本指令集,以下为写数据
 115   3      //连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写                      
 116   3                              write_data(0x80);         //前8个点
 117   3                              write_data(0x00);         //后8个点
C51 COMPILER V8.06   MDP                                                                   03/03/2009 22:18:33 PAGE 3   

 118   3                      }
 119   2                      
 120   2                      
 121   2                      else     //在除去x轴和y轴的其它个位置写0(即无显示)
 122   2                      {
 123   3                              write_com(0x36);           //扩充指令集,开绘图功能
 124   3                              write_com(0x80+y);         //行地址
 125   3                              write_com(0x80+x);         //列地址
 126   3                              write_com(0x30);          //改变“RE”位元,基本指令集
 127   3      //连续对一个区写入两个数据,第一个语句是对前面的8个点写,第二语句是对后面的8个点写
 128   3                              write_data(0x00);        //前8个点
 129   3                              write_data(0x00);         //后8个点     
 130   3                      }
 131   2              }
 132   1              write_com(0x34);         //扩充指令,关绘图功能
 133   1              write_com(0x36);         //扩充指令,开绘图功能
 134   1      }
 135          
 136          
 137          void display_fangbo_line()
 138          {
 139   1              for(x=0;x<16;x++)               //16个区
 140   1              for(y=0;y<32;y++)               //每个区有32行
 141   1              { 
 142   2                      if(x<8&&y==31)           
 143   2                      {
 144   3                              write_com(0x36);          //扩充指令集,开绘图功能
 145   3                              write_com(0x80+y);    //行地址
 146   3                              write_com(0x80+x);     //列地址
 147   3                              write_com(0x30);           //改变“RE”位元,基本指令集,以下为写数据

⌨️ 快捷键说明

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