yj.lst

来自「单片及c语言轻松入门的随书光盘」· LST 代码 · 共 193 行

LST
193
字号
C51 COMPILER V7.06   YJ                                                                    11/02/2005 08:42:58 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE YJ
OBJECT MODULE PLACED IN yj.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE yj.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /**************************************************
   2          ;    平凡单片机工作室
   3          ;  http://www.mcustudio.com
   4          ;    Copyright 2003 pingfan's McuStudio
   5          ;    All rights Reserved
   6          ;作者:周坚   
   7          ;yj.c
   8          ;连线图:
   9          ;        DB0---DPROT.0  DB4---DPROT.4    RS-------------P2.5
  10          ;        DB1---DPROT.1  DB5---DPROT.5    RW-------------P2.6
  11          ;        DB2---DPROT.2  DB6---DPROT.6    E--------------P2.7
  12          ;        DB3---DPROT.3  DB7---DPROT.7    VLCD接10K可调电阻到GND*
  13          ;80C51的晶振频率为12MHz
  14          ;液晶显示程序
  15          ;**************************************************/
  16          #define uchar unsigned char
  17          #define uint  unsigned int
  18          #include "reg52.h"
  19          #include "intrins.h"
  20          sbit    RS      =       P2^5;
  21          sbit    RW      =       P2^6;
  22          sbit    E       =       P2^7;
  23          
  24          #define DPORT   P0
  25          
  26          //uchar cur;                            //设定光标参数
  27          
  28          const uchar NoDisp=0;           //无显示
  29          const uchar NoCur=1;            //有显示无光标
  30          const uchar CurNoFlash=2;       //有光标但不闪烁
  31          const uchar CurFlash=3;         //有光标且闪烁
  32          
  33          void LcdPos(uchar,uchar);       //确定光标位置
  34          void LcdWd(uchar);                      //写字符
  35          void LcdWc(uchar);                      //送控制字(检测忙信号)
  36          void LcdWcn(uchar );            //送控制字子程序(不检测忙信号)
  37          void mDelay(uchar );            //延时,毫秒数由j决定
  38          void WaitIdle();                        //正常读写操作之前检测LCD控制器状态
  39          //在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符
  40          void WriteChar(uchar c,uchar xPos,uchar yPos)
  41          {       LcdPos(xPos,yPos);
  42   1              LcdWd(c);
  43   1      }
  44          
  45          void WriteString(uchar *s,uchar xPos,uchar yPos)
  46          {       uchar i;
  47   1              if(*s==0)               //遇到字符串结束
  48   1                      return; 
  49   1              for(i=0;;i++)
  50   1              {       
  51   2                      if(*(s+i)==0)
  52   2                              break;
  53   2                      WriteChar(*(s+i),xPos,yPos);
  54   2                      xPos++;
  55   2                      if(xPos>=15)    //如果XPOS中的值未到15(可显示的最多位)
C51 COMPILER V7.06   YJ                                                                    11/02/2005 08:42:58 PAGE 2   

  56   2                              break;
  57   2      
  58   2              }
  59   1      }
  60          void SetCur(uchar Para) //设置光标
  61          {       mDelay(2);
  62   1              switch(Para)
  63   1              {       case 0:
  64   2                      {       LcdWc(0x08);    //关显示
  65   3                              break;
  66   3                      }
  67   2                      case 1:
  68   2                      {       LcdWc(0x0c);    //开显示但无光标
  69   3                              break;
  70   3                      }
  71   2                      case 2:
  72   2                      {       LcdWc(0x0e);    //开显示有光标但不闪烁
  73   3                              break;
  74   3                      }
  75   2                      case 3:
  76   2                      {       LcdWc(0x0f);    //开显示有光标且闪烁
  77   3                              break;
  78   3                      }
  79   2                      default:
  80   2                              break;
  81   2              }
  82   1      }
  83          
  84          void ClrLcd()   //清屏命令
  85          {       LcdWc(0x01);
  86   1      }                       
  87          
  88          //      正常读写操作之前检测LCD控制器状态
  89          void WaitIdle()
  90          {       uchar tmp;
  91   1              RS=0;
  92   1              RW=1;
  93   1              E=1;
  94   1              _nop_();
  95   1              for(;;)
  96   1              {       tmp=DPORT;      
  97   2                      tmp&=0x80;
  98   2                      if(     tmp==0)
  99   2                              break;
 100   2              }
 101   1              E=0;
 102   1      }
 103          
 104          void LcdWd(uchar c)             //写字符子程序
 105          {       WaitIdle();
 106   1              RS=1;   
 107   1              RW=0;
 108   1              DPORT=c;                        //将待写数据送到数据端口
 109   1              E=1;
 110   1              _nop_();
 111   1              _nop_();
 112   1              E=0;
 113   1      }
 114          void LcdWc(uchar c)             //送控制字子程序(检测忙信号)
 115          {       WaitIdle();     
 116   1              LcdWcn(c);
 117   1      }
C51 COMPILER V7.06   YJ                                                                    11/02/2005 08:42:58 PAGE 3   

 118          
 119          void LcdWcn(uchar c)    //送控制字子程序(不检测忙信号)
 120          {       RS=0;
 121   1              RW=0;
 122   1              DPORT=c;
 123   1              E=1;
 124   1              _nop_();
 125   1              E=0;
 126   1      }
 127          void LcdPos(uchar xPos,uchar yPos)      //设置第(xPos,yPos)个字符的DDRAM地址
 128          {       unsigned char tmp;
 129   1              xPos&=0x0f;             //x位置范围是0~15
 130   1              yPos&=0x01;             //y位置范围是0~1
 131   1              if(yPos==0)             //显示第一行
 132   1                      tmp=xPos;
 133   1              else
 134   1                      tmp=xPos+0x40;
 135   1              tmp|=0x80;
 136   1              LcdWc(tmp);
 137   1      }
 138          void RstLcd()           //复位LCD控制器
 139          {       mDelay(15);             //如果使用12M或以下晶振,此数值不必改,如用24M晶振,须用30
 140   1              LcdWc(0x38);    //显示模式设置
 141   1              LcdWc(0x08);    //显示关闭
 142   1              LcdWc(0x01);    //显示清屏
 143   1              LcdWc(0x06);    //显示光标移动位置
 144   1              LcdWc(0x0c);    //显示开及光标设置
 145   1      }       
 146          
 147          void mDelay(uchar j)    //延时,毫秒数由j决定
 148          {   uint i=0;
 149   1          for(;j>0;j--)
 150   1          {  for(i=0;i<124;i++)
 151   2              {;}
 152   2          }
 153   1      }
 154          
 155          void main()
 156          {       uchar xPos,yPos;
 157   1              uchar *s="Welcome..!";
 158   1              xPos=0;
 159   1              yPos=1;
 160   1              RstLcd();
 161   1              ClrLcd();
 162   1              SetCur(CurFlash);       //开光标显示、闪烁
 163   1              WriteString(s,xPos,yPos);               
 164   1              for(;;){;}
 165   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    296    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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