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

📄 lcd.lst

📁 操作DS18B20器件并且在1602上显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   LCD                                                                  10/07/2008 19:46:54 PAGE 1   


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

line level    source

   1          /******************************************************************************/
   2          /**
   3          /** 模 块 名: -------------------Virtual_UART.C-----------------------------
   4          /**            -----------------虚拟串口调试------------------------------*/
   5          /** 功能描述: 
   6          /**
   7          /** 创 建 人: huangtiexiong    日期:2006-11-28   */
   8          /** 修 改 人:                  日期:2006-11-28   */ 
   9          /** 其他说明: 
  10          /******************************************************************************/
  11          
  12          #include "Includes.h"
  13          
  14          
  15          /*************************************************
  16              模块级变量申明                 
  17          *************************************************/
  18          static void     LCD_WriteDat(int8u lcd_dat);
  19          static void     LCD_WriteCmd(int8u lcd_cmd);
  20          static int8u    LCD_ReadStatus(void);
  21          static void     LCD_Goto(int8u x,int8u y);
  22          
  23          /*******************************************************************************
  24          *** 函 数 名: void main(void)
  25          *** 功能描述: 
  26          *** 全局变量: 
  27          *** 输          入: 
  28          *** 输          出: 
  29          *** 创 建 人:huangtiexiong                       日期:2006-11-28
  30          *** 修 改 人:                                                                          日期:2006-11-28
  31          *** 函数说明: 
  32          /******************************************************************************/
  33          extern void     LCD_Init(void)
  34          {
  35   1              Delay20ms();
  36   1        LCD_WriteCmd(0x38);   //功能设置:8位机接口、双行显示、5×7字符点阵;
  37   1              LCD_WriteCmd(0x0c);     //显示控制:光标开启、字符不闪烁;
  38   1              LCD_WriteCmd(0x01);     //清屏;
  39   1              LCD_WriteCmd(0x06);     //访问模式:光标右移一位、整屏不移动;
  40   1        LCD_Goto(0,0);
  41   1              }
  42          static void     LCD_WriteDat(int8u lcd_dat)
  43          {
  44   1              int8u tmp;
  45   1              tmp = LCD_ReadStatus();         //读状态;
  46   1              while((tmp & 0x80))                     //是否忙 ?      用来看其中的一位,应该是第12位,一直读直到不忙
  47   1                      {
  48   2                              tmp = LCD_ReadStatus();
  49   2                              }
  50   1              #if 0
                      LCD_RS = 1;
                      LCD_RW = 0;
                      LCD_EN = 1;
                _nop_();
                _nop_();
C51 COMPILER V8.05a   LCD                                                                  10/07/2008 19:46:54 PAGE 2   

                      LCD_DATA = lcd_dat;
                _nop_();
                _nop_();
                      LCD_EN = 0;             
                      #endif
  61   1              LCD_RS = 1;
  62   1              LCD_RW = 0;
  63   1              LCD_DATA = lcd_dat;
  64   1              _nop_();
  65   1              LCD_EN = 0;
  66   1              _nop_();
  67   1              _nop_();
  68   1              LCD_EN = 1;
  69   1              
  70   1              }
  71          static void     LCD_WriteCmd(int8u lcd_cmd)
  72          {
  73   1              int8u tmp;
  74   1              tmp = LCD_ReadStatus();
  75   1              while((tmp & 0x80))
  76   1              {
  77   2                      tmp = LCD_ReadStatus();
  78   2                      }
  79   1              #if 0
                      LCD_RS = 0;
                      LCD_RW = 0;
                      LCD_EN = 1;
                _nop_();
                _nop_();
                      LCD_DATA = lcd_cmd;
                _nop_();
                _nop_();
                      LCD_EN = 0;     
                      #endif
  90   1              LCD_RS = 0;
  91   1              LCD_RW = 0;
  92   1              LCD_DATA = lcd_cmd;
  93   1              _nop_();
  94   1              LCD_EN = 0;
  95   1              _nop_();
  96   1              _nop_();
  97   1              LCD_EN = 1;
  98   1              }
  99          static int8u    LCD_ReadStatus(void)
 100          {
 101   1              int8u tmp;
 102   1              #if 0
                      LCD_RS = 0;
                      LCD_RW = 1;
                      LCD_EN = 1;
                      tmp = LCD_DATA;
                      LCD_EN = 0;
                      #endif
 109   1              LCD_DATA = 0xff;
 110   1              LCD_RS = 0;
 111   1              LCD_RW = 1;
 112   1              LCD_EN = 0;
 113   1              _nop_();
 114   1              _nop_();
 115   1              LCD_EN = 1;
 116   1              tmp = LCD_DATA;
 117   1              return tmp;
C51 COMPILER V8.05a   LCD                                                                  10/07/2008 19:46:54 PAGE 3   

 118   1              }
 119          static void     LCD_Goto(int8u x,int8u y)
 120          {
 121   1              int8u tmp;
 122   1              if(y)                           //若是第二行;
 123   1                      {
 124   2                              tmp = 0xc0 + x;
 125   2                              LCD_WriteCmd(tmp);
 126   2                              }
 127   1              else
 128   1                      {
 129   2                              tmp = 0x80 + x;
 130   2                              LCD_WriteCmd(tmp);
 131   2                              }               
 132   1              }
 133          
 134          
 135          #if 0
              extern void LCD_DisplayShiftR(void)                             //整屏右移;
              {
                      LCD_WriteCmd(0x1f);
                      }
              
              extern void LCD_DisplayShiftL(void)                             //整屏左移;
              {
                      LCD_WriteCmd(0x18);
                      }
              #endif
 146                  
 147          extern void LCD_Display(int8u row,int8u *str)
 148          {
 149   1              if(row)
 150   1                      {
 151   2                              LCD_Goto(0,1);
 152   2                              }
 153   1        else 
 154   1              {
 155   2                      LCD_Goto(0,0);
 156   2                      }
 157   1        while(*str != '\0')
 158   1        {
 159   2              LCD_WriteDat(*str++);
 160   2              }
 161   1              }
 162          
 163          #if 0
              extern void LCD_Display(int8u x,int8u y,int8u disp_dat)
              {
                      LCD_Goto(x,y);
                      LCD_WriteDat(disp_dat);
                      }
              #endif
 170          
 171          #if 0   
              extern void     LCD_Display(int8u disp_dat)
              {
                      int8u tmp;
                      tmp = LCD_ReadStatus();
                      tmp &= 0x7f;  
                      if(tmp == 0x10)                 //第一行显示满则转向第二行;
                              {
                                      LCD_Goto(0,1);
C51 COMPILER V8.05a   LCD                                                                  10/07/2008 19:46:54 PAGE 4   

                                      }
                      if(tmp == 0x50)                 //全屏显示满则清屏;
                              {
                                      LCD_WriteCmd(0x01);
                                      }
                      LCD_WriteDat(disp_dat);         //将接收字符显示在LCD屏上;
                      }
              #endif
 188          
 189          extern void Delay20ms()   //粗略延时;
 190          {
 191   1        int16u tmp = 50000;
 192   1        while(tmp--);
 193   1        }
 194          /*******************************************************************************
 195          ****                              End Of File
 196          *******************************************************************************/
C51 COMPILER V8.05a   LCD                                                                  10/07/2008 19:46:54 PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION LCD_Init (BEGIN)
                                           ; SOURCE LINE # 33
                                           ; SOURCE LINE # 34
                                           ; SOURCE LINE # 35
0000 120000      R     LCALL   Delay20ms
                                           ; SOURCE LINE # 36
0003 7F38              MOV     R7,#038H
0005 120000      R     LCALL   _LCD_WriteCmd
                                           ; SOURCE LINE # 37
0008 7F0C              MOV     R7,#0CH
000A 120000      R     LCALL   _LCD_WriteCmd
                                           ; SOURCE LINE # 38
000D 7F01              MOV     R7,#01H
000F 120000      R     LCALL   _LCD_WriteCmd
                                           ; SOURCE LINE # 39
0012 7F06              MOV     R7,#06H
0014 120000      R     LCALL   _LCD_WriteCmd
                                           ; SOURCE LINE # 40

⌨️ 快捷键说明

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