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

📄 16021.lst

📁 1602显示程序(51版)
💻 LST
字号:
C51 COMPILER V9.00   16021                                                                 08/18/2010 01:29:03 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE 16021
OBJECT MODULE PLACED IN 16021.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 16021.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "REG51.h"
   2          #include "intrins.h" //包含此头文件可直接操作内核的寄存器以及一些定义好的宏
   3          // this file for MCU I/O port or the orther`s hardware config
   4          // for LCD Display
   5          // Define for the port use by LCD Driver
   6          sbit LCD_EP=P2^7;
   7          sbit LCD_RW=P2^6;
   8          sbit LCD_RS=P2^5;
   9          #define LCD_Data_BUS_Out P1
  10          #define LCD_Data_BUS_In P1
  11          code unsigned char LCD_InitialCode[]={0x30,0x30,0x30,0x38,0x01,0x06,0x0c};
  12          //========================================================================
  13          // 函数: void LCD_DataWrite(unsigned char Data)
  14          // 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
  15          // 参数: Data 写入的数据
  16          // 返回: 无
  17          //========================================================================
  18          void LCD_DataWrite(unsigned char Data)
  19          {
  20   1      unsigned int Read_Dat=0;
  21   1      LCD_EP = 0; //EP、RS端口为低,RW为高
  22   1      LCD_RS = 0;
  23   1      LCD_RW = 1;
  24   1      do{
  25   2      LCD_Data_BUS_In = 0xff;
  26   2      LCD_EP = 1;
  27   2      Read_Dat = LCD_Data_BUS_In&0x80;
  28   2      LCD_EP = 0;
  29   2      }while(Read_Dat!=0); //读状态字并判断是否可进行读写操作
  30   1      LCD_RW = 0; //EP RW to Low
  31   1      LCD_RS = 1; //RS Hight
  32   1      LCD_Data_BUS_Out = Data;
  33   1      LCD_EP = 1; //EP to Hight
  34   1      LCD_EP = 0; //EP to low
  35   1      }
  36          //========================================================================
  37          // 函数: void LCD_RegWrite(unsigned char Command)
  38          // 描述: 写一个字节的数据至LCD中的控制寄存器当中
  39          // 参数: Command 写入的数据(byte)
  40          // 返回: 无
  41          //========================================================================
  42          void LCD_RegWrite(unsigned char Command)
  43          {
  44   1      unsigned int Read_Dat=0;
  45   1      LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
  46   1      LCD_RS = 0;
  47   1      LCD_RW = 1;
  48   1      do{
  49   2                      LCD_Data_BUS_In = 0xff;
  50   2      LCD_EP = 1;
  51   2      Read_Dat = LCD_Data_BUS_In&0x80;
  52   2      LCD_EP = 0;
  53   2      }while(Read_Dat!=0); //读状态字并判断是否可进行读写操作
  54   1      LCD_RW = 0; //RW to Low,表为写指令
  55   1      LCD_Data_BUS_Out = Command;
C51 COMPILER V9.00   16021                                                                 08/18/2010 01:29:03 PAGE 2   

  56   1      LCD_EP = 1; //EP to Hight
  57   1      LCD_EP = 0;
  58   1      }
  59          //========================================================================
  60          // 函数: unsigned char LCD_DataRead(void)
  61          // 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
  62          // 参数: 无
  63          // 返回: 读出的数据,低八位有效(byte)
  64          //========================================================================
  65          unsigned char LCD_DataRead(void)
  66          {
  67   1      unsigned char Read_Dat=0;
  68   1      LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
  69   1      LCD_RS = 0;
  70   1      LCD_RW = 1;
  71   1      do{
  72   2      LCD_Data_BUS_In = 0xff;
  73   2      LCD_EP = 1;
  74   2      Read_Dat = LCD_Data_BUS_In&0x80;
  75   2      LCD_EP = 0;
  76   2      }while(Read_Dat!=0); //读状态字并判断是否可进行读写操作
  77   1      LCD_RS = 1; //RS置高,表为读数据
  78   1      LCD_EP = 1; //EP to Hight
  79   1      Read_Dat = LCD_Data_BUS_In; //读出数据
  80   1      LCD_EP = 0;
  81   1      return Read_Dat;
  82   1      }
  83          //========================================================================
  84          // 函数: unsigned char LCD_StatusRead(void)
  85          // 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
  86          // 参数: 无
  87          // 返回: 读出的数据,低八位有效(byte)
  88          //========================================================================
  89          unsigned char LCD_StatusRead(void)
  90          {
  91   1      unsigned char Read_Dat=0;
  92   1      LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
  93   1      LCD_RS = 0;
  94   1      LCD_RW = 1;
  95   1      LCD_Data_BUS_In = 0xff;
  96   1      LCD_EP = 1;
  97   1      Read_Dat = LCD_Data_BUS_In; //读状态字
  98   1      LCD_EP = 0;
  99   1      return Read_Dat;
 100   1      }
 101          //========================================================================
 102          // 函数: void LCD_Init(void)
 103          // 描述: LCD初始化程序,在里面会完成LCD初始所需要设置的许多寄存器,具体如果
 104          // 用户想了解,建议查看DataSheet当中各个寄存器的意义
 105          // 参数: 无
 106          // 返回: 无
 107          // 备注:
 108          // 版本:
 109          // 2007/11/14 First version
 110          //========================================================================
 111          //延时程序
 112          void TimeDelay(int Time)
 113          {
 114   1      int i;
 115   1      while(Time > 0)
 116   1      {
 117   2      for(i = 0;i < 800;i++)
C51 COMPILER V9.00   16021                                                                 08/18/2010 01:29:03 PAGE 3   

 118   2      {
 119   3      _nop_();
 120   3      }
 121   2      Time --;
 122   2      }
 123   1      }
 124          void LCD_Init(void)
 125          {
 126   1      unsigned char uiTemp=0,i;
 127   1      unsigned char * Point;
 128   1      //LCD驱动所使用到的端口的初始化
 129   1      Point = (unsigned char *)LCD_InitialCode; //获取初始化序列数据的首地址
 130   1      LCD_EP = 0;
 131   1      LCD_RS = 0;
 132   1      LCD_RW = 0;
 133   1      for(i=0;i<4;i++)
 134   1      {
 135   2      uiTemp = *Point++;
 136   2      LCD_Data_BUS_Out = uiTemp;
 137   2      LCD_EP = 1; //EP to Hight
 138   2      LCD_EP = 0; //EP to Hight
 139   2      TimeDelay(4); //延一定的时间,一般要求4.5ms以上就可以,没有那么严格的了
 140   2      }
 141   1      LCD_RegWrite(*Point++);
 142   1      LCD_RegWrite(*Point++);
 143   1      LCD_RegWrite(*Point++);
 144   1      }
 145          void main()
 146          {
 147   1      unsigned char uiTemp=0;
 148   1      unsigned char * String_s;
 149   1      LCD_Init();
 150   1      uiTemp = LCD_StatusRead(); //无意义,只是测试读状态字的子程序
 151   1      String_s = "LCD1602 Demo";
 152   1      LCD_RegWrite(0x80); //设置地址为第一行第一个字符的位置
 153   1      while(*String_s!=0) //显示字符串
 154   1      {
 155   2      LCD_DataWrite(*String_s);
 156   2      String_s++;
 157   2      }
 158   1      String_s = " Mzdesign";
 159   1      LCD_RegWrite(0xc0); //设置地址为第二行第一个字符的位置
 160   1      while(*String_s!=0)
 161   1      {
 162   2      LCD_DataWrite(*String_s);
 163   2      String_s++;
 164   2      }
 165   1      //以下仅为测试使用,测试读数据程序的功能
 166   1      uiTemp = LCD_DataRead(); //读数据
 167   1      LCD_RegWrite(0x80); //设置地址后再读数据
 168   1      uiTemp = LCD_DataRead();
 169   1      while(1)
 170   1      {
 171   2      ;
 172   2      }
 173   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    344    ----
   CONSTANT SIZE    =     30    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V9.00   16021                                                                 08/18/2010 01:29:03 PAGE 4   

   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 + -