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

📄 yejing.lst

📁 LCM1602液晶显示驱动程序,8051单片机使用
💻 LST
字号:
C51 COMPILER V8.05a   YEJING                                                               12/05/2008 16:15:22 PAGE 1   


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

line level    source

   1          /*-------------------------------------------------------------------
   2                                LCD1602.c      1602用的函数
   3                
   4                          作者:liunian     
   5          
   6                          邮箱:liunian_leon@sohu.com
   7          
   8                          日期:2008.7.13
   9                        
  10                          版本:V1.0 适合初学者使用
  11          -------------------------------------------------------------------*/
  12          
  13          #include<reg51.h>
  14          #include<absacc.h>
  15          #include<intrins.h>
  16          
  17          
  18          #define uint unsigned int
  19          #define uchar unsigned char
  20          
  21          sbit EN=P1^7;         //使能信号
  22          sbit RW=P1^6;         //读写控制信号
  23          sbit RS=P1^5;         //数据命令选择端口
  24          #define D_port P0      //传送数据的端口设为P0,以上端口根据实际硬件电路图可做修改
  25          
  26          
  27          
  28          
  29          /****************延时函数******************************/
  30          
  31          delay(uint k)
  32          {
  33   1          uint i,j;
  34   1          for(i=0;i<k;i++)
  35   1          {
  36   2              for(j=0;j<60;j++){;}
  37   2          }
  38   1      }
  39          
  40          
  41          
  42          
  43          /****************查询液晶是否忙*************************/
  44          
  45          Checkbusy()
  46          {   
  47   1          
  48   1          D_port=0xff;                   //P0全部置1,可以查询判断P0口状态,读取液晶的命令
  49   1          RS=0;
  50   1          RW=1;
  51   1          EN=1;
  52   1          _nop_();                       //读液晶命令时各控制位的状态几时序
  53   1          while(D_port&0x80)             //判断最高位状态,最高位是液晶忙的状态位
  54   1          {
  55   2              EN=0;
C51 COMPILER V8.05a   YEJING                                                               12/05/2008 16:15:22 PAGE 2   

  56   2              _nop_();
  57   2              _nop_();
  58   2              EN=1;
  59   2              _nop_();
  60   2              _nop_();
  61   2          }                             //如果液晶忙,则循环查询
  62   1          EN=0;
  63   1      
  64   1      }
  65          
  66          /****************写数据到液晶***************************/
  67          
  68          D_write(uchar a)
  69          {    
  70   1           Checkbusy();        //检查忙标志位
  71   1           D_port=a;
  72   1           RS=1;               
  73   1           RW=0;
  74   1           EN=1;               //写数据各控制位的值既对应的时序
  75   1           _nop_();
  76   1           _nop_();
  77   1           _nop_();           //发送数据,此处是发送到P0口,程序前已经定义
  78   1           EN=0;
  79   1      }
  80          
  81          /****************写指令到液晶***************************/
  82          
  83          C_write(uchar a)
  84          {
  85   1           Checkbusy();        //检查忙标志位
  86   1           D_port=a;
  87   1           RS=0;
  88   1           RW=0;
  89   1           EN=1;               //写指令各控制位的值既对应的时序
  90   1           
  91   1           _nop_();
  92   1           _nop_();
  93   1           _nop_();           //发送指令,此处是发送到P0口,程序前已经定义
  94   1           EN=0;
  95   1      }
  96          
  97          /***************液晶初始化******************************/
  98          
  99          Initial()
 100          {
 101   1           D_port=0;
 102   1           delay(20);
 103   1           C_write(0x38);
 104   1           delay(10);
 105   1           C_write(0x38);
 106   1           delay(10);
 107   1           C_write(0x38);
 108   1           delay(10);
 109   1           Checkbusy();
 110   1           C_write(0x38);
 111   1           Checkbusy();
 112   1           C_write(0x08);        //关闭显示
 113   1           Checkbusy();       
 114   1           C_write(0x01);        //清屏
 115   1           Checkbusy();
 116   1           C_write(0x06);        //显示光标右移设置
 117   1           Checkbusy();
C51 COMPILER V8.05a   YEJING                                                               12/05/2008 16:15:22 PAGE 3   

 118   1           C_write(0x0c);        //显示开,光标不显示,不闪烁
 119   1           delay(5);
 120   1      }                          //根据1602初始化的指令顺序来初始化LCD,相关初始化步骤可查阅相关资料
 121          
 122          /***************设定显示位置函数************************/
 123          
 124          setpos(uchar posx,uchar posy)
 125          {
 126   1           posx=posx&0xf;                         //将显示在第几位置转为二十六进制,每行总共16个位置
 127   1           posy=posy&0x1;                         //设置显示在第几行 
 128   1           C_write(posx|posy*0x40+0x80);          //设置位置命令最高位必须为一,所以要加0x80
 129   1      }
 130          
 131          
 132          /***************显示一个字符子程序**********************/
 133          
 134          displaychar(uchar x,uchar y,uchar a)
 135          {   
 136   1           Checkbusy();          //检查忙标志位
 137   1           setpos(x,y);          //设置显示位置
 138   1           D_write(a);           //将要显示的数据写到液晶
 139   1      }
 140          
 141          /***************显示一串字符串**************************/
 142          
 143          displaystring(uchar x,uchar y,unsigned char code *string)
 144          {
 145   1           uchar length=0;       //定义一个字符串长度
 146   1           Checkbusy();          
 147   1           while(string[length]!='\0')     //字符串是以'\0'结束的,因此只要每结束就显示下一字符
 148   1           {
 149   2           displaychar(x,y,string[length++]);  //显示一个字符子程序
 150   2           x++;                               //液晶显示的位置+1
 151   2           }
 152   1      }
 153          
 154          /*********************主程序 ***************************************/
 155           main()
 156           {
 157   1       Initial();
 158   1       
 159   1        displaychar(5, 0, 0x31);
 160   1               while(1);
 161   1              
 162   1              }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    266    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   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 + -