杰理开发5脚7段数码管

5脚7段数码管对应图 -> 共阴 其实共阴共阳都一样 本文以共阴为目标

这是5个引脚对应的io口

cs1-5 -> pin1 -5  分别对应就好

一:

看引脚关系 得到

如图所示 5脚已经足够驱动2位7段数码管

这是杰理的输入输出与引脚宏定义 

依照具体的单片机具体设计

如图所示 有1A - 1G 2A - 2G每个数码管有7段,有4个开关,我们一上面1 2 3 4为扫描基础 就当1个开关

有7段 或者8段  -> 可以用一字节进行 每一位bit控制1段数码管 控制7段有一位bit不用 具体哪一位看大小端 一位字节 用bit控制每一段 我们用共用体 

如下

typedef union
{
    unsigned char byte;
    struct{
        unsigned char bit0:1;
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1;
    }Bits;
}ByteBit_Union;

/*数码管段显*/
extern ByteBit_Union DG1_Flag;
#define DG1_A DG1_Flag.Bits.bit0
#define DG1_B DG1_Flag.Bits.bit1
#define DG1_C DG1_Flag.Bits.bit2
#define DG1_D DG1_Flag.Bits.bit3
#define DG1_E DG1_Flag.Bits.bit4
#define DG1_F DG1_Flag.Bits.bit5
#define DG1_G DG1_Flag.Bits.bit6

extern ByteBit_Union DG2_Flag;
#define DG2_A DG2_Flag.Bits.bit0
#define DG2_B DG2_Flag.Bits.bit1
#define DG2_C DG2_Flag.Bits.bit2
#define DG2_D DG2_Flag.Bits.bit3
#define DG2_E DG2_Flag.Bits.bit4
#define DG2_F DG2_Flag.Bits.bit5
#define DG2_G DG2_Flag.Bits.bit6

这样每一段数码管都有了对应的bit位 

接下来就是扫描函数的编写

1:将整体作为4个总开关,进行对联合体每一位扫描 进行打开对应的数码管

2:或者利用这个二位数组进行对应开关

3:如图 也是利用二维数组 进行扫描 一个数组拿来判断哪一位 另一个二维数组扫描

采用的是第一种 代码如下

static u8 led_scan_flag = 0;
//扫描函数
void Led_scan_deal(unsigned char byte1,unsigned char byte2)
{
    DG1_Flag.byte = byte1;
    DG2_Flag.byte = byte2;
    //输入模式
    CS_1_IN_OUT();
    CS_2_IN_OUT();
    CS_3_IN_OUT();
    CS_4_IN_OUT();
    CS_5_IN_OUT();
    if(led_scan_flag == 0)
    {
        CS_1_OUT();
        CS_1_L();
        if(DG1_A)
            {
            CS_2_OUT();
            CS_2_H();
            }
        if(DG1_B)
            {
            CS_3_OUT();
            CS_3_H();
            }
        if(DG1_C)
            {
            CS_4_OUT();
            CS_4_H();
            }
        if(DG1_D)
            {
            CS_5_OUT();
            CS_5_H();
            }
    }
    if(led_scan_flag == 1)
    {
        gpio_set_direction(HBS117_CS2, 0);  // 输出方向
        CS_2_L();
        if(DG1_E)
            {
            CS_1_OUT();
            CS_1_H();
            }

        if(DG1_F)
            {
            CS_3_OUT();
            CS_3_H();
            }
        if(DG1_G)
            {
            CS_4_OUT();
            CS_4_H();
            }
        if(DG2_A)
            {
            CS_5_OUT();
            CS_5_H();
            }
    }
    if(led_scan_flag == 2)
    {
        CS_3_OUT();
        CS_3_L();
        if(DG2_B)
            {
            CS_1_OUT();
            CS_1_H();
            }
        if(DG2_C)
            {
            CS_2_OUT();
            CS_2_H();
            }
        if(DG2_D)
            {
            CS_4_OUT();
            CS_4_H();
            }
        if(DG2_E)
            {
            CS_5_OUT();
            CS_5_H();
            }
    }
    if(led_scan_flag == 3)
    {
        CS_4_OUT();
        CS_4_L();
        if(DG2_F)
            {
            CS_1_OUT();
            CS_1_H();
            }
        if(DG2_G)
            {
            CS_2_OUT();
            CS_2_H();
            }
    }
    led_scan_flag++;
    if(led_scan_flag >= 4)
        led_scan_flag = 0;
}

它的单位16进制数 

显示函数并不齐全 可按照实际需求进行编写

void led_deg_dis(u8 num1, u8 num2)  //分别写
{
    if(((num1 > 15) | (num1 < 0)) | ((num2 > 15) | (num2 < 0)))
        return;
    Led_scan_deal(led_table[num1],led_table[num2]);
}
void led_hex_dis(u16 num, BOOL flag)  //16进制转换显示 flag 1 开启0-99 显示 0 16进制显示 
{

    if(num < 0 || num > 255 )
    {
        DG1_Flag.byte = 0xff;
        DG2_Flag.byte = 0xff;
        Led_scan_deal(DG1_Flag.byte,DG2_Flag.byte);
        return;
    }
    if(flag && (num <= 100))
    {
        DG1_Flag.byte = led_table[num / 10];
        DG2_Flag.byte = led_table[num % 10];
        Led_scan_deal(DG1_Flag.byte,DG2_Flag.byte);
    }else
    {
        DG1_Flag.byte = led_table[num / 16];
        DG2_Flag.byte = led_table[num % 16];
        Led_scan_deal(DG1_Flag.byte,DG2_Flag.byte);
    }
}
 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
杰理(JerryScript)是一个轻量级的JavaScript引擎,它专为嵌入式设备和物联网应用而设计。在VS Code中搭建杰理开发环境可以提供便捷的代码编辑、调试和部署功能。以下是搭建杰理开发环境的步骤: 1. 安装VS Code:首先,你需要下载并安装Visual Studio Code(简称VS Code),它是一个轻量级的代码编辑器,支持多种编程语言和插件扩展。 2. 安装Node.js:杰理使用Node.js作为运行环境,因此你需要先安装Node.js。你可以从Node.js官方网站下载并安装适合你操作系统的版本。 3. 安装JerryScript插件:在VS Code中,你可以通过安装JerryScript插件来支持杰理开发。打开VS Code,点击左侧的扩展图标(或按下Ctrl+Shift+X),在搜索框中输入"JerryScript",然后点击安装按钮进行安装。 4. 配置杰理路径:安装完JerryScript插件后,点击左侧的扩展图标,找到JerryScript插件并点击设置按钮。在设置页面中,你需要配置杰理的路径。通常情况下,你可以在JerryScript的GitHub仓库中找到最新的发布版本,并将其下载到本地。 5. 创建项目:在VS Code中,你可以通过点击左侧的资源管理器图标(或按下Ctrl+Shift+E)来打开资源管理器。在资源管理器中,右键点击空白处,选择"新建文件夹"来创建一个新的项目文件夹。 6. 编写代码:在项目文件夹中,你可以创建一个JavaScript文件,并在其中编写杰理的代码。你可以使用VS Code提供的代码编辑功能来编写和修改代码。 7. 调试代码:在VS Code中,你可以使用JerryScript插件提供的调试功能来调试杰理的代码。你可以设置断点、单步执行代码,并查看变量的值和调用栈等信息。 8. 部署代码:在调试完成后,你可以使用JerryScript插件提供的部署功能将代码部署到目标设备上进行运行。你需要配置目标设备的连接信息,并选择相应的部署方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nuoxiaotao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值