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

📄 t6963b.lst

📁 c8051学习机实验程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.01  T6963B                                                                 03/31/2005 21:39:13 PAGE 1   


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

stmt level    source

   1          /*写汉字液晶子程 
   2          
   3            本例程未使用6963的文本模式,使用程序填入字模也足够快。程序以Youth所提供
   4          的51例程移植过来,同时对有些地方做了简化处理,增加了画线画圆的例程,好在
   5          6963的画点有专用指令,所以不用读屏就可以直接画点。
   6            
   7          ;************************************************************************
   8          ;连线图:  液晶屏分为8行*15列汉字,使用总线接口方式(C8051F020的高端口)   *
   9          ;*LCM---C8051*    *LCM---C8051*    *LCM----C8051*      *LCM----C8051*   *
  10          ;*DB0-----P70*    *DB4-----P74*    *Rd ------P46*      *C/D------P50*   *
  11          ;*DB1-----P71*    *DB5-----P75*    *Wr ------P47*      *CE ------P57*   *
  12          ;*DB2-----P72*    *DB6-----P76*    *RST------VCC*      *FS ------Vcc*   * 
  13          ;*DB3-----P73*    *DB7-----P77*                                         *
  14          ;注:C8051F020的晶振频率为22.1184MHz,发现偶尔会丢失数据 *
  15          ;************************************************************************/
  16          
  17          #include "stdhead.h"
  18          #include "zimo.h"
  19          
  20          //#define ulong unsigned long
  21          //#define uint  unsigned int
  22          //#define uchar unsigned char
  23          
  24          #define N_MAX_WAIT 10
  25          
  26          // ASCII字符控制代码解释定义
  27          #define STX     0x02
  28          #define ETX     0x03
  29          #define EOT     0x04
  30          #define ENQ     0x05
  31          #define BS      0x08
  32          #define CR      0x0D
  33          #define LF      0x0A
  34          #define DLE     0x10
  35          #define ETB     0x17
  36          #define SPACE   0x20
  37          #define COMMA   0x2C
  38                                  
  39          #define TRUE    1
  40          #define FALSE   0
  41                                  
  42          #define HIGH    1
  43          #define LOW     0
  44          
  45          // T6963C 端口定义
  46          #define LCMDW           XBYTE[0xfc00]           // 数据口
  47          #define LCMCW           XBYTE[0xfd00]           // 命令口
  48          
  49          
  50          // T6963C 命令定义
  51          #define LC_CUR_POS      0x21            // 光标位置设置
  52          #define LC_CGR_POS      0x22            // CGRAM偏置地址设置
  53          #define LC_ADD_POS      0x24            // 地址指针位置
  54          #define LC_TXT_STP      0x40            // 文本区首址
  55          #define LC_TXT_WID      0x41            // 文本区宽度
