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

📄 zlg7289.lst

📁 zlg7289显示键盘芯片 带消隐程序,包含多个文件,调试通过
💻 LST
字号:
C51 COMPILER V8.02   ZLG7289                                                               03/19/2008 16:21:44 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ZLG7289
OBJECT MODULE PLACED IN zlg7289.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE zlg7289.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*ZLG7289.c
   2          数码管显示与键盘管理芯片ZLG7289 的标准80C51 驱动程序(C51)
   3          Copyright (c) 2005,广州周立功单片机发展有限公司
   4          All rights reserved.
   5          本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的。
   6          */
   7          
   8          #include "ZLG7289.h"
   9          #include "intrins.h"
  10          //定义一个全局变量,用于延时
  11          //该变量在调用函数ZLG7289_Init()时被初始化
  12          
  13          /*宏定义:ZLG7289_ShortDelay()
  14          功能:短延时
  15          说明:延时(ZLG7289_Delay_t*2+2)个机器周期*/
  16          
  17          #define ZLG7289_ShortDelay() {unsigned char t = ZLG7289_Delay_t;while ( --t != 0 );}
  18          
  19          /*宏定义:ZLG7289_LongDelay()
  20          功能:长延时
  21          说明:延时(ZLG7289_Delay_t*12+8)个机器周期*/
  22          
  23          #define ZLG7289_LongDelay() {unsigned char t = ZLG7289_Delay_t * 6;while ( --t != 0 );}
  24          
  25          /*
  26          函数:ZLG7289_SPI_Write()
  27          功能:向SPI 总线写入1 个字节的数据
  28          参数:
  29          dat:要写入的数据
  30          */
  31          
  32          void ZLG7289_SPI_Write(char dat) reentrant
  33          {
  34   1              unsigned char t = 8;
  35   1              do
  36   1              {
  37   2                      ZLG7289_pinDIO = (bit)(dat & 0x80);
  38   2                      dat <<= 1;
  39   2                      ZLG7289_pinCLK = 1;
  40   2                      ZLG7289_ShortDelay();
  41   2                      ZLG7289_pinCLK = 0;
  42   2                      ZLG7289_ShortDelay();
  43   2              } while ( --t != 0 );
  44   1      }
  45          
  46          /*函数:ZLG7289_SPI_Read()
  47          功能:从SPI 总线读取1 个字节的数据
  48          返回:
  49          读取到的数据*/
  50          
  51          char ZLG7289_SPI_Read() reentrant
  52          {
  53   1              char dat;
  54   1              unsigned char t = 8;
  55   1              ZLG7289_pinDIO = 1; //读取数据之前DIO 引脚要置1 以切换到输入状态
C51 COMPILER V8.02   ZLG7289                                                               03/19/2008 16:21:44 PAGE 2   

  56   1              do
  57   1              {
  58   2                      ZLG7289_pinCLK = 1;
  59   2                      ZLG7289_ShortDelay();
  60   2                      dat <<= 1;
  61   2                      if ( ZLG7289_pinDIO ) dat++;
  62   2                      ZLG7289_pinCLK = 0;
  63   2                      ZLG7289_ShortDelay();
  64   2              } while ( --t != 0 );
  65   1              return dat;
  66   1      }
  67          
  68          /*
  69          函数:ZLG7289_cmd()
  70          功能:执行ZLG7289 纯指令
  71          参数:
  72          cmd:命令字
  73          */
  74          
  75          void ZLG7289_cmd(char cmd)
  76          {
  77   1              char sav = IE;
  78   1              IE &= 0xFA; //关闭外部中断
  79   1              ZLG7289_pinCS = 0;
  80   1              ZLG7289_LongDelay();
  81   1              ZLG7289_SPI_Write(cmd);
  82   1              ZLG7289_pinCS = 1;
  83   1              ZLG7289_LongDelay();
  84   1              IE = sav; //恢复IE
  85   1      }
  86          
  87          /*
  88          函数:ZLG7289_cmd_dat()
  89          功能:执行ZLG7289 带数据指令
  90          参数:
  91          cmd:命令字
  92          dat:数据
  93          */
  94          
  95          void ZLG7289_cmd_dat(char cmd, char dat)
  96          {
  97   1              char sav = IE;
  98   1              IE &= 0xFA; //关闭外部中断
  99   1              ZLG7289_pinCS = 0;
 100   1              ZLG7289_LongDelay();
 101   1              ZLG7289_SPI_Write(cmd);
 102   1              ZLG7289_LongDelay();
 103   1              ZLG7289_SPI_Write(dat);
 104   1              ZLG7289_pinCS = 1;
 105   1              ZLG7289_LongDelay();
 106   1              IE = sav; //恢复IE
 107   1      }
 108          
 109          /*
 110          函数:ZLG7289_Download()
 111          功能:下载数据
 112          参数:
 113          mod=0:下载数据且按方式0 译码
 114          mod=1:下载数据且按方式1 译码
 115          mod=2:下载数据但不译码
 116          x:数码管编号(横坐标),取值0~7
 117          dp=0:小数点不亮
C51 COMPILER V8.02   ZLG7289                                                               03/19/2008 16:21:44 PAGE 3   

 118          dp=1:小数点亮
 119          dat:要显示的数据
 120          说明:
 121          译码方式的具体含义请参考数据手册
 122          */
 123          
 124          void ZLG7289_Download(unsigned char mod, char x, bit dp, char dat)
 125          {
 126   1              code char ModDat[3] = {0x80,0xC8,0x90};
 127   1              char d1;
 128   1              char d2;
 129   1              if ( mod > 2 ) mod = 2;
 130   1              d1 = ModDat[mod];
 131   1              x &= 0x07;
 132   1              d1 |= x;
 133   1              d2 = dat & 0x7F;
 134   1              if ( dp ) d2 |= 0x80;
 135   1              ZLG7289_cmd_dat(d1,d2);
 136   1      }
 137          /*
 138          功能:执行ZLG7289 键盘命令
 139          返回:
 140          返回读到的按键值:0~63
 141          如果返回0xFF 则表示没有键按下
 142          */
 143          char ZLG7289_Key() reentrant
 144          {
 145   1              char key;
 146   1              ZLG7289_pinCS = 0;
 147   1              ZLG7289_LongDelay();
 148   1              ZLG7289_SPI_Write(0x15);
 149   1              ZLG7289_LongDelay();
 150   1              key = ZLG7289_SPI_Read();
 151   1              ZLG7289_pinCS = 1;
 152   1              ZLG7289_LongDelay();
 153   1              return key;
 154   1      }
 155          
 156          /*
 157          函数:ZLG7289_Init()
 158          功能:ZLG7289 初始化
 159          参数:
 160          t:SPI 总线的延时值设置,取值1-40(超出范围可能导致错误)
 161          说明:
 162          t的取值可以参照以下公式:t >= 5 * f1 / f2,其中f1 表示80C51 的
 163          晶振频率,f2 表示ZLG7289 的晶振频率
 164          */
 165          
 166          void ZLG7289_Init()
 167          {
 168   1              //I/O 口初始化
 169   1              ZLG7289_pinCS = 1;
 170   1              ZLG7289_pinCLK = 0;
 171   1              ZLG7289_pinDIO = 1;
 172   1              ZLG7289_pinINT = 1;
 173   1      }
 174          /*
 175          函数:dis( unsigned char r,unsigned char num,unsigned char *pdis)
 176          功能:数码管的常规显示
 177          参数:num:数码管显示的位数
 178                   *pdis:数码管组显示的数字指针
 179          */
