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

📄 text2.lst

📁 已通过验试
💻 LST
字号:
C51 COMPILER V7.20   TEXT2                                                                 05/13/2009 19:07:15 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: E:\单片机原理与应用\实验内容\Keil 绿色版\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //带中文字库的12864LCD显示程序
   2          #include <reg52.H>
   3          #include <intrins.H>
   4          
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          
   8          sbit dula = P2^6;
   9          sbit wela = P2^7;
  10          //SCM12864-05端口定义
  11          #define LCD_DATA P0 //数据口
  12          sbit RS = P2^0; //并行的指令/数据选择信号, H数据, L命令
  13          sbit RW = P2^1; //并行读写选择信号, H读, L写
  14          sbit E = P2^2; //并行使能端, H有效, L无效
  15          sbit PSB = P2^3; //并/串接口选择, H并,L串
  16          sbit RET = P1^0; //复位, L有效
  17          //sbit CS1= P2^4;
  18          //sbit CS2=P2^5;
  19          
  20          uchar code datas1[] = {"广东工业大学"};
  21          uchar code datas2[] = {"自动化学院2004级"};
  22          uchar code datas3[] = {"网络工程 (4)班"};
  23          uchar code datas4[] = {"fengmk2@gmail.com"};
  24          
  25          //延时约2us
  26          void delayUs()
  27          {
  28   1          _nop_();_nop_();
  29   1      }
  30          //延时 a * 1ms
  31          void delayMs(uint a)
  32          {
  33   1          uint i, j;
  34   1          for(i = a; i > 0; i--)
  35   1              for(j = 100; j > 0; j--);
  36   1      }
  37          
  38          //检测LCD是否处于忙状态, 若忙返回1, 空闲返回0
  39          bit checkBusy()
  40          {
  41   1          bit busy;
  42   1          RS = 0;
  43   1          RW = 1;
  44   1          E = 1;
  45   1          delayUs();
  46   1          busy = (bit)(LCD_DATA&0x80);
  47   1          E = 0;
  48   1          return busy;
  49   1      }
  50          
  51          //等待LCD到空闲
  52          void wait()
  53          {
  54   1          while(checkBusy());
  55   1      }
C51 COMPILER V7.20   TEXT2                                                                 05/13/2009 19:07:15 PAGE 2   

  56          
  57          //写命令
  58          void writeCmd(uchar cmd)
  59          {
  60   1          wait();
  61   1          RS = 0;
  62   1          RW = 0;
  63   1          E = 0;
  64   1          delayUs();
  65   1          LCD_DATA = cmd;
  66   1          delayUs();
  67   1          E = 1;
  68   1          delayUs();
  69   1          E = 0;
  70   1      }
  71          
  72          //写数据
  73          void writeData(uchar dat)
  74          {
  75   1          wait();
  76   1          RS = 1;
  77   1          RW = 0;
  78   1          E = 0;
  79   1          delayUs();
  80   1          LCD_DATA = dat;
  81   1          delayUs();
  82   1          E = 1;
  83   1          delayUs();
  84   1          E = 0;
  85   1      }
  86          
  87          //初始化LCD
  88          void init()
  89          {
  90   1          PSB = 1; //并口方式
  91   1          writeCmd(0x30); //基本指令, 扩充指令为34H
  92   1          delayMs(10);
  93   1          writeCmd(0x0c); //显示开, 关光标
  94   1          delayMs(10);
  95   1          writeCmd(0x01); //清屏
  96   1          delayMs(10);
  97   1      }
  98          
  99          void setPosition(uchar x, uchar y)
 100          {       uchar pos;
 101   1        if(x==0)
 102   1        {x=0x80;}
 103   1        else if (x==1)
 104   1        {x=0x90;}
 105   1        else if (x==2)
 106   1        {x=0x88;}
 107   1        else if (x==3)
 108   1        {x=0x98;}
 109   1        pos=x+y;
 110   1        writeCmd(pos);
 111   1         /* uchar p;
 112   1          switch(x%4)
 113   1          {
 114   1              case 0: p = 0x80; break; //第一行开始地址
 115   1              case 1: p = 0x90; break; //第二行
 116   1              case 2: p = 0x88; break; //第三行
 117   1              case 3: p = 0x98; break; //第四行
C51 COMPILER V7.20   TEXT2                                                                 05/13/2009 19:07:15 PAGE 3   

 118   1          }
 119   1          p += y;
 120   1          writeCmd(p); */
 121   1      }
 122          
 123          void writeString(uchar * str)
 124          {
 125   1          uchar i = 0;
 126   1          while(str[i] != '\0')
 127   1          {
 128   2              writeData(str[i++]);
 129   2          }
 130   1      }
 131          
 132          /**//***************************LCD12864***************************************/
 133          
 134          void main()
 135          {
 136   1          //先关闭数码管, 使两个锁存器锁存, 因开了数码管, USB电压驱动不够, 将无法使LCD正常工作
 137   1          dula = wela = 0;
 138   1          init();
 139   1          setPosition(0, 0);
 140   1          writeString(datas1);
 141   1          setPosition(1, 0);
 142   1          writeString(datas2);
 143   1          setPosition(2, 0);
 144   1          writeString(datas3);
 145   1          setPosition(3, 0);
 146   1          writeString(datas4);
 147   1          while(1);
 148   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    272    ----
   CONSTANT SIZE    =     63    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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