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

📄 zlg7289.lst

📁 键盘显示芯片ZLG7289的51驱动程序
💻 LST
字号:
C51 COMPILER V7.06   ZLG7289                                                               08/08/2007 14:57:50 PAGE 1   


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

stmt level    source

   1          #include<reg52.h>
   2          #include<intrins.h>
   3          
   4          
   5          sbit dio=P0^2;
   6          sbit clk=P0^1;
   7          sbit CS_7289=P0^0;
   8          
   9          sbit EOC = P2^7;
  10          sbit TLC2543_CLK  = P2^6;
  11          sbit TLC2543_DIN  = P2^5;
  12          sbit TLC2543_DO = P2^4;
  13          sbit TLC2543_CS  = P2^3;
  14          
  15          
  16          unsigned char DisBuffer[8];
  17          
  18          
  19          void delay(unsigned int i)
  20          {
  21   1              while(i--);
  22   1      }
  23          
  24          
  25          // 其中 port 为通道: 通道0:port = 0x01 通道1:port = 0x02 通道2:port = 0x04 ...
  26          unsigned int read2543(unsigned char port) 
  27          { 
  28   1      unsigned int i; 
  29   1      unsigned int ad_value=0; 
  30   1      
  31   1      TLC2543_CLK=0; 
  32   1      TLC2543_CS=0; 
  33   1      EOC=1; 
  34   1      port<<=4; 
  35   1      for(i=0;i<12;i++) 
  36   1      { 
  37   2        if(TLC2543_DO) ad_value|=0x01; 
  38   2        TLC2543_DIN=(bit)(port&0x80); 
  39   2        TLC2543_CLK=1; 
  40   2        _nop_(); 
  41   2        _nop_(); 
  42   2        _nop_(); 
  43   2        TLC2543_CLK=0; 
  44   2        _nop_(); 
  45   2        _nop_(); 
  46   2        _nop_(); 
  47   2        port=port<<1; 
  48   2        ad_value=ad_value<<1; 
  49   2      }
  50   1        
  51   1      TLC2543_CS=1; 
  52   1      ad_value=ad_value>>1; 
  53   1      return ad_value; 
  54   1      }
  55          
C51 COMPILER V7.06   ZLG7289                                                               08/08/2007 14:57:50 PAGE 2   

  56          
  57          //发送8位数据
  58          void SendByte(unsigned char dat)
  59          {
  60   1               unsigned char i;
  61   1               //CS_7289=0;
  62   1                               
  63   1               for(i=0;i<8;i++)
  64   1               {
  65   2                      
  66   2                      if(dat&0x80)
  67   2                      {
  68   3                              dio=1;
  69   3                      }else
  70   2                              {
  71   3                               dio=0;
  72   3                              }
  73   2                      clk=1;
  74   2                      delay(3);
  75   2                      clk=0; 
  76   2                      dat<<=1;
  77   2               }
  78   1               dio=0;
  79   1               //CS_7289=1;
  80   1      }
  81          //发送纯命令
  82          void SendCom(unsigned char com)
  83          {
  84   1                CS_7289=0;
  85   1                delay(1);
  86   1                SendByte(com);
  87   1                CS_7289=0;
  88   1      }
  89          //发送带数据的命令
  90          void SendComData(unsigned char com,unsigned char dat)
  91          {
  92   1                CS_7289=0;
  93   1                delay(1);
  94   1                SendByte(com);
  95   1                SendByte(dat);
  96   1                CS_7289=1;    
  97   1      } 
  98          unsigned char ReadKey(void)
  99          {
 100   1              unsigned char i;
 101   1              unsigned char key;
 102   1              CS_7289=0;
 103   1              SendByte(0x15);
 104   1              for(i=0;i<8;i++)
 105   1              {
 106   2                      key<<=1;
 107   2                      clk=0;
 108   2                      delay(1);
 109   2                      clk=1;
 110   2                      delay(1);
 111   2                      key |= dio;
 112   2              }
 113   1              return key;
 114   1      }  
 115          //led数码管位置,dat显示数据
 116          void ZLG7289Dis(unsigned char led,unsigned char dat)
 117          {
C51 COMPILER V7.06   ZLG7289                                                               08/08/2007 14:57:50 PAGE 3   

 118   1      
 119   1               SendComData(0x87-led,dat);
 120   1      }
 121          //消隐
 122          void ZLG7289DisOFF(unsigned char led)
 123          {
 124   1              //SendComData(0x98,0x80>>led); //方式0
 125   1              SendComData(0xcf,0x80>>led);  //方式1
 126   1      }
 127          //点亮数码管的小数点
 128          void ZLG7289DP(unsigned char led)
 129          {               
 130   1              SendComData(0xe0,0x3f-led*8);
 131   1      }
 132          //小数点关闭
 133          void ZLG7289DP_OFF(unsigned char led)
 134          {               
 135   1              SendComData(0xc0,0x3f-led*8);
 136   1      }
 137          //数码管闪烁
 138          void ZLG7289Flash(unsigned char led)
 139          {
 140   1               SendComData(0x88,0x80>>led);
 141   1      }
 142          void ZLG7289Reset(void)
 143          {
 144   1              SendCom(0xa4);
 145   1      }
 146          void ZLG7289MOVL(void)
 147          {
 148   1              SendCom(0xa1);
 149   1      }
 150          
 151          void ZLGDIS(void)
 152          {
 153   1              unsigned char i;
 154   1      
 155   1              //ZLG7289Reset();
 156   1              for(i=0;i<8;i++)
 157   1              {
 158   2                      if(DisBuffer[i]>=0 &&DisBuffer[i]<=9)
 159   2                      {
 160   3                              ZLG7289Dis(i,DisBuffer[i]);
 161   3                      }else if(DisBuffer[i]>=10 && DisBuffer[i]<=19)
 162   2                                      {       
 163   3                                              ZLG7289Dis(i,DisBuffer[i]-10);
 164   3                                              ZLG7289DP(i); //小数
 165   3                                       }      else ZLG7289DisOFF(i);          
 166   2              } 
 167   1      
 168   1      }
 169          main()
 170          {
 171   1              unsigned int i;
 172   1              unsigned int va;
 173   1              delay(1000);
 174   1              ZLG7289Reset();
 175   1              DisBuffer[0]=22;
 176   1              DisBuffer[1]=22;
 177   1              DisBuffer[2]=22;
 178   1              DisBuffer[3]=22;
 179   1              DisBuffer[4]=22;
C51 COMPILER V7.06   ZLG7289                                                               08/08/2007 14:57:50 PAGE 4   

 180   1              DisBuffer[5]=22;
 181   1              DisBuffer[6]=50;
 182   1              DisBuffer[7]=40;
 183   1              
 184   1              while(1)
 185   1              {
 186   2                      for(i=0;i<30000;i++);
 187   2                      va=read2543(0x0d);
 188   2                      va*=1.2;
 189   2                      DisBuffer[1]=(va/1000)%10;
 190   2                      DisBuffer[2]=(va/100)%10;
 191   2                      DisBuffer[3]=(va/10)%10;
 192   2                      DisBuffer[4]=va%10;
 193   2                      ZLGDIS();
 194   2                      ZLG7289Dis(0,0);
 195   2      
 196   2                                      
 197   2              }
 198   1      }


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