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

📄 hc595.c

📁 STC51系列的源码
💻 C
字号:
/********************************************************************************/
/* filename : HC595.c                                                           */
/* created  : xillinx                                                           */
/* descript : 用硬件SPI接口输出控制HC595进行并口扩展                            */
/*      __________                                                              */
/*  QB--|1     16|--VCC                                                         */
/*  QC--|2     15|--QA                                                          */
/*  QD--|3     14|--SI                                                          */
/*  QE--|4     13|--/G                                                          */
/*  QF--|5     12|--RCK                                                         */
/*  QG--|6     11|--SCK                                                         */
/*  QH--|7     10|--/SCLR                                                       */
/*  GND-|8      9|--QH'                                                         */
/*      |________|                                                              */
/********************************************************************************/
#include "../CPU/CPU.h"
#include "../LED/LED.h"
#include "../SEG7/SEG7.h"
#include "../HC595/HC595.h"

/********************************************************************************/
/* function : HC595_delay()                                                     */
/* recension: xillinx                                                           */
/* descript : HC595的延时函数,根据CPU的时钟调整                                 */
/********************************************************************************/
void HC595_delay(void)
{   _nop_();
    _nop_();
}

/********************************************************************************/
/* function : HC595_begin()                                                     */
/* recension: xillinx                                                           */
/* descript : HC595的其实信号,时钟为低/数据为低/锁存信号为低                    */
/********************************************************************************/
void HC595_begin(void)
{   HC595_LATCH=0x0;
    HC595_CLK  =0x0;
    HC595_DATA =0x0;
}

/********************************************************************************/
/* function : HC595_shift()                                                     */
/* recension: xillinx                                                           */
/* descript : HC595移位操作,在时钟的上升沿移入数据, 所以设置数据后需要等待      */
/********************************************************************************/
void HC595_shift(void)
{   HC595_delay();
    HC595_CLK=0x1;  //* 上升沿移入数据到HC595
    HC595_delay();
    HC595_CLK=0x0;  //* 恢复时钟
}

/********************************************************************************/
/* function : HC595_send_mdata()                                                */
/* recension: xillinx                                                           */
/* descript : 向HC595移入一个字节的数据                                         */
/********************************************************************************/
void HC595_send_mdata(unsigned char mdata)
{   unsigned char i;
    for(i=0x0;i<0x8;i++)
    {   if((mdata&0x80)==0x80)
        {  HC595_DATA=0x1;
        }
        else
        {  HC595_DATA=0x0;
        }
        HC595_shift();
        mdata<<=0x1;
    }
}

/********************************************************************************/
/* function : HC595_refresh()                                                   */
/* recension: xillinx                                                           */
/* descript : HC595数据刷新,由2MS的定期刷新,共8个数码管,刷新周期2x8=16MS,刷新   */
/*  频率为41.7HZ                                                                */
/********************************************************************************/
void HC595_refresh(void)
{   static unsigned char seg_counter=0x0;
    seg_counter&=0x7;
    HC595_begin();                                      //* 每次写入数据时,先让HC595工作到初始化状态
    HC595_send_mdata(LED_buffer[0x0]);                  //* 应该首先移出第三个芯片的数据,就是LED跑马灯的数据信号 
    HC595_send_mdata(SEG7_segment_table[seg_counter]);  //* 第二个是LED数码管的数字选通信号,每个显示数字的选通信号
    HC595_send_mdata(SEG7_buffer[seg_counter]);         //* 第三个输出每个数字的数据信号
    seg_counter++;                                      //* 处理下一次动态输出的七段数字信号
    seg_counter&=0x7;
    HC595_LATCH=0x1;                                    //* 向HC595的输出寄存器输出数据,驱动显示
    HC595_delay();
    HC595_LATCH=0x0;
    HC595_delay();
}

⌨️ 快捷键说明

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