C51 COMPILER V7.01  T6963B                                                                 03/31/2005 21:39:13 PAGE 2   

  56          #define LC_GRH_STP      0x42            // 图形区首址
  57          #define LC_GRH_WID      0x43            // 图形区宽度
  58          #define LC_MOD_OR       0x80            // 显示方式:逻辑“或”
  59          #define LC_MOD_XOR      0x81            // 显示方式:逻辑“异或”
  60          #define LC_MOD_AND      0x82            // 显示方式:逻辑“与”
  61          #define LC_MOD_TCH      0x83            // 显示方式:文本特征
  62          #define LC_DIS_SW       0x90            // 显示开关:D0=1/0:光标闪烁启用/禁用;
  63                                                  // D1=1/0:光标显示启用/禁用;
  64                                                  // D2=1/0:文本显示启用/禁用;
  65                                                  // D3=1/0:图形显示启用/禁用;
  66          #define LC_CUR_SHP      0xA0            // 光标形状选择:0xA0-0xA7表示光标占的行数
  67          #define LC_AUT_WR       0xB0            // 自动写设置
  68          #define LC_AUT_RD       0xB1            // 自动读设置
  69          #define LC_AUT_OVR      0xB2            // 自动读/写结束
  70          #define LC_INC_WR       0xC0            // 数据一次写,地址加1
  71          #define LC_INC_RD       0xC1            // 数据一次读,地址加1
  72          #define LC_DEC_WR       0xC2            // 数据一次写,地址减1
  73          #define LC_DEC_RD       0xC3            // 数据一次读,地址减1
  74          #define LC_NOC_WR       0xC4            // 数据一次写,地址不变
  75          #define LC_NOC_RD       0xC5            // 数据一次读,地址不变
  76          #define LC_SCN_RD       0xE0            // 屏读
  77          #define LC_SCN_CP       0xE8            // 屏拷贝
  78          #define LC_BIT_OP       0xF0            // 位操作:
  79                                                  // D0-D2:定义D0-D7位;D3:1置位;0:清除
  80          
  81          //uchar const uPowArr[]  = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  82          uchar code turnf[8] = {7,6,5,4,3,2,1,0};
  83          uchar gCurRow,gCurCol;  // 当前行、列存储,行高16点,列宽8点
  84          uchar black = 0;
  85          /*  取当前行数据  */
  86          uchar fnGetRow(void)
  87          {
  88   1              return gCurRow;
  89   1      }
  90          
  91          /*  取当前列数据  */
  92          uchar fnGetCol(void)
  93          {
  94   1              return gCurCol;
  95   1      }
  96          
  97          /************************************************/
  98          /* 状态位STA1,STA0判断(读写指令和读写数据)    */
  99          /* 在读写数据或者写入命令前必须保证均为1        */
 100          /************************************************/
 101          uchar fnSTA01(void)                     
 102          {
 103   1              uchar i;
 104   1              
 105   1              for(i=N_MAX_WAIT;i>0;i--)
 106   1              {
 107   2                      if((LCMCW & 0x03) == 0x03)              // 读取状态
 108   2                              break;
 109   2              }
 110   1              return i;                                       // 若返回零,说明错误
 111   1      }
 112          #if 0
              /********************************************************/
              /*检查STA2,如果 STA2=1 为自动读状态                     */
              /********************************************************/
              uchar fnSTA2(void)
              {
C51 COMPILER V7.01  T6963B                                                                 03/31/2005 21:39:13 PAGE 3   

                      uchar i;
                      
                      for(i=N_MAX_WAIT;i>0;i--)
                      {
                              if((LCMCW & 0x04) == 0x04)
                                      break;
                      }
                      return i;                                       // 若返回零,说明错误
              }
              #endif
 128          /********************************************************/
 129          /* 状态位STA3判断(STA3 = 1 数据自动写状态)            */
 130          /********************************************************/
 131          uchar fnSTA3(void)
 132          {
 133   1              uchar i;
 134   1              
 135   1              for(i=N_MAX_WAIT;i>0;i--)
 136   1              {
 137   2                      if((LCMCW & 0x08) == 0x08)
 138   2                              break;
 139   2              }
 140   1              return i;                                       // 若返回零,说明错误
 141   1      }
 142          #if 0
              /********************************************************/
              /* 状态位STA6判断(STA6 =1 屏读/屏拷贝状态)            */
              /********************************************************/
              uchar fnSTA6(void)
              {
                      uchar i;
                      
                      for(i=N_MAX_WAIT;i>0;i--)
                      {
                              if((LCMCW & 0x40) == 0x40)
                                      break;
                      }
                      return i;                                       // 若返回零,说明错误
              }
              #endif
 158          /********************************************************/
 159          /* 写双参数的指令                                       */
 160          /********************************************************/
 161          uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2)
 162          {
 163   1              if(fnSTA01() == 0)
 164   1                      return 1;
 165   1              LCMDW = uPar1;
 166   1              if(fnSTA01() == 0)
 167   1                      return 2;
 168   1              LCMDW = uPar2;
 169   1              if(fnSTA01() == 0)
 170   1                      return 3;
 171   1              LCMCW = uCmd;
 172   1              return 0;                                       // 返回0成功
 173   1      }
 174          #if 0
              /********************************************************/
              /* 写单参数的指令                                       */
              /********************************************************/
              uchar fnPR11(uchar uCmd,uchar uPar1)
              {
C51 COMPILER V7.01  T6963B                                                                 03/31/2005 21:39:13 PAGE 4   

                      if(fnSTA01() == 0)
                              return 1;
                      LCMDW = uPar1;
                      if(fnSTA01() == 0)
                              return 2;
                      LCMCW = uCmd;
                      return 0;                                       // 返回0成功

⌨️ 快捷键说明

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