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

📄 lcd1602.lst

📁 LCD 显示变量的功能 字符很简单 显示变量要一位一位的
💻 LST
字号:
C51 COMPILER V8.02   LCD1602                                                               08/30/2008 17:20:03 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********************************************************************  
   2          * 标题: 1602简单驱动(C)  
   3          * 文件: LCD1602.c  
   4          * 作者: 机器人DIY工作室   
   5          * 日期: 2008.7.15  
   6          * 修改: 2008.7.25  
   7          * 软件: Keil C51 V8.02  
   8          * 芯片: AT89X52  
   9          * 说明: 硬件连接定义在LCD1602.H中    
  10          *********************************************************************/  
  11            
  12          #include <LCD1602.H>   
  13            
  14          // 本地函数   
  15            
  16          void lcd_delay_us(unsigned char us) // 延时微秒@12M,ms最大值255   
  17          {   
  18   1          while(--us)   
  19   1          {   
  20   2              ;   
  21   2          }   
  22   1      }   
  23            
  24          void lcd_delay_ms(unsigned char ms) // 延时毫秒@12M,ms最大值255   
  25          {      
  26   1          unsigned char i;   
  27   1          while(ms--)   
  28   1          {   
  29   2              for(i = 0; i < 124; i++)   
  30   2              {   
  31   3                  ;   
  32   3              }   
  33   2          }   
  34   1      }   
  35            
  36            
  37          // 产生一个使能脉冲   
  38            
  39          void lcd_e_toggle(void)   
  40          {   
  41   1          LCD_E = 1;   
  42   1          lcd_delay_us(3);   
  43   1          LCD_E = 0;   
  44   1      }   
  45            
  46            
  47          // 循环检测LCD忙标志(BF),直到其值为0,方可执行下一指令   
  48            
  49          void lcd_wait_until_finish(void)   
  50          {   
  51   1          LCD_RW = 1;              // RW置1,状态为读   
  52   1          LCD_RS = 0;              // RS置0,读状态时RS需置低电平       
  53   1          LCD_E = 1;               // E 置1,读取信息   
  54   1             
  55   1          while(LCD_BF)            // 循环直至BF=0   
C51 COMPILER V8.02   LCD1602                                                               08/30/2008 17:20:03 PAGE 2   

  56   1          {   
  57   2              ;   
  58   2          }   
  59   1          LCD_E = 0;               // E重置为0   
  60   1      }   
  61            
  62            
  63          // 公共函数   
  64            
  65          // 向LCD写命令字   
  66            
  67          void lcd_command(unsigned char cmd)   
  68          {   
  69   1          LCD_RW = 0;              // RW置0,状态为写   
  70   1          LCD_RS = 0;              // RS置0,写入命令字   
  71   1             
  72   1          LCD_DATA_PORT = cmd;     // 将命令字cmd送入LCD的数据端口   
  73   1          lcd_e_toggle();          // 产生使能脉冲,在下降沿开始执行,将命令字读入   
  74   1          lcd_wait_until_finish(); // 等待执行完毕   
  75   1      }   
  76            
  77            
  78          // 设置显示位置(即写入显示地址),x,y均从0开始   
  79            
  80          void lcd_goto_xy(unsigned char x, unsigned char y)   
  81          {   
  82   1          unsigned char p;       // p为字符显示位置,即DDRAM中的地址   
  83   1          if (y==0)   
  84   1          {   
  85   2              p = 0x00 + x;      // (0,0)显示位置为0x00   
  86   2          }   
  87   1          else  
  88   1          {   
  89   2              p = 0x40 + x;      // (0,1)显示位置为0x40   
  90   2          }   
  91   1          lcd_command(p + 0x80); // 写入显示地址时DB7须为高电平,加0x80   
  92   1          lcd_command(p + 0x80); // 写入显示地址时DB7须为高电平,加0x80   
  93   1      }   
  94            
  95            
  96          // 写字符(传入的参数实际为所需显示字符的地址,即液晶字符产生器中字符的地址)   
  97            
  98          void lcd_putc(unsigned char c)   
  99          {   
 100   1          LCD_RW = 0;               // RW置0,状态为写   
 101   1          LCD_RS = 1;               // RS置1,写入数据   
 102   1             
 103   1          LCD_DATA_PORT = c;        // 将字符c(实际上是字符的地址)送入LCD数据端口   
 104   1          lcd_e_toggle();           // 使能脉冲   
 105   1          lcd_wait_until_finish();  // 等待完成   
 106   1      }   
 107            
 108            
 109          // 指定位置写字符   
 110            
 111          void lcd_xy_putc(unsigned char x, unsigned char y, unsigned char c)   
 112          {   
 113   1          lcd_goto_xy(x,y);   
 114   1          lcd_putc(c);   
 115   1      }   
 116            
 117            
C51 COMPILER V8.02   LCD1602                                                               08/30/2008 17:20:03 PAGE 3   

 118          // 写字符串   
 119            
 120          void lcd_puts(unsigned char *s)   
 121          {   
 122   1          while(*s)   
 123   1          {   
 124   2              lcd_putc(*s);   
 125   2              s++;   
 126   2          }   
 127   1      }   
 128            
 129            
 130          // 指定位置写字符串   
 131            
 132          void lcd_xy_puts(unsigned char x, unsigned char y, unsigned char *s)   
 133          {   
 134   1          lcd_goto_xy(x, y);   
 135   1          lcd_puts(s);   
 136   1      }   
 137            
 138          // LCD初始化   
 139            
 140          void lcd_init(void)   
 141          {   
 142   1          lcd_delay_ms(12);          // 上电后适当延时   
 143   1          lcd_command(0x38);         // 设为8位接口模式,显示2行字符   
 144   1          lcd_command(0x06);         // 写入新数据后光标右移   
 145   1          lcd_command(0x0c);         // 显示功能开,不显示光标   
 146   1          lcd_command(0x01);         // 清屏   
 147   1      } 
 148          
 149          //把一个十六进制数转化成一个十进制数,返回值放在一个数组里面
 150          char *convert(unsigned int outData)
 151          {
 152   1      unsigned char strTemp[5];
 153   1      strTemp[0]= (unsigned char)(((outData / 10000)% 10) + 0x30);
 154   1      strTemp[1] = (unsigned char)(((outData / 1000) % 10) + 0x30);
 155   1      strTemp[2] = (unsigned char)(((outData / 100) % 10) + 0x30);
 156   1      strTemp[3] =(unsigned char)(((outData / 10) % 10) + 0x30);
 157   1      strTemp[4]=(unsigned char)((outData % 10) + 0x30);
 158   1      return strTemp;
 159   1      }
 160          
 161          
 162          
 163          
 164          
 165          
 166          
 167          
 168          
 169          
 170          
 171          
 172          
 173          
 174          
 175          
 176          
 177          
 178          
 179            
C51 COMPILER V8.02   LCD1602                                                               08/30/2008 17:20:03 PAGE 4   



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