/***********************************************************
* 函数库说明:底层硬件初始化驱动函数库 *
* 版本: *
* 作者: *
* 创建日期: *
* -------------------------------------------------------- *
* [硬件说明] *
* 处理器: *
* 系统时钟: *
* -------------------------------------------------------- *
* [支 持 库] *
* 支持库名称:HD_Support.h *
* 需要版本: ----- *
* 支持库说明:底层硬件初始化声明库 *
* *
* 支持库名称:EX_Support.h *
* 需要版本: ----- *
* 支持库说明:底层硬件初始化驱动声明库 *
* *
* 支持库名称:PF_Config.h *
* 需要版本: ----- *
* 支持库说明:硬件平台配置声明库 *
* -------------------------------------------------------- *
* [版本更新] *
* 修改: *
* 修改日期: *
* 版本: *
* -------------------------------------------------------- *
* [版本历史] *
* -------------------------------------------------------- *
* [使用说明] *
***********************************************************/
/********************
* 头 文 件 配 置 区 *
********************/
# include "PF_Config.h"
# include "Ex_Support.h"
/********************
* 系 统 宏 定 义 *
********************/
/*------------------*
* 常 数 宏 定 义 *
*------------------*/
/*------------------*
* 动 作 宏 定 义 *
*------------------*/
/********************
* 模块结构体定义区 *
********************/
/********************
* 函 数 声 明 区 *
********************/
void Insert_Timer0_OVF_ISR_Code(void);
void Driver_INIT(void);
void Delay_MS(uint16 wTime);
void Insert_SPI_STC_ISR_Code(void);
void Output_Data_595(UINT8 chNum);
void Output_Data_All_595(void);
void Delay_ms(UINT8 Time);
/********************
* 模块函数声明区 *
********************/
/********************
* 模块变量声明区 *
********************/
static uint16 s_wSystemDelayTimerCounter = 0;
static const unsigned char s_cDISPCode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0x00,0x40,0x08,0x01,0x63,0x39,0x0f};
/********************
* 全局变量声明区 *
********************/
uint16 g_wSystemTimer = 0;
UINT8 g_chCounter = 0;
UINT16 Array[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
/***********************************************************
* 函数说明:软件驱动初始化函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Driver_INIT(void)
{
//*在这里插入你的各类软件驱动初始化代码*//
}
/***********************************************************
* 函数说明:系统毫秒延时函数 *
* 输入: 需要延时的时间长度 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Delay_MS(uint16 wTime)
{
s_wSystemDelayTimerCounter = wTime;
while(s_wSystemDelayTimerCounter);
}
/***********************************************************
* 函数说明:定时器0中断处理程序代码插入函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Insert_Timer0_OVF_ISR_Code(void)
{
g_wSystemTimer++;
if (s_wSystemDelayTimerCounter) //若计数器累加不为零
{
s_wSystemDelayTimerCounter--;
}
if (!(g_wSystemTimer & (BIT(10) - 1))) //除以2的10次方取余为0
{
g_chCounter++;
g_chCounter &= (BIT(4)-1); //对2的4次方取余
}
}
/***********************************************************
* 函数说明:SPI中断处理程序代码插入函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Insert_SPI_STC_ISR_Code(void)
{
UINT8 chKeyNUM = ~SPDR; //读取数据寄存器存贮的数据
UINT8 n = 0;
BOOL bIfKeyPressed = FALSE;
PORT_SS = HIGH; //SS拉高
PORT_SS = LOW; //ss拉低
for (n = 0;n < 8;n++) //读取数据的每一位
{
if (chKeyNUM & BIT(n)) //读取第n位
{
SPDR = ~s_cDISPCode[n];
bIfKeyPressed = TRUE;
break;
}
}
if (!bIfKeyPressed)
{
SPDR = ~s_cDISPCode[g_chCounter];
}
}
/***********************************************************
* 函数说明:SPI主机数据传输函数 *
* 输入: 传入的数据数据 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void SPI_MasterTransmit(UINT8 cData)
{
SPDR = cData; //启动数据传输
while(!(SPSR&(BIT(SPIF)))); //当数据传输结束,SPIF是状态寄存器中的位,结束标志
}
/***********************************************************
* 函数说明:595数据输出函数 *
* 输入: 传入的数据数据 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Output_Data_595(UINT8 chNum)
{
PORTC &=~BIT(PC2); //准备锁存数据
SPI_MasterTransmit(chNum);
PORTC |=BIT(PC2); //锁存数据
}
/***********************************************************
* 函数说明:595全部数据输出函数 *
* 输入: 传入的数据数据 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Output_Data_All_595(void)
{
UINT8 i = 0;
for(i=0;i<8;i++)
{
Output_Data_595(Array[i]);
Delay_ms(1000);
}
}
/***********************************************************
* 函数说明:毫秒延时函数函数 *
* 输入: 时间 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Delay_ms(UINT8 Time)
{
UINT8 i = 0,j = 0;
for(i = 0;i < Time;i++)
for(j = 0;j < 150;j++)
{
;
}
}