📄 led_dis.c
字号:
//========================================================================
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================================
//========================================================================
// Filename: LED_Dis.c
// Author: Lianshu Mou (email: Lianshu@sunnorth.com.cn)
// Date: 2004/12/22
// Description:
// Reference:
// Revision:
// 2004/12/22 First version
//========================================================================
#include "Spmc75_regs.h"
#include "mcMACRO.h"
#include "Option.h"
#include "GPIO_SPI.h"
static unsigned int LED_Dis_Buffer[5]; //显示缓冲区
static unsigned int Dis_flag = 0x00ff; //显示标志
static int LED_Num = 0; //显示的扫描位选计数器
static int LED_Daly_Time = 0; //显示延时计数器
void LED_Dis_fill(unsigned int Data,int ID,int H_EN);
//显示译码表
/*0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,H,h,L,n,N,o,P,r,t,U,-,*/
const unsigned int LED_TAB[28] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, \
0x90,0x88,0x83,0xC6,0xA7,0xA1,0x86,0x8E,0x89, \
0x8B,0xC7,0xAB,0xC8,0xA3,0x8C,0xAF,0x87,0xC1, \
0xBF};
const unsigned int Diver_TAB[5] = {0xfe00,0xfd00,0xfb00,0xf700,0xef00};
//=================================================================================================
// ----Function: void Display_Init(void);
// -Description: 显示初始化
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void Display_Init(void)
{
LED_Port_Attrib |= GPIO_CLK + GPIO_DAT + GPIO_Load;
LED_Data_Port &= ~(GPIO_CLK + GPIO_DAT + GPIO_Load);
LED_Data_Port_Dir |= GPIO_CLK + GPIO_DAT + GPIO_Load;
LED_Dis_fill(0,0,0);
LED_Dis_fill(1,1,0);
LED_Dis_fill(2,2,0);
LED_Dis_fill(3,3,0);
LED_Dis_fill(0xc0,4,2);
}
//=================================================================================================
// ----Function: void LED_Diver(unsigned int Data,int LED_ID);
// -Description: 显示驱动
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void LED_Diver(unsigned int Data,int LED_ID)
{
Data &= 0xff;
Data |= Diver_TAB[LED_ID];
GPIO_SPI_TXD(Data);
GPIO_SPI_Load();
}
//=================================================================================================
// ----Function: int M_TSTB(unsigned int *Data,int Num);
// -Description: 位测试
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
int M_TSTB(unsigned int *Data,int Num)
{
if((*Data & (1 << Num)) > 0) return(1);
else return(0);
}
//=================================================================================================
// ----Function: void M_INVB(unsigned int *Data,int Num);
// -Description: 位取反
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void M_INVB(unsigned int *Data,int Num)
{
*Data ^= 1 << Num;
}
//=================================================================================================
// ----Function: void M_SETB(unsigned int *Data,int Num);
// -Description: 位置位
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void M_SETB(unsigned int *Data,int Num)
{
*Data |= 1 << Num;
}
//=================================================================================================
// ----Function: void M_CLRB(unsigned int *Data,int Num);
// -Description: 位清零
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void M_CLRB(unsigned int *Data,int Num)
{
*Data &= ~(1 << Num);
}
//=================================================================================================
// ----Function: void LED_Dis_TimeISR(void);
// -Description: 显示的定时中断服务,2mS执行一次
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void LED_Dis_TimeISR(void)
{
int i;
LED_Daly_Time ++;
if(LED_Daly_Time > 250)
{
LED_Daly_Time = 0;
for(i=0;i<4;i++)
{
if(M_TSTB(&Dis_flag,i+8) > 0) M_INVB(&Dis_flag,i);
else M_SETB(&Dis_flag,i);
if(M_TSTB(&LED_Dis_Buffer[4],i+8) > 0) M_INVB(&LED_Dis_Buffer[4],i);
}
if(M_TSTB(&LED_Dis_Buffer[4],12) > 0) M_INVB(&LED_Dis_Buffer[4],4);
if(M_TSTB(&LED_Dis_Buffer[4],13) > 0) M_INVB(&LED_Dis_Buffer[4],5);
}
LED_Num ++;
if(LED_Num > 4) LED_Num = 0;
if(M_TSTB(&Dis_flag,LED_Num) > 0) LED_Diver(LED_Dis_Buffer[LED_Num],LED_Num);
else LED_Diver(0xff,LED_Num);
}
//=================================================================================================
// ----Function: void LED_Dis_fill(unsigned int Data,int ID,int H_EN);
// -Description: 显示缓冲区填充
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void LED_Dis_fill(unsigned int Data,int ID,int H_EN)
{
if(H_EN < 2)
{
if(H_EN > 0) LED_Dis_Buffer[ID] = LED_TAB[Data] & 0x7f; //数据查表填充,显示小数点
else LED_Dis_Buffer[ID] = LED_TAB[Data]; //数据查表填充,不显示小数点
}
else LED_Dis_Buffer[ID] = Data;
}
//=================================================================================================
// ----Function: void Set_LED_Flash(int NUM,int State);
// -Description: 设置相应的LED是否闪亮
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void Set_LED_Flash(int NUM,int State)
{
if(State > 0) M_SETB(&Dis_flag,NUM+8);
else M_CLRB(&Dis_flag,NUM+8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -