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

📄 595-165ic.lst

📁 74LS138及用74HC165 74HC595串行方式实现的数码管显示.rar
💻 LST
字号:
C51 COMPILER V7.10   595_165IC                                                             03/20/2009 17:55:45 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE 595_165IC
OBJECT MODULE PLACED IN 595-165IC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 595-165IC.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1           
   2          /**********此部分为74HC595的驱动程序使用SPI总线连接********************
   3          *
   4          *阅读此处时,请大家参考74HC595 74HC165(并入串出)的芯片手册查看各引脚的功能
   5          *
   6          ***********************************************************************/
   7          
   8          #include <reg52.H>
   9          #include <absacc.h>
  10          #include <intrins.h> 
  11          
  12           #define  NOP() _nop_()    /* 定义空指令 */
  13           #define  _Nop()  _nop_()   /*定义空指令*/
  14           //SPI IO
  15          sbit    MOSIO =P1^5;    //管脚定义,74HC595数据通过P1.5脚移进单片
  16          sbit    R_CLK =P1^6;    /*将数据保存到存储寄存器中的脉冲*/
  17          sbit    S_CLK =P1^7;    /*时钟脉冲,使数据输入74HC595移位寄存器的脉冲*/     
  18          
  19          sbit    IN_PL =P3^4;    //管脚定义,74HC165 shiftload 把数据加载到锁存器中
  20          sbit    IN_Dat=P3^5;    //管脚定义,IN_Dat是74HC165的串行数据输出端口
  21          sbit    OE    =P3^6;    /*74HC595输出使能*/
  22          /*********************************************************************************************************
  23          ** 函数名称: ReHC74165 (并入串出)
  24          ** 功能描述: 将单片机并行总线上的数据转换成串行数据输出
  25          **           并行数据从输入74HC165并行数据输入端输入-->74HC165的串行数据输出端IN_Dat输出串行数据
  26          ** 管脚描述:请参考相关的芯片资料(学习光盘中已配)
  27          ** 入口参数: 无,数据从74HC165的8位并行数据输入端输入
  28          ** 出口参数:
  29          ** 返回值  :  ~indata
  30          *********************************************************************************************************/
  31          unsigned long ReHC74165(void)
  32          {  
  33   1        unsigned char i;                      /*变量定义*/
  34   1        unsigned long indata;
  35   1                      
  36   1         IN_PL=0;                                /*产生占空比为50%脉冲方波,把并行总线上的数据加载到74HC165内部锁存器中 */
  37   1         NOP();                
  38   1         IN_PL=1;
  39   1         NOP();            
  40   1        /****************以下for循环实现将数据从74HC165中移出***************/ 
  41   1         indata=0;                                            /*初始化变量indata=0*/
  42   1         for(i=0; i<25; i++)                          /*循环25次*/
  43   1          { 
  44   2                indata=indata<<1;                     /*indata左移1位,目的:空出最低位用于保留从74HC165的IN_Dat管脚移出的数据*/
  45   2            if(IN_Dat==1)indata=indata|1;     /*IN_Dat是74HC165的串行数据输出端口*/
  46   2                                                                              /*判断74HC165的串行数据输出端口的状态。
  47   2                                                                              如果是1,将保存74HC165的串行数据的变量或上1;如果是0,则取初始化的值*/
  48   2                S_CLK=1;                                              /*S_CLK下降沿*/
  49   2            NOP();                                            /*S_CLK是74HC595的时钟输入端,使数据输入74HC595移位寄存器*/
  50   2            S_CLK=0;                                          /*将每一位74HC165的串行输出数据(变量indata的最低位)
  51   2                                              都保存到了74HC595移位寄存器*/
  52   2              } 
  53   1         
  54   1         return(~indata);                                 /*返回;indata取反,这里的取反没有什么特殊目的
  55   1                                          只是为了配合此开发板的功能实现.如果仅仅是驱动74HC165则根本部用取反*/
C51 COMPILER V7.10   595_165IC                                                             03/20/2009 17:55:45 PAGE 2   

  56   1       
  57   1      }
  58          
  59          
  60          /*********************************************************************************
  61          ** 函数名称: HC595SendData
  62          ** 功能描述: 单片机的并行数据SendVal-->串行移到74HC595中-->74HC595并行数据输出
  63          **                       单片机只用一个IO口和74HC595相连,通过74HC595,最终实现了8位数据的并行输出.
  64          **                       简言之: 单片机只用一个IO口,就实现了8位数据并行输出到总线.
  65          ** 入    口:SendVal要发送的数据
  66          ** 出    口:
  67          ***********************************************************************************/
  68          void HC595SendData(unsigned int SendVal)
  69          {  
  70   1        unsigned char i;             /*定义变量;i定义为unsigned char 数据类型,占16位存储空间*/
  71   1                      
  72   1        for(i=0;i<16;i++)        /*因为数据类型unsigned char,占16位存储空间*/
  73   1         {
  74   2              if((SendVal<<i)&0x8000)/*判断要发送的数据的最高位*/
  75   2                { MOSIO=1;               /*要发送的数据的最高位为1,向74HC595的数据口是送1*/
  76   3                 
  77   3                }   
  78   2              else MOSIO=0;              /*要发送的数据的最高位为0,向74HC595的数据口是送0*/
  79   2      /*以上if--else语句通过将要发送的数据左移,然后取该数据的最高位,实现将要发送的
  80   2      数据从高到低,一位一位的发送到74HC595。74HC595串行输入并行输出*/ 
  81   2              S_CLK=0;                   /*产生一个上升沿*/
  82   2              NOP();                             /*S_CLK是74HC595的时钟输入端,使数据输入74HC595移位寄存器*/
  83   2              NOP();
  84   2              S_CLK=1;        
  85   2         }
  86   1        /*以上for()循环,把16位的数据全部保存到了74HC595的内部寄存器*/ 
  87   1              
  88   1        R_CLK=0;                /*产生一个上升沿*/
  89   1        NOP();                                  /*R_CLK是74HC595的控制端*/
  90   1        NOP();
  91   1        R_CLK=1;                /*将数据保存到存储寄存器中去*/
  92   1                                                        /* 注意:如果两个时钟R_CLK,S_CLK连在一起,则移位寄存器总是比存储寄存器早一个脉冲。*/
  93   1        OE=0;      /*当使能OE时(为低电平),存储寄存器的数据输出到总线。
  94   1        也就是允许并行数据的输出,实现了把串行数据输入转换为并行数据输出*/
  95   1      
  96   1      }
  97          


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