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

📄 lcdinti.lst

📁 FDY12864_KEY...keil c51
💻 LST
字号:
C51 COMPILER V7.50   LCDINTI                                                               04/29/2007 17:31:57 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCDINTI
OBJECT MODULE PLACED IN lcdinti.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcdinti.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #define  uchar  unsigned  char
   3          #define  uint   unsigned  int
   4          //*************************************************************
   5          sbit rst=P1^4;
   6          sbit psb=P1^3;
   7          sbit rs=P1^0;
   8          sbit rw=P1^1;
   9          sbit e=P1^2;
  10          void delay_50us(uint t);
  11          void delay_50ms(uint t);
  12          void wri(uint t);
  13          void wrd(uint t);
  14          void  welcome();
  15          void WriteLCD(unsigned char StartAddress,unsigned char Size,unsigned char Charactors[]);
  16          void WriteLCD_Command(unsigned char Command);
  17          void WriteLCD_Data(unsigned char Data);
  18          unsigned char ChangeAddress(unsigned char StartAddress);
  19          unsigned char LCDBusyWait();
  20          //*************************************************************
  21          void lcd_init()//LCD初始化程序
  22            {
  23   1          rst=0;
  24   1              rst=1;  //LCD复位
  25   1              psb=1;  //将PSB置1,通信方式为8位数据并口
  26   1          delay_50ms(1);//延时40ms
  27   1                              //功能设置---8BIT控制界面,基本指令集
  28   1              wri(0x30);                      //调用写指令子程序
  29   1              delay_50us(1);      //延迟50us
  30   1                                      //显示打开,光标关,反白显示关
  31   1              wri(0x0c);                              //调用写指令子程序
  32   1              delay_50us(1);          //延迟50uS
  33   1                                      //清除屏幕显示,将DDRAM的地址计数器归零
  34   1              wri(0x01);                              //调用写指令子程序
  35   1              delay_50us(1);          //延迟39uS
  36   1                                      //DDRAM的地址计数器(AC)加1
  37   1              wri(0x06);                              //调用写指令子程序
  38   1              delay_50us(1);          //延迟39uS
  39   1        }
  40          void  welcome()
  41           { uchar i,j;
  42   1             wri(0x01);
  43   1                 delay_50ms(1);
  44   1                 WriteLCD(0x82,0,"欢迎使用");
  45   1                 WriteLCD(0x92,0,"Welcome ");
  46   1                 //WriteLCD(0x89,0,"系统正忙");
  47   1                 WriteLCD(0x89,0,"Waiting.");
  48   1                 //WriteLCD(0x88,0,"正在加载初始化");
  49   1                 //WriteLCD(0x99,0,"Waiting ");
  50   1                for(j=0;j<=1;j++)
  51   1                 {
  52   2                 wri(0x8d);
  53   2                 wrd(0x20);
  54   2                 wrd(0x20);
  55   2                 wrd(0x20);
C51 COMPILER V7.50   LCDINTI                                                               04/29/2007 17:31:57 PAGE 2   

  56   2                 wrd(0x20);
  57   2                 wrd(0x20);
  58   2                 wri(0x8d);
  59   2                 for(i=0;i<=4;i++)
  60   2                    {
  61   3                          wrd(0x2e);
  62   3                              delay_50ms(10);
  63   3                        }
  64   2                      }
  65   1       }
  66          //*************************************下面是延时程序(包括50us和50ms)
  67          void delay_50us(uint t)  //50us延时程序
  68          {
  69   1      uchar j; 
  70   1      for(;t>0;t--)
  71   1          for(j=19;j>0;j--)
  72   1              ;
  73   1      }
  74          void delay_50ms(uint t)//50ms延时程序
  75          {
  76   1      uint j; 
  77   1      for(;t>0;t--) 
  78   1      for(j=6245;j>0;j--)
  79   1      ;
  80   1      }
  81          //***********************************************************
  82          void wri(uint com)
  83          {
  84   1        rs=0;
  85   1        rw=1;
  86   1      loop1:  P0=0xff;
  87   1        e=1;
  88   1        ACC=P0;
  89   1        delay_50us(2);
  90   1        if(ACC^7!=1)
  91   1            {
  92   2                 rw=0;
  93   2                 P0=com;
  94   2                 e=1;
  95   2                 e=0;
  96   2                }
  97   1              else
  98   1              goto  loop1;
  99   1      }
 100          //******************************************以上是写指令子程序 
 101          void wrd(uint dat)
 102          {
 103   1         rs=0;
 104   1         rw=1;
 105   1      loop2:
 106   1         P0=0xff;
 107   1         e=1;
 108   1         ACC=P0;
 109   1         delay_50us(3);
 110   1         if(ACC^7!=1)
 111   1         {
 112   2           rs=1;
 113   2               rw=0;
 114   2               P0=dat;
 115   2               e=1;
 116   2               e=0;
 117   2         }
C51 COMPILER V7.50   LCDINTI                                                               04/29/2007 17:31:57 PAGE 3   

 118   1         else
 119   1         goto loop2;
 120   1      }
 121          //******************************************以上是写数据子程序
 122          void WriteLCD(unsigned char StartAddress,unsigned char Size,unsigned char Charactors[])
 123          {
 124   1              unsigned char *i=Charactors;      //字符串的首地址
 125   1              WriteLCD_Command(StartAddress);
 126   1              if(Size)                //Size不为0
 127   1              {
 128   2                      bit Over=0;
 129   2                      while(i<(Charactors+Size))              //判断字符串结尾
 130   2                      {
 131   3                              if(Over)
 132   3                              {
 133   4                                      WriteLCD_Data(' ');i++;
 134   4                                      if(i>=(Charactors+Size)) break;
 135   4                                      WriteLCD_Data(' ');i++;
 136   4                              }
 137   3                              else
 138   3                              {
 139   4      
 140   4                                      switch(((*i)*256)+(*(i+1)))
 141   4                                      {
 142   5      
 143   5                                      }
 144   4                              }
 145   3                              StartAddress=ChangeAddress(StartAddress); //改变地址,实现了逐行显示
 146   3                      }
 147   2              }
 148   1              else                                                    //Size为0
 149   1              {
 150   2                      while(*i)                                                         //判断字符串结尾,*i为0代表结束
 151   2                      {
 152   3                              WriteLCD_Data(*i);
 153   3                              i++;
 154   3                              WriteLCD_Data(*i);
 155   3                              i++;
 156   3                              StartAddress=ChangeAddress(StartAddress);
 157   3                      }
 158   2              }
 159   1      }
 160          void WriteLCD_Data(unsigned char Data)                  //向LCD写入一个字节的数据
 161          {
 162   1              LCDBusyWait();
 163   1              rs=1;
 164   1              P0 = Data;
 165   1              e=1;
 166   1              e=0;
 167   1      }
 168          
 169          void WriteLCD_Command(unsigned char Command)    //向LCD写入一个字节的命令
 170          {
 171   1              LCDBusyWait();
 172   1              rs=0;
 173   1              P0=Command;
 174   1              e=1;
 175   1              e=0;
 176   1      }
 177          unsigned char ChangeAddress(unsigned char StartAddress)
 178          {
 179   1              switch(StartAddress)
C51 COMPILER V7.50   LCDINTI                                                               04/29/2007 17:31:57 PAGE 4   

 180   1              {
 181   2                      case 0x87:WriteLCD_Command(0x90);StartAddress=0x90;break;
 182   2                      case 0x8F:WriteLCD_Command(0x98);StartAddress=0x98;break;
 183   2                      case 0x97:WriteLCD_Command(0x88);StartAddress=0x88;break;
 184   2                      default:StartAddress+=1;
 185   2              }
 186   1              return StartAddress;
 187   1      }
 188          unsigned char LCDBusyWait()                                                     //等待LCD就绪
 189          {
 190   1              unsigned char Status;
 191   1              rs=0;
 192   1              rw=1;
 193   1              P0=0xFF;
 194   1              e=1;
 195   1              Status=P0;
 196   1              e=0;
 197   1              while(Status & 0x80)
 198   1              {
 199   2                      e=1;
 200   2                      Status=P0;
 201   2                      e=0;
 202   2              }
 203   1              rw=0;
 204   1              return Status;
 205   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    618    ----
   CONSTANT SIZE    =     27    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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