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

📄 ht1621.lst

📁 功能:ZY886A液晶显示模块显示控制。启动程序即进入正常显示状态(循环显示一系列数字0~F)。 说明:将跳线器题J6、J19、J20分别短接到LCM_/WR、LCM_DAT、LCM_/CS端。
💻 LST
字号:
C51 COMPILER V7.01  HT1621                                                                 02/12/2003 14:57:27 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE HT1621
OBJECT MODULE PLACED IN HT1621.OBJ
COMPILER INVOKED BY: D:\KEIL\C51\BIN\C51.EXE HT1621.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //HT1621操作软件包
   2          //文件名:HT1621.c
   3          //包含对HT1621操作的底层函数,如发送数据位,发送字节等等,
   4          
   5          #include <reg51.h>
   6          #include <intrins.h>
   7          #include <HT1621.h>
   8          
   9          /*设置HT1621控制端口*/
  10          sbit  CS_PORT  = P0^1;          /*CS端口*/
  11          sbit  CLK_PORT = P0^2;          /*WR端口*/
  12          sbit  SDA_PORT = P0^3;          /*DATA端口*/
  13          
  14          #define  uchar unsigned char    /*宏定义*/
  15          #define  uint  unsigned int
  16          #define  _Nop()  _nop_()        /*定义空指令*/
  17          
  18          
  19          
  20          //起动函数
  21          //起动HT1621,以便进行器件操作.
  22          void   Start_spi()
  23          { CS_PORT=1;
  24   1        CLK_PORT=1;
  25   1        SDA_PORT=1;
  26   1        _Nop();                       /*起始条件建立时间大于3.34us*/
  27   1        _Nop();
  28   1        _Nop();
  29   1        _Nop();
  30   1        CS_PORT=0;
  31   1        CS_PORT=0;
  32   1        CLK_PORT=0;
  33   1        CLK_PORT=0;
  34   1      }
  35          
  36          
  37          //发送数据位函数
  38          //向HT1621发送dat的bitcnt位数据,由高位开始.(bitcnt不能大于8) 
  39          void SendBit(uchar dat,uchar bitcnt)
  40          { uchar  i;
  41   1        for(i=0;i<bitcnt;i++)
  42   1        { if(( dat & 0X80 ) == 0) SDA_PORT = 0;
  43   2            else SDA_PORT = 1;        /*发送数据由高位到低位传送*/
  44   2          _Nop();                     /*起始条件建立时间大于4.7us,延时*/
  45   2          _Nop();
  46   2          _Nop();
  47   2          _Nop();  
  48   2          CLK_PORT = 1;               /*置时钟线为高,通知被控器开始接收数位*/
  49   2          _Nop();                     /*起始条件建立时间大于4.7us,延时*/
  50   2          _Nop();
  51   2          _Nop();
  52   2          _Nop();
  53   2          _Nop();  
  54   2          CLK_PORT = 0;               /*钳住总线准备下一个数据位*/
  55   2          dat=dat<<1;                 /*发送数据左移一位*/
C51 COMPILER V7.01  HT1621                                                                 02/12/2003 14:57:27 PAGE 2   

  56   2        }
  57   1      }
  58          
  59          
  60          // 发送字节函数 
  61          // 向HT1621发送一字节数据,数据单元首地址在指针buf中,发送字节数由bytecnt指定
  62          void SendByte(uchar dat)
  63          { SendBit(dat,8);               /*发送字节*/
  64   1      }
  65          
  66          
  67          // 发送命令函数(A类)
  68          // 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
  69          void SENDCOMA(uchar  com)
  70          { Start_spi();
  71   1        SendBit(0X80,4);              /*发送设置命令ID=100 0*/
  72   1        SendByte(com);                /*发送命令字*/
  73   1      }
  74          
  75          
  76          // 发送命令函数(B类)
  77          // 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
  78          void SENDCOMB(uchar adr)
  79          { Start_spi();
  80   1        SendBit(0XA0,4);              /*发送写显示RAM命令ID=101 0*/
  81   1        SendBit(adr,5);               /*指定写入地址*/
  82   1      }
  83          
  84          // 发送命令函数(C类)
  85          // 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
  86          void SENDCOMC(uchar com)
  87          { Start_spi();  
  88   1        SendBit(0X90,4);              /*发送命令ID=100 1*/
  89   1        SendByte(com);                /*发送命令*/
  90   1      }
  91          
  92          
  93          //初始化HT1621函数
  94          void INTI1621()
  95          { SENDCOMA(BIAS);
  96   1        SENDCOMA(XTAL32);
  97   1        SENDCOMA(SYSEN); 
  98   1        SENDCOMA(LCDON);
  99   1        SENDCOMA(TONE4K);
 100   1      }
 101          
 102          
 103                        
 104          //向指定一个显示缓冲区填充一个数据
 105          void  disp(uchar dat,uchar addr)
 106          { addr=addr<<3;                 /*左移3位,低5位作为RAM地址*/
 107   1        SENDCOMB(addr);
 108   1        SendByte(dat);
 109   1      }
 110          
 111          //循环填充并显示某一段连地址地
 112          //addr填充段首地址,显示位数num,填充数据dat.
 113          void dispsome(uchar num,uchar dat,uchar addr)
 114          { uchar i;
 115   1        for(i=0;i<num;i++)
 116   1        { disp(dat,addr);
 117   2          addr++;
C51 COMPILER V7.01  HT1621                                                                 02/12/2003 14:57:27 PAGE 3   

 118   2          addr++;
 119   2        }
 120   1      }
 121          
 122          
 123          //左移一位循环显示.
 124          //显示位数num,指针p指向一组要显示的数组,显示首地址addr
 125          void disRound(uchar num, uchar *p, uchar addr)
 126          { uchar i;
 127   1        for(i=0;i<num;i++)
 128   1        { disp(*p,addr);
 129   2          p++;
 130   2          addr++;
 131   2          addr++;
 132   2        }
 133   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    239    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       8
   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 + -