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

📄 lcd1602_parallel.lst

📁 并行LCD1602液晶完整的驱动程序
💻 LST
字号:
C51 COMPILER V8.05a   LCD1602_PARALLEL                                                     11/06/2007 16:06:02 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE LCD1602_PARALLEL
OBJECT MODULE PLACED IN lcd1602_Parallel.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd1602_Parallel.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*=============================1602液晶驱动程序============================
   2           
   3            程序名称:1602液晶驱动程序
   4          
   5            版    本:Agni 07-SV开发板
   6          
   7            作    者:蓝极风电子技术
   8          
   9            日    期:2007.10.28
  10          
  11          注:(1):主芯片AT89S52使用11.0592M晶振,1602上下屏液晶
  12          
  13                  (2):Keil uV3 3.30编译运行通过
  14          
  15                  (3):本例程在 Agni 07-SV 开发板平台上成功运行通过
  16          
  17                  (4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.
  18          
  19                  (5):更多学习资源浏览:(http://www.bluepw.com 或 http://www.bluepw.cn)
  20          
  21          ============================================================================*/
  22          #include<at89x52.h>
  23          #include<intrins.h>
  24          
  25          #define uchar unsigned char
  26          #define uint   unsigned int
  27          #define Data_lcd P0
  28          
  29          sbit LCM_RS=P1^0;
  30          sbit LCM_RW=P1^1;
  31          sbit LCM_E=P1^2;
  32          uchar code dig[]={"0123456789"};
  33          
  34          void delay(uint);
  35          void lcd_wait(void);
  36          
  37          /*****************************延时K*1ms,12.000mhz**************************/
  38          
  39          void delay(uint k)
  40          {
  41   1          uint i,j;
  42   1          for(i=0;i<k;i++)
  43   1          {
  44   2              for(j=0;j<60;j++);
  45   2          }
  46   1      }
  47             
  48          /***************************写数据/指令到ICM子函数*************************/
  49          
  50          void Write(uchar X,uchar WCLCM)
  51          {
  52   1          lcd_wait();
  53   1              Data_lcd=WCLCM;
  54   1              if(X==0)
  55   1              {
C51 COMPILER V8.05a   LCD1602_PARALLEL                                                     11/06/2007 16:06:02 PAGE 2   

  56   2                      LCM_RS=0;LCM_RW=0;               // 选中指令寄存器
  57   2              }
  58   1              else if(X==1)
  59   1              {
  60   2                      LCM_RS=1;LCM_RW=0;               // 选中数据寄存器
  61   2              }
  62   1          LCM_E =1;    
  63   1              _nop_();_nop_(); _nop_();   
  64   1          LCM_E =0; 
  65   1      }
  66          
  67          /*****************************lcm内部等待函数*****************************/
  68          
  69          void lcd_wait(void)
  70          {
  71   1          Data_lcd=0xff;
  72   1              LCM_E =1;
  73   1          LCM_RS=0;                           
  74   1          LCM_RW=1;                           
  75   1          _nop_();_nop_();_nop_();
  76   1          while(Data_lcd&0x80)
  77   1              {  
  78   2                      LCM_E =0;
  79   2                      _nop_();_nop_();
  80   2                      LCM_E =1;
  81   2                      _nop_();_nop_();
  82   2              }
  83   1              LCM_E =0;
  84   1              
  85   1      }
  86          
  87          /******************************LCM初始化子函数***************************/
  88          
  89          void Init_lcd()
  90          {
  91   1              uchar c;
  92   1              delay(500);   
  93   1              Data_lcd=0;     
  94   1              delay(15);
  95   1              for(c=0;c<3;c++)                //三次显示模式设置,不检测忙信号
  96   1              {
  97   2                      Data_lcd=0x38;
  98   2                      LCM_RS=0;                   // 选中指令寄存器
  99   2                      LCM_RW=0;                       // 写模式       
 100   2                  LCM_E =1;    
 101   2                      _nop_(); _nop_(); _nop_();  
 102   2                  LCM_E =0;
 103   2                      delay(5);       
 104   2              }
 105   1      
 106   1          Write(0,0x38);    //8bit数据传送,2行显示,5*7字型,检测忙信号
 107   1          Write(0,0x08);    //关闭显示,检测忙信号
 108   1          Write(0,0x01);    //清屏,检测忙信号
 109   1          Write(0,0x06);    //显示光标右移设置,检测忙信号
 110   1          Write(0,0x0c);    //显示屏打开,光标不显示,不闪烁,检测忙信号
 111   1      }
 112          
 113          /* ************* 函数 Show() 对外来数据进行处理 **************************/
 114          /**************  第一行:0x80--0x8f; 第二行:0xc0--0xcf********************/
 115          void Show(uchar address,uchar L,uchar STR1[])
 116          {
 117   1                uchar i;        
C51 COMPILER V8.05a   LCD1602_PARALLEL                                                     11/06/2007 16:06:02 PAGE 3   

 118   1                Write(0,address); for(i=0;i<L;i++)  Write(1,STR1[i]);
 119   1      }
 120          
 121          /*************纯阿拉伯数字显示,参数入口:Show_dig(地址,数字)***********
 122          void Show_dig(uchar address,uint number)
 123          {
 124                  uchar buffer[8];
 125                  uchar j,k;
 126                  uchar i=0;
 127                  Write(0,address);
 128                  do{                                                                                  //此子程序可以用,请看说明书
 129                          buffer[i++]=number%10;
 130                          number=number/10;
 131                          j=i;
 132                  }while(number!=0);
 133                  for(k=j;k>0;k--)
 134                  {
 135                          Write(1,dig[buffer[k-1]]);
 136                  }
 137          }
 138          
 139          ******************************主函数************************************/
 140          
 141          void main(void)
 142          {
 143   1              
 144   1              Init_lcd();
 145   1              Write(0,0x01);                                   //清显示屏
 146   1              Show(0x80,16,"www.bluepw.com  ");
 147   1              Show(0xc0,16,"2007.11.04 Sun  ");
 148   1              //Show_dig(uchar address,uint number)
 149   1              while(1);
 150   1      }
 151          
 152          /***************************** end *************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    266    ----
   CONSTANT SIZE    =     45    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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