C51 COMPILER V8.02   ZLG7289                                                               03/19/2008 16:21:44 PAGE 4   

 180          void ZLG7289_dis( unsigned char num,unsigned char *pdis)
 181          { 
 182   1         unsigned char bdata i,dat;
 183   1         bit dp;
 184   1         for (i=num;i>0; i--)
 185   1         { 
 186   2           dat=pdis[num-i];
 187   2               dp=(bit)(dat&0x80);    //最高位为小数点位
 188   2           ZLG7289_Download(0,num-i,dp,dat);
 189   2              }
 190   1      }
 191          /*
 192          函数:dis( unsigned char r,unsigned char num,unsigned char *pdis)
 193          功能:数码管消隐显示
 194          参数:num:数码管显示的位数
 195                   *pdis:数码管组显示的数字指针
 196          */
 197          void  ZLG7289_dissapear(unsigned char num,unsigned char *pdis)
 198          {
 199   1         unsigned int bdata dis_x=0xff;//消隐控制位
 200   1         unsigned char i=num-1,dis_num=num;
 201   1         dis_x=_iror_(dis_x,8-num);
 202   1         while((pdis[i]==0)&(i!=0))
 203   1         {
 204   2           dis_x=_iror_(dis_x,1);
 205   2               dis_num--;
 206   2               i--;
 207   2         }
 208   1         i=dis_x;
 209   1         ZLG7289_Hide(i);
 210   1         ZLG7289_dis( 6,pdis);
 211   1      } 
 212          
 213          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    506    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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