数码之家

 找回密码
 立即注册
搜索
查看: 5745|回复: 12

[C51] 五脚三位数码管怎么编码驱动来个大佬发发代码

[复制链接]
发表于 2020-8-28 16:46:32 | 显示全部楼层 |阅读模式
五脚三位数码管怎么编码驱动来个大佬发发代码 悬赏中····

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2020-8-28 20:25:45 | 显示全部楼层

回帖奖励 +2 家元

这个要3态驱动,可以参考https://blog.csdn.net/q690189450/article/details/100629016编写
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:46:36 | 显示全部楼层
此贴必火此贴必火
回复 支持 反对

使用道具 举报

发表于 2020-8-29 00:55:43 | 显示全部楼层
以共阴或共阳的方式重新整理LED连接关系,再按照共阴或共阳的方式驱动。

只是,每个8字的编码都不一样。
回复 支持 反对

使用道具 举报

发表于 2020-8-29 04:03:44 | 显示全部楼层

回帖奖励 +2 家元

最简单的方法就是1/16 duty进行扫描,  就是说每次只点亮一个笔段,一个周期需要16次分别点亮每一段才能完整地显示"88度".
点亮其中一段的时候,用到的两个io是推挽输出,并且输出所需要的电平,其余全是悬空(比如说输入状态).延时一小段时间再换另外两个io组合.
具体哪两个io对应哪个笔段,你的图上已经写得很清楚了.

因为共有5个io,所以你稍微排一下应该就可以(用其中4个io)点亮2个笔段,这样就可以做到1/8 duty, 8次循环就可以显示全部内容.

打赏

参与人数 1家元 +16 收起 理由
2545889167 + 16 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-8-29 08:13:51 | 显示全部楼层

回帖奖励 +2 家元

看高手出招,跟着学习:praise:
回复 支持 反对

使用道具 举报

发表于 2020-8-29 21:33:07 | 显示全部楼层

回帖奖励 +2 家元

本帖最后由 dujq 于 2020-8-29 21:34 编辑

现在高人多啊,我这有7脚4位的




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2020-8-30 09:32:20 | 显示全部楼层

回帖奖励 +2 家元

本帖最后由 ploestar 于 2020-8-30 09:59 编辑

这个我做过,3位6脚,以前论坛有人也发过这帖子
回复 支持 反对

使用道具 举报

发表于 2020-8-30 10:07:12 | 显示全部楼层
我专门在淘宝找了这种类型的数码管,有5脚到7脚的,从两位到4位都有,不过品种很少。
这种结构的数码管适合IO吃紧的单片机系统,虽然驱动代码复杂点,但是硬件简洁。

数码管的亮度取决于IO的驱动能力和占空比。
如果等时扫描,笔画少的字符比较亮,笔画多的暗,可通调节占空比区别扫描不同笔画数的字符达到亮度平衡。
回复 支持 反对

使用道具 举报

发表于 2020-8-30 23:26:51 | 显示全部楼层
我们有带硬件LED驱动的单片机,可以直接驱动这种数码管,理论上n个IO可以驱动n*(n-1)个LED。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-31 10:00:32 | 显示全部楼层
ploestar 发表于 2020-8-30 09:32
这个我做过,3位6脚,以前论坛有人也发过这帖子

老哥代码发一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-31 10:01:48 | 显示全部楼层
ploestar 发表于 2020-8-30 09:32
这个我做过,3位6脚,以前论坛有人也发过这帖子

你以前那个百度链接失效了
回复 支持 反对

使用道具 举报

发表于 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

打赏

参与人数 1家元 +3 收起 理由
qiang7260 + 3 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-12 04:23 , Processed in 0.140400 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表