📄 hc595.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 + -