|
发表于 2020-9-2 22:35:27
|
显示全部楼层
/*--------------------------------------------------------------------------*/
/***@file led_7c7s.c
@brief 7*7数据管显示屏蔽驱动
@details
@author wjq
@date
@note
*/
/*----------------------------------------------------------------------------*/
/**********************************************************************************************************************
--------------------------------------------
| K1 K3 ---- ---- ---- ---- K6 |
| | | | | . | | | | |
| ---- ---- ---- ---- |
| | | | | . | | | | |
| K2 K4 ---- ---- ---- ---- K7 |
--------------------------------------------
7线LED屏阵列如下,其中A,B,C...为LED屏的段,0,1,2.... 表示对应的连接IO
参考下图表,当需要点亮某个段时,左边的拉高,右边的拉低点亮相应位置,
如要点亮1A段,则将0号IO拉高,1号IO拉低 ,如果我们要显示一个数据,则要依次扫描7个IO
0 1 2 3 4 5 6
0 X 1A 1B 1E K4 K1 -
1 1F X 2A 2B 2E 2D -
2 1G 2F X K5 3B K2 K7
3 1C 2G 3F X 3C 4E -
4 1D 2C 3G 3A X 4C 4G
5 3D K3 3E 4D 4F X 4B
6 K6 K8 4A X - - X
************************************************************************************************************************/
#include "include.h"
#include "task_music.h"
#include "user_fm.h"
#include "task_clock.h"
#include "task.h"
u8 __idata batchargecout;
#if LED_7P7S_EN
//定义COM口是否是同一排P口的。比如都是P2口
#define SAME_COM_P 0
#if SAME_COM_P
#define LED_COM P2
#define LED_COM_DIR P2DIR
#else
#define LED_COM_0_ON P2 |= BIT(2);
#define LED_COM_1_ON P2 |= BIT(3);
#define LED_COM_2_ON P2 |= BIT(4);
#define LED_COM_3_ON P2 |= BIT(5);
#define LED_COM_4_ON P2 |= BIT(6);
#define LED_COM_5_ON P3 |= BIT(0);
#define LED_COM_6_ON P3 |= BIT(1);
#define LED_COM_0_OFF P2 &= ~BIT(2);
#define LED_COM_1_OFF P2 &= ~BIT(3);
#define LED_COM_2_OFF P2 &= ~BIT(4);
#define LED_COM_3_OFF P2 &= ~BIT(5);
#define LED_COM_4_OFF P2 &= ~BIT(6);
#define LED_COM_5_OFF P3 &= ~BIT(0);
#define LED_COM_6_OFF P3 &= ~BIT(1);
#define COM_DIR0_IN P2DIR |= BIT(2);
#define COM_DIR1_IN P2DIR |= BIT(3);
#define COM_DIR2_IN P2DIR |= BIT(4);
#define COM_DIR3_IN P2DIR |= BIT(5);
#define COM_DIR4_IN P2DIR |= BIT(6);
#define COM_DIR5_IN P3DIR |= BIT(0);
#define COM_DIR6_IN P3DIR |= BIT(1);
#define COM_DIR0_OUT P2DIR &= ~BIT(2);
#define COM_DIR1_OUT P2DIR &= ~BIT(3);
#define COM_DIR2_OUT P2DIR &= ~BIT(4);
#define COM_DIR3_OUT P2DIR &= ~BIT(5);
#define COM_DIR4_OUT P2DIR &= ~BIT(6);
#define COM_DIR5_OUT P3DIR &= ~BIT(0);
#define COM_DIR6_OUT P3DIR &= ~BIT(1);
#define ALL_COM_DIRIN {P2DIR |= 0x7c;P3DIR |= 0x03;}
#define ALL_COM_OFF {P2 &= ~0x7c; P3 &= ~0x03;}
u8 LED_COM;
u8 LED_COM_DIR;
#endif
extern u8 __idata bVoiceOn;
static u8 __idata syslastbatval= 0xff;
u8 __idata curMenu;
u8 __idata LED_5com7seg_dispBuf[5];
u8 p_disp_buff2_value[7];
u8 __idata COM_T;
u8 returnCount;
bool __bdata HalfsecFlash;
bool __bdata ftimeflag = false;
u16 __idata inputNum;
typedef void(*H)(void);
//extern val
extern type_task_music_ctl t_msc;
extern type_task_fm_ctl t_fm;
extern type_t_clock t_clock;
extern u8 clockset_count;
#pragma constseg=LED_TBL
const u8 LED_7p7seg_Table[10] =
{
LED_7p7seg_0,
LED_7p7seg_1,
LED_7p7seg_2,
LED_7p7seg_3,
LED_7p7seg_4,
LED_7p7seg_5,
LED_7p7seg_6,
LED_7p7seg_7,
LED_7p7seg_8,
LED_7p7seg_9
};
const u8 LED_7p7seg_repeatTable[4][3] =
{
{LED_7p7seg_A,LED_7p7seg_L,LED_7p7seg_L},
{LED_7p7seg_F,LED_7p7seg_0,LED_7p7seg_L},
{LED_7p7seg_S,LED_7p7seg_I,LED_7p7seg_N},
{LED_7p7seg_R,LED_7p7seg_A,LED_7p7seg_N}
};
const u8 LED_7p7seg_eqTable[6][3] =
{
{LED_7p7seg_N,LED_7p7seg_0,LED_7p7seg_R},
{LED_7p7seg_P,LED_7p7seg_0,LED_7p7seg_P},
{LED_7p7seg_R,LED_7p7seg_0,LED_7p7seg_C},
{LED_7p7seg_J,LED_7p7seg_A,LED_7p7seg_Z},
{LED_7p7seg_C,LED_7p7seg_L,LED_7p7seg_A},
{LED_7p7seg_C,LED_7p7seg_0,LED_7p7seg_U}
};
#pragma constseg=default
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示四位数字
@param num 需要显示的数字
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void DispNum_7p7seg(u16 num)//@"LED_7COM_API"
{
u16 numtmp;
numtmp = num;
u8 ii;
for(ii = 4; ii > 0; ii--)
{
LED_5com7seg_dispBuf[ii-1] = LED_7p7seg_Table[num % 10];
num /= 10;
/* //如果是加快了扫屏频率或者是FM下面降频,调用DispNum_5com7seg时,有可能
//出现还在执行这个函数的时候,扫描以及把前面的“0”显示出来的效果
*/
if((curMenu == MENU_FRE))
{
if(numtmp < 1000)
{
LED_5com7seg_dispBuf[0] = LED_7p7seg_BLANK;
}
else if(numtmp < 100)
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_BLANK;
}
else if(numtmp < 10)
{
LED_5com7seg_dispBuf[2] = LED_7p7seg_BLANK;
}
}
}
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示播放时间
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void LED_playtime_display_7p7seg(void)//@"LED_7COM_API"
{
u8 a,b;
a = t_msc.cur_time.min / 10;
b = t_msc.cur_time.min - 10*a;
LED_5com7seg_dispBuf[0] = LED_7p7seg_Table[a];
LED_5com7seg_dispBuf[1] = LED_7p7seg_Table;
a = t_msc.cur_time.sec / 10;
b = t_msc.cur_time.sec - 10*a;
LED_5com7seg_dispBuf[2] = LED_7p7seg_Table[a];
LED_5com7seg_dispBuf[3] = LED_7p7seg_Table;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示音量
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_VOL_7p7seg(void)//@"LED_7COM_API"
{
DispNum_7p7seg(sys_ctl.volume);
LED_5com7seg_dispBuf[1] = LED_7p7seg_V;
LED_5com7seg_dispBuf[0] = LED_7p7seg_BLANK;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示音量
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_Voice_Switch(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_V;
LED_5com7seg_dispBuf[2] = LED_7p7seg_0;
if(bVoiceOn)
{
LED_5com7seg_dispBuf[3] = LED_7p7seg_N;
}
else
{
LED_5com7seg_dispBuf[3] = LED_7p7seg_F;
}
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示音量的‘V’和'P'
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_VOLUP_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_V;
LED_5com7seg_dispBuf[2] = LED_7p7seg_P;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示音量的‘D’和'N'
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_VOLDOWN_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_D;
LED_5com7seg_dispBuf[2] = LED_7p7seg_N;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示RTC
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_RTC_7p7seg(void)//@"LED_7COM_API"
{
#if TASK_RTC_EN
u16 disptmp;
disptmp = t_time.hour*100+ t_time.minute;
DispNum_7p7seg(disptmp);
LED_5com7seg_dispBuf[4] |= LED_DDOT;
if((HalfsecFlash))
{
if(t_clock.sub_sta == STA_SHOW_CLOCK)//&&(!Alarm_Rtc_Flag))
LED_5com7seg_dispBuf[4] &= ~LED_DDOT;
}
if((HalfsecFlash)&&(clockset_count >= (RETURN_TIME -1))&&(clockset_count < RETURN_TIME_RTCSET))
{
if(t_clock.set_sta == STA_SET_TIME_HOUR)
{
LED_5com7seg_dispBuf[0] = 0;
LED_5com7seg_dispBuf[1] = 0;
}
else if(t_clock.set_sta == STA_SET_TIME_MIN)
{
LED_5com7seg_dispBuf[2] = 0;
LED_5com7seg_dispBuf[3] = 0;
}
}
#endif
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示FM模式下的频率
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_FRE_7p7seg(void)@"LED_7COM_API"
{
u16 fmfrq;
fmfrq = t_fm.freq / 10;
DispNum_7p7seg(fmfrq);
if(LED_5com7seg_dispBuf[0] == LED_7p7seg_0)
LED_5com7seg_dispBuf[0] = LED_7p7seg_BLANK;
LED_5com7seg_dispBuf[4] |= LED_FM;
LED_5com7seg_dispBuf[4] |= LED_FM_DOT;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示输入的数字
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_Input_Number_7p7seg(void)@"LED_7COM_API"
{
DispNum_7p7seg(inputNum);
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示MP3模式下的播放时间和当前在线媒体:SD或者USB
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void MENU_Play_7p7seg(void)@"LED_7COM_API"
{
LED_playtime_display_7p7seg();
LED_5com7seg_dispBuf[4] |= /*LED_PLAY | */LED_DDOT;
if (fs_cur_dev() != DEVICE_UDISK)
LED_5com7seg_dispBuf[4] |= LED_SD;
else
LED_5com7seg_dispBuf[4] |= LED_USB;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示播放模式
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_Play_Mode_7p7seg(void)@"LED_7COM_API"
{
LED_5com7seg_dispBuf[0] = LED_7p7seg_BLANK;
LED_5com7seg_dispBuf[1] = LED_7p7seg_repeatTable[(u8)sys_ctl.mode_play][0];
LED_5com7seg_dispBuf[2] = LED_7p7seg_repeatTable[(u8)sys_ctl.mode_play][1];
LED_5com7seg_dispBuf[3] = LED_7p7seg_repeatTable[(u8)sys_ctl.mode_play][2];
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示文件序号和当前在线媒体:SD或者USB
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_Next_7p7seg(void)@"LED_7COM_API"
{
DispNum_7p7seg(t_msc.music_num);
//LED_5com7seg_dispBuf[4] |= LED_PLAY;
if (fs_cur_dev() != DEVICE_UDISK)
LED_5com7seg_dispBuf[4] |= LED_SD;
else
LED_5com7seg_dispBuf[4] |= LED_USB;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示文件序号和当前在线媒体:SD或者USB
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_ALLNUM_7p7seg(void)@"LED_7COM_API"
{
DispNum_7p7seg(t_msc.music_total);
//LED_5com7seg_dispBuf[4] |= LED_PLAY;
if (fs_cur_dev() != DEVICE_UDISK)
LED_5com7seg_dispBuf[4] |= LED_SD;
else
LED_5com7seg_dispBuf[4] |= LED_USB;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示当前电台序号
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_FMNext_7p7seg(void)@"LED_7COM_API"
{
DispNum_7p7seg(t_fm.ch_sel);
LED_5com7seg_dispBuf[1] = LED_7p7seg_P;
LED_5com7seg_dispBuf[0] = LED_7p7seg_BLANK;
LED_5com7seg_dispBuf[4] |= LED_FM;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示REC 录音
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_Rec(void)@"LED_7COM_API"
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_R;
LED_5com7seg_dispBuf[2] = LED_7p7seg_E;
LED_5com7seg_dispBuf[3] = LED_7p7seg_C;
if (fs_cur_dev() == DEVICE_UDISK)
LED_5com7seg_dispBuf[4] |= LED_USB;
else if (fs_cur_dev() == DEVICE_SDMMC)
LED_5com7seg_dispBuf[4] |= LED_SD;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示-sp-扩音器用
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_Spear(void)@"LED_7COM_API"
{
LED_5com7seg_dispBuf[0] = LED_7p7seg__;
LED_5com7seg_dispBuf[1] = LED_7p7seg_S;
LED_5com7seg_dispBuf[2] = LED_7p7seg_P;
LED_5com7seg_dispBuf[3] = LED_7p7seg__;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示”PC“
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_PCconnect_7p7seg(void)@"LED_7COM_API"
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_P;
LED_5com7seg_dispBuf[2] = LED_7p7seg_C;
//LED_5com7seg_dispBuf[4] |= LED_USB;
}
/*----------------------------------------------------------------------------*/
/**@brief LED关闭
@param 无
@return 无
@note 空函数,留待扩展
*/
/*----------------------------------------------------------------------------*/
void Menu_OFF_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_0;
LED_5com7seg_dispBuf[2] = LED_7p7seg_F;
LED_5com7seg_dispBuf[3] = LED_7p7seg_F;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示”NO“
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_NULL_7p7seg(void)//@"LED_7COM_API"
{
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示”NO“
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_NO_Device_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[1] = LED_7p7seg_N;
LED_5com7seg_dispBuf[2] = LED_7p7seg_0;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示”NO“
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_NO_Music_7p7seg(void)//@"LED_7COM_API"
{
Menu_NO_Device_7p7seg();
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,暂停时的菜单显示
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_Pause_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[0] = LED_7p7seg_P;
LED_5com7seg_dispBuf[1] = LED_7p7seg_A;
LED_5com7seg_dispBuf[2] = LED_7p7seg_U;
LED_5com7seg_dispBuf[3] = LED_7p7seg_S;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示当前使用的EQ
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void Menu_EQ_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[0] = LED_7p7seg_BLANK;
LED_5com7seg_dispBuf[1] = LED_7p7seg_eqTable[sys_ctl.eq_num][0];
LED_5com7seg_dispBuf[2] = LED_7p7seg_eqTable[sys_ctl.eq_num][1];
LED_5com7seg_dispBuf[3] = LED_7p7seg_eqTable[sys_ctl.eq_num][2];
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示”LINE“
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void MENU_linein_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[0] = LED_7p7seg_L;
LED_5com7seg_dispBuf[1] = LED_7p7seg_I;
LED_5com7seg_dispBuf[2] = LED_7p7seg_N;
LED_5com7seg_dispBuf[3] = LED_7p7seg_E;
LED_5com7seg_dispBuf[4] |= LED_AUX;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示”----“
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void MENU_Waiting_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[0] = LED_7p7seg_L;
LED_5com7seg_dispBuf[1] = LED_7p7seg_0;
LED_5com7seg_dispBuf[2] = LED_7p7seg_A;
LED_5com7seg_dispBuf[3] = LED_7p7seg_d;
}
/*----------------------------------------------------------------------------*/
/**@brief LED显示函数,显示”HI“
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void MENU_Power_on_7p7seg(void)//@"LED_7COM_API"
{
LED_5com7seg_dispBuf[0] = LED_7p7seg_H;
LED_5com7seg_dispBuf[1] = LED_7p7seg_I;
LED_5com7seg_dispBuf[2] = LED_7p7seg_F;
LED_5com7seg_dispBuf[3] = LED_7p7seg_I;
}
/*----------------------------------------------------------------------------*/
/**@brief LED初始化函数,不显示
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void LED_7p7seg_Init(void)@"TASK_RECORD_SEG_1"
{
#if (!SAME_COM_P)
p_disp_buff2_value[0] = 0;
p_disp_buff2_value[1] = 0;
p_disp_buff2_value[2] = 0;
p_disp_buff2_value[3] = 0;
p_disp_buff2_value[4] = 0;
p_disp_buff2_value[5] = 0;
p_disp_buff2_value[6] = 0;
ALL_COM_DIRIN;
ALL_COM_OFF;
#endif
LED_COM_DIR |= 0xFE; //P20保持不变
COM_T = 0;
}
#pragma constseg=LED_7p7s_CONST
const H menu_LED_7p7seg[] =
{
Menu_NULL_7p7seg,
Menu_EQ_7p7seg,
Menu_VOL_7p7seg,
Menu_FRE_7p7seg,
Menu_Input_Number_7p7seg,
Menu_NO_Music_7p7seg,
MENU_Play_7p7seg,
Menu_Play_Mode_7p7seg,
Menu_Next_7p7seg,
Menu_Pause_7p7seg,
Menu_NO_Device_7p7seg,
MENU_Power_on_7p7seg,
MENU_Waiting_7p7seg,
MENU_linein_7p7seg,
Menu_FMNext_7p7seg,
Menu_PCconnect_7p7seg,
Menu_OFF_7p7seg,
Menu_VOLUP_7p7seg,
Menu_VOLDOWN_7p7seg,
Menu_RTC_7p7seg,
Menu_Rec,
Menu_Spear,
Menu_ALLNUM_7p7seg,
Menu_Voice_Switch,
};
#pragma constseg=default
/*----------------------------------------------------------------------------*/
/**@brief 7p7s LED 显示函数
@param menu_number,需要显示的菜单号码
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void DispMenu_LED_7p7seg(u8 menu_number)//@"LED_7P7S_API"
{
u8 i;
void (*p)(void);
p = menu_LED_7p7seg[menu_number];
returnCount = 0;
for(i=0;i<5;i++)
LED_5com7seg_dispBuf = LED_7p7seg_BLANK;
(*p)();
IE_EA = 0;
led_value_set();
IE_EA = 1;
}
/*----------------------------------------------------------------------------*/
/**@brief 显示函数,根据指定的菜单号显示相应的菜单
@param menu_number 需要显示的菜单号码
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void DispMenu(u8 menu_number)//@"LED_7P7S_API"//@"DealMsg"
{
if(menu_number != MENU_INPUT_NUM)
inputNum = 0;
#ifdef LED_7P7S_EN
syslastbatval= 0xff;//更新电池显示
DispMenu_LED_7p7seg(menu_number);
#endif
}
__near_func void DispBat(void)
{
u8 static __idata count;
//if(sys_ctl.disp_bat_val != syslastbatval)
{
LED_5com7seg_dispBuf[4] &= ~LED_FULL;
LED_5com7seg_dispBuf[4] &= ~LED_HALF;
if((curMenu != MENU_OFF)&&(curMenu != MENU_POWER_ON))
{
if(sys_ctl.disp_bat_val == 2)
{
LED_5com7seg_dispBuf[4] |= LED_FULL;
}
else if(sys_ctl.disp_bat_val == 1)
{
LED_5com7seg_dispBuf[4] |= LED_HALF;
}
else if(sys_ctl.disp_bat_val == 0)
{
if(HalfsecFlash)
{
LED_5com7seg_dispBuf[4] |= LED_HALF;
}
}
else
{
if(batchargecout == 1)
{
}
else if(batchargecout == 2)
{
LED_5com7seg_dispBuf[4] |= LED_HALF;
}
else
{
LED_5com7seg_dispBuf[4] |= LED_FULL;
LED_5com7seg_dispBuf[4] |= LED_HALF;
}
}
}
if(LED_5com7seg_dispBuf[4]&LED_HALF)
p_disp_buff2_value[0] |= BIT(4);
else
p_disp_buff2_value[0] &= ~BIT(4);
if(LED_5com7seg_dispBuf[4]&LED_FULL)
p_disp_buff2_value[2] |= BIT(6);
else
p_disp_buff2_value[2] &= ~BIT(6);
}
//syslastbatval = sys_ctl.disp_bat_val;
}
#define BitCHK_0(REG,POS) ((REG & (1 << POS)) == 0x00)
/*----------------------------------------------------------------------------*/
/**@brief 7脚LED扫描函数,逐次点灯每个LED的每一段(P21 ~ P27)
@param 无
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
__near_func void LED_7p7seg_Scan(void)
{
static u8 __idata count = 0;
u8 com_seg_first_off;
u8 dis_seg = 0,dir_temp = 0,out_temp = 0;
DispBat();
/*if (COM_T == 8)
{
count = 8;
LineInCheck(); //复用检测
EarphoneCheck();
DCINCheck();
} */
if(sys_ctl.backlight_sta == 0)
{
ALL_COM_OFF;
ALL_COM_DIRIN;
return;
}
if (count > 6)
{
count = 0;
COM_T++;
}
if(COM_T > 6) //复用检测时注意修改此处
COM_T = 0;
dis_seg = p_disp_buff2_value[COM_T];
//if(count == COM_T) //SEG及COM同一IO情况不存在
//{
// count += 1;
//}
while(count<7)
{
if(count == COM_T) //SEG及COM同一IO情况不存在
{
count ++;
}
if(BitCHK_0(dis_seg,count))
{
count++;
// break;
}
else
{
break;
}
}
dis_seg = dis_seg & BIT(count);
count++;
//同一个P口的时候
//out_temp = LED_COM;
dir_temp = LED_COM_DIR;
dir_temp = 0xff;
dir_temp &= ~((1 << COM_T) | dis_seg);
out_temp |= (1 << COM_T);
LED_COM = out_temp;
LED_COM_DIR = dir_temp; //点亮一段
#if (!SAME_COM_P) //数码管的口,不在同一个P口上
ALL_COM_OFF;
ALL_COM_DIRIN;
if(LED_COM&BIT(0))
{
LED_COM_0_ON;
}
if(LED_COM&BIT(1))
{
LED_COM_1_ON;
}
if(LED_COM&BIT(2))
{
LED_COM_2_ON;
}
if(LED_COM&BIT(3))
{
LED_COM_3_ON;
}
if(LED_COM&BIT(4))
{
LED_COM_4_ON;
}
if(LED_COM&BIT(5))
{
LED_COM_5_ON;
}
if(LED_COM&BIT(6))
{
LED_COM_6_ON;
}
if((dir_temp&BIT(0)) == 0)
{
COM_DIR0_OUT;
}
if((dir_temp&BIT(1)) == 0)
{
COM_DIR1_OUT;
}
if((dir_temp&BIT(2)) == 0)
{
COM_DIR2_OUT;
}
if((dir_temp&BIT(3)) == 0)
{
COM_DIR3_OUT;
}
if((dir_temp&BIT(4)) == 0)
{
COM_DIR4_OUT;
}
if((dir_temp&BIT(5)) == 0)
{
COM_DIR5_OUT;
}
if((dir_temp&BIT(6)) == 0)
{
COM_DIR6_OUT;
}
#endif
// count++;
}
/*------------------------------------------------------3--------------------------*/
/**@brief 根据7脚LED的真值表进行映射(每段输出高的IO记为COM端 7*7)COM:0~6 SEG:1~7
@param 无
@return 无
@note
*/
/*------------------------------------------------------------------------------*/
void led_value_set(void)@"LED_7COM_API"
{
u8 tmpbuf[7];
memset(tmpbuf, 0, 7);
if(LED_5com7seg_dispBuf[0]&BIT_A) tmpbuf[0] |= BIT(1);
if(LED_5com7seg_dispBuf[0]&BIT_B) tmpbuf[0] |= BIT(2);
if(LED_5com7seg_dispBuf[0]&BIT_C) tmpbuf[3] |= BIT(0);
if(LED_5com7seg_dispBuf[0]&BIT_D) tmpbuf[4] |= BIT(0);
if(LED_5com7seg_dispBuf[0]&BIT_E) tmpbuf[0] |= BIT(3);
if(LED_5com7seg_dispBuf[0]&BIT_F) tmpbuf[1] |= BIT(0);
if(LED_5com7seg_dispBuf[0]&BIT_G) tmpbuf[2] |= BIT(0);
if(LED_5com7seg_dispBuf[1]&BIT_A) tmpbuf[1] |= BIT(2);
if(LED_5com7seg_dispBuf[1]&BIT_B) tmpbuf[1] |= BIT(3);
if(LED_5com7seg_dispBuf[1]&BIT_C) tmpbuf[4] |= BIT(1);
if(LED_5com7seg_dispBuf[1]&BIT_D) tmpbuf[1] |= BIT(5);
if(LED_5com7seg_dispBuf[1]&BIT_E) tmpbuf[1] |= BIT(4);
if(LED_5com7seg_dispBuf[1]&BIT_F) tmpbuf[2] |= BIT(1);
if(LED_5com7seg_dispBuf[1]&BIT_G) tmpbuf[3] |= BIT(1);
if(LED_5com7seg_dispBuf[2]&BIT_A) tmpbuf[4] |= BIT(3);
if(LED_5com7seg_dispBuf[2]&BIT_B) tmpbuf[2] |= BIT(4);
if(LED_5com7seg_dispBuf[2]&BIT_C) tmpbuf[3] |= BIT(4);
if(LED_5com7seg_dispBuf[2]&BIT_D) tmpbuf[5] |= BIT(0);
if(LED_5com7seg_dispBuf[2]&BIT_E) tmpbuf[5] |= BIT(2);
if(LED_5com7seg_dispBuf[2]&BIT_F) tmpbuf[3] |= BIT(2);
if(LED_5com7seg_dispBuf[2]&BIT_G) tmpbuf[4] |= BIT(2);
if(LED_5com7seg_dispBuf[3]&BIT_A) tmpbuf[6] |= BIT(5);
if(LED_5com7seg_dispBuf[3]&BIT_B) tmpbuf[5] |= BIT(6);
if(LED_5com7seg_dispBuf[3]&BIT_C) tmpbuf[4] |= BIT(5);
if(LED_5com7seg_dispBuf[3]&BIT_D) tmpbuf[5] |= BIT(3);
if(LED_5com7seg_dispBuf[3]&BIT_E) tmpbuf[3] |= BIT(5);
if(LED_5com7seg_dispBuf[3]&BIT_F) tmpbuf[5] |= BIT(4);
if(LED_5com7seg_dispBuf[3]&BIT_G) tmpbuf[4] |= BIT(6);
if(LED_5com7seg_dispBuf[4]&LED_DDOT) tmpbuf[2] |= BIT(3);
if(LED_5com7seg_dispBuf[4]&LED_USB) tmpbuf[5] |= BIT(1);
if(LED_5com7seg_dispBuf[4]&LED_SD) tmpbuf[0] |= BIT(5);
if(LED_5com7seg_dispBuf[4]&LED_FM) tmpbuf[2] |= BIT(5);
if(LED_5com7seg_dispBuf[4]&LED_FM_DOT) tmpbuf[6] |= BIT(4);
if(LED_5com7seg_dispBuf[4]&LED_HALF) tmpbuf[0] |= BIT(4);
if(LED_5com7seg_dispBuf[4]&LED_FULL) tmpbuf[2] |= BIT(6);
memcpy(p_disp_buff2_value, tmpbuf, 7);
}
#endif
#ifndef _LED_7P7SEG_H_
#define _LED_7P7SEG_H_
#ifdef LED_7P7S_EN
//与LED显示相关的全局变量声明
extern u8 __idata curMenu;
extern u8 returnCount;
extern u16 __idata inputNum;
extern bool __bdata HalfsecFlash;
void DispNum_7p7seg(u16 num);
void LED_playtime_display_7p7seg(void);
extern void LED_7p7seg_Init(void);
extern void Menu_VOL_7p7seg(void);
extern void Menu_VOLUP_7p7seg(void);
extern void Menu_VOLDOWN_7p7seg(void);
extern void Menu_FRE_7p7seg(void);
extern void Menu_Input_Number_7p7seg(void);
extern void MENU_Play_7p7seg(void);
extern void Menu_Play_Mode_7p7seg(void);
extern void Menu_Next_7p7seg(void);
extern void Menu_FMNext_7p7seg(void);
extern void Menu_NO_Device_7p7seg(void);
extern void Menu_NO_Music_7p7seg(void);
extern void Menu_Pause_7p7seg(void);
extern void Menu_EQ_7p7seg(void);
extern void MENU_Waiting_7p7seg(void);
extern void MENU_linein_7p7seg(void);
extern void Menu_NULL_7p7seg(void);
extern void MENU_Power_on_7p7seg(void);
extern __near_func void LED_7p7seg_Scan(void);
extern void Menu_PCconnect_7p7seg(void);
extern void Menu_OFF_7p7seg(void);
extern void Menu_RTC_7p7seg(void);
void led_value_set(void);
extern void DispMenu(u8 menu_number);
#define BIT_A 0x40 //-bit6
#define BIT_B 0x20 //-bit5
#define BIT_C 0x10 //-bit4
#define BIT_D 0x08 //-bit3
#define BIT_E 0x04 //-bit2
#define BIT_F 0x02 //-bit1
#define BIT_G 0x01 //-bit0
#define LED_HALF BIT_A
#define LED_FULL BIT_B
#define LED_USB BIT_C
#define LED_SD BIT_D
#define LED_DDOT BIT_E
#define LED_AUX 0
#define LED_FM BIT_G
#define LED_FM_DOT BIT_F
#define LED_7p7seg_0 (BIT_A | BIT_B | BIT_C | BIT_D | BIT_E | BIT_F)
#define LED_7p7seg_1 (BIT_B | BIT_C)
#define LED_7p7seg_2 (BIT_A | BIT_B | BIT_G | BIT_E | BIT_D)
#define LED_7p7seg_3 (BIT_A | BIT_B | BIT_G | BIT_C | BIT_D)
#define LED_7p7seg_4 (BIT_B | BIT_C | BIT_F | BIT_G)
#define LED_7p7seg_5 (BIT_A | BIT_C | BIT_D | BIT_F | BIT_G)
#define LED_7p7seg_6 (BIT_A | BIT_C | BIT_D | BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_7 (BIT_A | BIT_B | BIT_C)
#define LED_7p7seg_8 (BIT_A | BIT_B | BIT_C | BIT_D | BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_9 (BIT_A | BIT_B | BIT_C | BIT_D | BIT_F | BIT_G)
#define LED_7p7seg_V (BIT_B | BIT_C | BIT_D | BIT_F | BIT_E)
#define LED_7p7seg__ (BIT_G)
#define LED_7p7seg_P (BIT_A | BIT_B | BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_E (BIT_A | BIT_D | BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_A (BIT_A | BIT_B | BIT_C | BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_L (BIT_D | BIT_E | BIT_F)
#define LED_7p7seg_R (BIT_E | BIT_G)
#define LED_7p7seg_D (BIT_B | BIT_C | BIT_D | BIT_E | BIT_G)
#define LED_7p7seg_S (BIT_A | BIT_C | BIT_D | BIT_F | BIT_G)
#define LED_7p7seg_I (BIT_B | BIT_C)
#define LED_7p7seg_G (BIT_B | BIT_A | BIT_C | BIT_D | BIT_F | BIT_G)
#define LED_7p7seg_F (BIT_A | BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_N (BIT_A | BIT_B | BIT_C | BIT_E | BIT_F)
#define LED_7p7seg_o (BIT_C | BIT_D | BIT_E | BIT_G)
#define LED_7p7seg_C (BIT_A | BIT_D | BIT_E | BIT_F)
#define LED_7p7seg_K (BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_J (BIT_B | BIT_C | BIT_D)
#define LED_7p7seg_Z (BIT_A | BIT_B | BIT_D | BIT_E | BIT_G)
#define LED_7p7seg_U (BIT_B | BIT_C | BIT_D | BIT_E | BIT_F)
#define LED_7p7seg_H (BIT_B | BIT_C | BIT_E | BIT_F | BIT_G)
#define LED_7p7seg_T (BIT_A | BIT_E | BIT_F)
#define LED_7p7seg_d (BIT_B | BIT_C | BIT_D | BIT_E| BIT_G)
#define LED_7p7seg_BLANK 0x0
#define LED_LED_7p7seg_ALL_ON LED_LED_7p7seg_8
enum
{
MENU_NULL,
MENU_EQ,
MENU_VOLUE,
MENU_FRE,
MENU_INPUT_NUM,
MENU_NO_FILE,
MENU_PLAY,
MENU_PLAY_MODE,
MENU_PLAY_NUM,
MENU_PAUSE,
MENU_NO_DEVICE,
//MENU_NAMETIME,
MENU_POWER_ON,
MENU_WAITING,
MENU_LINEIN,
MENU_FM_NUM,
MENU_USBDevice,
MENU_OFF,
MENU_VOLUE_UP,
MENU_VOLUE_DOWN,
MENU_TIME,
MENU_REC,
MENU_SPEAKER,
MENU_PLAY_ALL_NUM,
Menu_VOICE_ONOFF,
};
#define RETURN_TIME 4
#define RETURN_TIME_RTCSET 10
#endif
#endif |
打赏
-
查看全部打赏
|