yjdisplayc.lst

来自「郑州远博公司生产的单片机A型实验板原理图及配套试验源程序」· LST 代码 · 共 177 行

LST
177
字号
C51 COMPILER V7.20   YJDISPLAYC                                                            02/20/2005 17:42:39 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE YJDISPLAYC
OBJECT MODULE PLACED IN yjdisplayc.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE yjdisplayc.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*======YB-51-A单片机通用实验板液晶屏显示演示程序===========================*/
   2          /*======程序来源:远博科技  0371-6949037  13949105551  13603453895=======================*/
   3          /*===================================================================
   4          
   5          [注]:AT89C51的晶振频率为11.0592MHz
   6          ====================================================================*/
   7          
   8          /*            ACM1602A (16x2)接线图
   9          =====================================================================
  10          连接线图:   ACM-------51     ACM-------51     ACM--------51
  11                      DB0-----P0.0     DB4-----P0.4     RS-------P1_0
  12                      DB1-----P0.1     DB5-----P0.5     RW-------P1_1
  13                      DB2-----P0.2     DB6-----P0.6     E--------P1_2
  14                      DB3-----P0.3     DB7-----P0.7     BLA------P1_3
  15                      
  16                      VLCD接1K电阻到GND
  17          
  18          ====================================================================*/
  19          /*阅读本程序之前,请参考光盘上带的LCD1602的工作原理(长沙太阳人科技公司提供)*/
  20          
  21          #include <AT89X51.H>
  22          #include <Delay.h>
  23          #include <stdio.h>
  24          #include <Intrins.h>
  25          #define uchar unsigned char
  26          #define uint  unsigned int 
  27          // 1602连线
  28          #define RS    P1_0       //数据/命令选择
  29          #define RW    P1_1       //读/写选择
  30          #define Elcm  P1_2       //使能信号
  31          #define BLA   P1_3       //液晶显示屏背光
  32          
  33          #define DataPort P0      // 数据端口
  34          #define Busy    0x80
  35          void WaitForEnable( void );
  36          void LcdWriteData( char dataW );
  37          void LcdWriteCommand( uchar CMD,uchar AttribC ) ;
  38          void LcdReset( void ) ;
  39          void DispOneChar(uchar x,uchar y,uchar Wdata)  ;
  40          void ePutstr(uchar x,uchar y, uchar code *ptr) ;
  41          code char examp[]="Wellcom to Ybkj  0371-6949037"; 
  42          
  43          
  44           void main(void)      {
  45   1          DelayMs(2000);                      //延时使液晶屏复位
  46   1          BLA=0;                               //打开液晶显示屏背光
  47   1          LcdReset();                          //液晶屏初始化
  48   1          ePutstr(0,0,examp);                 // 液晶屏显示一个预定字符串
  49   1          while(1);                           //无限循环。
  50   1                                  }
  51          
  52          
  53          /*=======================================================
  54          液晶屏上显示字符串
  55          =======================================================*/
C51 COMPILER V7.20   YJDISPLAYC                                                            02/20/2005 17:42:39 PAGE 2   

  56          void ePutstr(uchar x,uchar y, uchar code *ptr) {
  57   1      uchar i,l=0;
  58   1          while (*ptr++ >0){l++;}; //统计字符的个数
  59   1              ptr=ptr-(l+1);            //使指针重新指向首个字符
  60   1          for (i=0;i<l;i++)     { DispOneChar(x++,y,*ptr++);
  61   2                                  if ( x == 31 )  { x = 0; y ^= 0; }
  62   2                                 }
  63   1                                                      }
  64          
  65          
  66          /*=======================================================
  67          显示光标定位
  68          =======================================================*/
  69          void Disp_XY( char posx,char posy) {
  70   1      
  71   1      uchar temp;
  72   1      
  73   1          temp = posx & 0x0f;
  74   1          posy &= 0x1;   
  75   1          if ( posx>15 )   temp |= 0x40;
  76   1              if (posy==1)   temp |=0x40;
  77   1          temp |= 0x80;
  78   1          LcdWriteCommand(temp,0);
  79   1      }
  80          
  81          /*=======================================================
  82          按指定位置显示数出一个字符
  83          =======================================================*/
  84          void DispOneChar(uchar x,uchar y,uchar Wdata)  {
  85   1      
  86   1          Disp_XY( x, y );                // 定位显示地址
  87   1          LcdWriteData( Wdata );            // 写字符
  88   1      }
  89          
  90          /*=======================================================
  91          初始化程序, 必须按照产品资料介绍的初始化过程进行
  92          =======================================================*/
  93          void LcdReset( void )  {
  94   1      
  95   1             LcdWriteCommand( 0x38, 0);            // 显示模式设置(不检测忙信号)
  96   1              DelayMs(10);
  97   1          LcdWriteCommand( 0x38, 0);            // 共三次
  98   1              DelayMs(10);
  99   1          LcdWriteCommand( 0x38, 0);
 100   1              DelayMs(10);
 101   1      
 102   1          LcdWriteCommand( 0x38, 1);            // 显示模式设置(以后均检测忙信号)
 103   1          LcdWriteCommand( 0x08, 1);            // 显示关闭
 104   1          LcdWriteCommand( 0x01, 1);            // 显示清屏
 105   1          LcdWriteCommand( 0x06, 1);            // 显示光标移动设置
 106   1          LcdWriteCommand( 0x0c, 1);            // 显示开及光标设置
 107   1      }
 108          
 109          /*=======================================================
 110          写控制字符子程序: E=1 RS=0 RW=0
 111          =======================================================*/
 112          void LcdWriteCommand( uchar CMD,uchar AttribC )  {
 113   1      
 114   1          if (AttribC) WaitForEnable();                // 检测忙信号?
 115   1          RS=0; RW=0; _nop_();
 116   1          DataPort=CMD; _nop_();
 117   1          // 送控制字子程序
C51 COMPILER V7.20   YJDISPLAYC                                                            02/20/2005 17:42:39 PAGE 3   

 118   1          Elcm=1;_nop_();_nop_();Elcm=0;            // 操作允许脉冲信号
 119   1      }
 120          
 121          /*=======================================================
 122          当前位置写字符子程序: E =1 RS=1 RW=0
 123          =======================================================*/
 124          void LcdWriteData( char dataW )  {
 125   1      
 126   1          WaitForEnable();
 127   1              // 检测忙信号
 128   1      
 129   1          RS=1; RW=0; _nop_();
 130   1      
 131   1          DataPort=dataW; _nop_();
 132   1      
 133   1          Elcm=1; _nop_(); _nop_(); Elcm=0;        // 操作允许脉冲信号
 134   1      
 135   1      }
 136          
 137          /*=======================================================
 138          正常读写操作之前必须检测LCD控制器状态:    CS=1 RS=0 RW=1
 139          DB7:    0  LCD控制器空闲; 1  LCD控制器忙
 140          ========================================================*/
 141          void WaitForEnable( void ) {
 142   1      
 143   1          DataPort = 0xff;
 144   1      
 145   1          RS=0; RW=1; _nop_();    Elcm=1; _nop_(); _nop_();
 146   1      
 147   1          while( DataPort & Busy );
 148   1          Elcm=0;
 149   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    374    ----
   CONSTANT SIZE    =     30    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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