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

📄 main.lst

📁 c8051学习机实验程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  MAIN                                                                   09/23/2005 15:07:28 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <c8051f020.h>
   2          #include <absacc.h>
   3          
   4          extern void config (void);
   5          //////////////////////////////////////////////
   6          #define UINT8 unsigned char
   7          #define INT8 char
   8          #define UINT16 unsigned int
   9          #define INT16 int
  10          #define FP32    float
  11          ////////////////////////////////////
  12          #define DAT_ADDR  0xFC00
  13          #define COD_ADDR  0xFD00
  14          #define LCD_DAT   XBYTE[DAT_ADDR]   //数据接口
  15          #define LCD_CODE  XBYTE[COD_ADDR]   //指令接口
  16          // T6963C 命令定义
  17          #define LCD_CUR_POS  0x21 // 光标位置设置
  18          #define LCD_CGR_POS  0x22 // CGRAM偏置地址设置
  19          #define LCD_ADDR_POS  0x24 // 地址指针位置
  20          #define LCD_TXT_STP  0x40 // 文本区首址
  21          #define LCD_TXT_WID  0x41 // 文本区宽度
  22          #define LCD_GRH_STP  0x42 // 图形区首址
  23          #define LCD_GRH_WID  0x43 // 图形区宽度
  24          #define LCD_MOD_OR   0x80 // 显示方式:逻辑"或"
  25          #define LCD_MOD_XOR  0x81 // 显示方式:逻辑"异或"
  26          #define LCD_MOD_AND  0x82 // 显示方式:逻辑"与"
  27          #define LCD_MOD_TCH  0x83 // 显示方式:文本特征
  28          #define LCD_DIS_SW   0x90 // 显示开关:D0=1/0:光标闪烁启用/禁用;
  29          // D1=1/0:光标显示启用/禁用;
  30          // D2=1/0:文本显示启用/禁用;
  31          // D3=1/0:图形显示启用/禁用;
  32          #define LCD_CUR_SHP 0xA0 // 光标形状选择:0xA0-0xA7 表示光标占的行数
  33          #define LCD_AUTO_WR 0xB0 // 自动写设置
  34          #define LCD_AUTO_RD 0xB1 // 自动读设置
  35          #define LCD_AUTO_OVER 0xB2 // 自动读/写结束
  36          #define LCD_INC_WR 0xC0 // 数据一次写,地址加1
  37          #define LCD_INC_RD 0xC1 // 数据一次读,地址加1
  38          #define LCD_DEC_WR 0xC2 // 数据一次写,地址减1
  39          #define LCD_DEC_RD 0xC3 // 数据一次读,地址减1
  40          #define LCD_NOC_WR 0xC4 // 数据一次写,地址不变
  41          #define LCD_NOC_RD 0xC5 // 数据一次读,地址不变
  42          #define LCD_SCN_RD 0xE0 // 屏读
  43          #define LCD_SCN_CP 0xE8 // 屏拷贝
  44          #define LCD_BIT_OP 0xF0 // 位操作:D0-D2:定义D0-D7 位;D3:1 置位;0:清除
  45          ////////////////////////////////////////////////////////////////////
  46          #define MAX_VERTICAL_DOT 128
  47          #define MAX_HORIZON_DOT 150
  48          #define MAX_SAMPLE  255
  49          ///////////////////////////////////////////////////////////////////
  50          UINT8 code DIS_CTRL[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  51          ///////////////////////////////////////////////////////////////////
  52          UINT8 code A[16] = {
  53          /*a    */
  54          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00
  55          
C51 COMPILER V7.01  MAIN                                                                   09/23/2005 15:07:28 PAGE 2   

  56          };
  57          extern void config (void);
  58          //**********************************************************
  59          //********子函数**************
  60          //判断状态为STA0(指令读写)和STA1(数据读写)
  61          void LcdRWCheck()
  62          {
  63   1          while((LCD_CODE&0X03)!=0X03)
  64   1          {;}
  65   1      }
  66          //判断自动读状态STA2
  67          void LcdAutoRCheck()
  68          {
  69   1          while((LCD_CODE&0X04)!=0X04)
  70   1          {;}
  71   1      }
  72          //判断自动写状态STA3
  73          void LcdAutoWCheck()
  74          {
  75   1          while((LCD_CODE&0X08)!=0X08)
  76   1          {;}
  77   1      }
  78          //写无参数命令
  79          void WrCmdNoP(UINT8 cmd)
  80          {
  81   1          LcdRWCheck();
  82   1          LCD_CODE=cmd;
  83   1      }
  84          //写一个参数的命令
  85          void WrCmdOneP(UINT8 dat,UINT8 cmd)
  86          {
  87   1          LcdRWCheck();
  88   1          LCD_DAT=dat;
  89   1          LcdRWCheck();
  90   1          LCD_CODE=cmd;
  91   1      }
  92          //写两个参数的命令
  93          void WrCmdTwoP(UINT8 dat1,UINT8 dat2,UINT8 cmd)
  94          {
  95   1          LcdRWCheck();
  96   1          LCD_DAT=dat1;
  97   1          LcdRWCheck();
  98   1          LCD_DAT=dat2;
  99   1          LcdRWCheck();
 100   1          LCD_CODE=cmd;
 101   1      }
 102          
 103          //自动写
 104          void DatAutoWr(UINT8 dat)
 105          {
 106   1          LcdAutoWCheck();
 107   1          LCD_DAT=dat;
 108   1      }
 109          //数据自动读
 110          UINT8 DatAutoRd()
 111          {
 112   1          UINT8 dat;
 113   1          LcdAutoRCheck();
 114   1          dat=LCD_DAT;
 115   1          return dat;
 116   1      }
 117          //清屏
C51 COMPILER V7.01  MAIN                                                                   09/23/2005 15:07:28 PAGE 3   

 118          void ClearDisplay()
 119          {
 120   1          UINT16 i;
 121   1          WrCmdTwoP(0,0,LCD_ADDR_POS);
 122   1          WrCmdNoP(LCD_AUTO_WR);
 123   1          for(i=0;i<30*128;i++)
 124   1          {
 125   2              DatAutoWr(0x00);
 126   2          }
 127   1          WrCmdNoP(LCD_AUTO_OVER);
 128   1      }
 129          //读任意处的值
 130          UINT8 ReadAny(UINT8 v_Row, UINT8 v_Col)
 131          {
 132   1          UINT8 v_Dat;
 133   1          UINT16 v_Addr;
 134   1          v_Addr=v_Row*30+v_Col;
 135   1          WrCmdTwoP(v_Addr&0xff,v_Addr/256,LCD_ADDR_POS);
 136   1      
 137   1      (LCD_NOC_RD);
*** WARNING C275 IN LINE 137 OF MAIN.C: expression with possibly no effect
 138   1          v_Dat=LCD_DAT;
 139   1          return v_Dat;
 140   1      }
 141          //在任意处显示任意值
 142          void DisplayAny(UINT8 v_Row,UINT8 v_Col,UINT8 v_Dat)
 143          {
 144   1          UINT16 v_Addr;
 145   1          v_Addr=v_Row*30+v_Col;
 146   1          WrCmdTwoP(v_Addr&0xff,v_Addr/256,LCD_ADDR_POS);
 147   1          WrCmdOneP(v_Dat,LCD_NOC_WR);
 148   1      }
 149          
 150          //显示英文字母(8*16)
 151          void DisplayChar(UINT8 row,UINT8 col,UINT8 *ch,UINT8 height)
 152          {
 153   1          UINT8 i;
 154   1          UINT16 addr;
 155   1          addr=row*30+col;
 156   1          WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
 157   1          for(i=0;i<height;i++)
 158   1          {
 159   2              WrCmdOneP(ch[i],LCD_NOC_WR);
 160   2              addr+=30;
 161   2              WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
 162   2          }
 163   1      }
 164          //显示汉字
 165          void DisplayChn(UINT8 row,UINT8 col,UINT8 *chn)
 166          {
 167   1          UINT8 i;
 168   1          UINT16 addr;
 169   1          addr=row*30+col;
 170   1          WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
 171   1          for(i=0;i<16;i++)
 172   1          {
 173   2              WrCmdOneP(chn[i],LCD_NOC_WR);
 174   2              addr+=30;
 175   2              WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
 176   2          }
 177   1          addr=row*30+col+1;
 178   1          WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
C51 COMPILER V7.01  MAIN                                                                   09/23/2005 15:07:28 PAGE 4   

⌨️ 快捷键说明

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