74HC595点亮数码管

74hc595点亮数码管

1、初识74HC595

1.1、74HC595管脚介绍及逻辑表

74HC595引脚图及管脚介绍

1.2工作原理介绍

单片机系统中,常采用74HC595作为LED的静态显示接口。74HC595的管脚如上图所示。
该芯片内含8位串入、串/并出移位寄存器和8位三态输出锁存器。寄存器和锁存器分别有各
自的时钟输入(SRCLK和RCLK),都是上升沿有效。当SRCLK从低到高电平跳变时,串行输入数据(SER)移入寄存器:当RCLK从低到高电平跳变时,寄存器的数据置入锁存器。清除端(SRCLR)的低电平只对寄存器复位(Q7为低电平),而对锁存器无影响。当输出允许控制(E)为高电平时,并行输出(Q0~Q7)为高阻态,而串行输出(Q)不受影响。74HC595最多需要5根控制线,即SER、SRCLK、RCLK、SRCLR和E。其中SRCLR可以直接接到高电平,用软件来实现寄存器清零:如果不需要软件改变亮度,E可以直接接到低电
平,而用硬件来改变亮度。把其余三根线和单片机的/O口相接,即可实现对LED的控制。数据从SDI口送入74HC595,在每个SRCLK的上升沿,SER口上的数据移入寄存器,在SRCLK的第9个上升沿,数据开始从Q7移出。如果把第一个74HC595的Q7和第二个74HC595的SER相接,数据即移入第二个74HC595中,照此一个一个接下去,可任意多个。数据全部传送完后,给RCLK一个上升沿,寄存器中的数据即置入锁存器中。此时如果E为低电平,数据即从并口Q0~Q7输出,把Q0-Q7与LED的8段相接,LED就可以显示了。想要软件改变LED亮度,只需改变E的占空比就行了。

1.3,原理总结

由原理可知,当打开寄存器时,给高电平,数据传入寄存器中,此时须关闭锁存器脉冲(RCLK = 0),当数据全部传进寄存器中时,打开锁存器(RCLK = 1),并且打开输入允许控制位E = 0(原理图一般初始接高电平),数据就全部进入锁存器当中,此时74HC595配置完成。

2 数码管配置

2.1数码管编码表

2.1.1、共阴数码管引脚定义及其16进制码表

共阴数码管引脚定义

    code u8 Nixietube_Cd[] = {
        // 七段数码管显示0到F的编码表
        /*显示0~9*/
        0x3f, 0x06, 0x5b, 0x4f, 0x66,
        0x6d, 0x7d, 0x07, 0x7f, 0x6f,
        /*显示a~f*/
        0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,
        /*八段全熄灭,显示空,地址0x10*/
        0x00};

3 程序实现

##3.1

首先配置74HC595,给其写入一个位

void WriteOnebit(u8 b)
{
	NUM_SCK = 0;//根据自己原理图进行配置对应引脚名称
    NUM_SER = a;
    NUM_SCK = 1;
}

配置完成一个位的数据输入后,我们此时要知道,要使共阴数码管亮,就必须传入位选和段选两个信号值,共9位,如果是四个数码管,则为12位。
以4个数码管为例:
先设置一个拥有大小为4的数字,分别保存4位数码管的4个位值

u8 nixietube_buffer[4];
void Nixietube_Value_id(void)
{
    static u8 current_num = 0;
    u8 nixietube_code_temp;
    char i;

    NUM_RCK = 0;//此时先将锁存器低电平关掉

    if (current_num >= 4) {
        current_num = 0;
    }
  //给一个current_num,会输出四位 ,循环四次 依次输出0111 1011 1101  1110,进行位选
    for (i = 0; i < 4; i--) {
        if (i == current_num) {
            Wrinte_one_bit(0);
        } else {
            Wrinte_one_bit(1);
        }
    }

    nixietube_code_temp = nixietube_buffer[current_num];//将当前数码管显存中的值赋给nixietube_code_temp ,并进行移位操作,使其一一进入寄存器当中
//进行段选
    for (i = 0; i < 8; i++) {
        Wrinte_one_bit(nixietube_code_temp & 0x80);//取每次值的最高位
        nixietube_code_temp <<= 1;//进行左移
    }
    current_num++;
    NUM_RCK = 1;//此时将锁存器高电平打开
    NUM_OE  = 0;
}

此时完成了数码管的位选和段选,此时对数码管进行赋值
比如想输入2023

nixietube_buffer[0] = Nixietube_Cd[2];
nixietube_buffer[1] = Nixietube_Cd[0];
nixietube_buffer[2] = Nixietube_Cd[2];
nixietube_buffer[3] = Nixietube_Cd[3]

至此数码管显示2023就完成了

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HC32L13X是华大基础公司生产的一款单片机芯片,以下是它点亮数码管的示例代码: ```c #include "hc32l13x.h" #define LED_PORT PortE #define LED_PIN Pin02 #define SEG_PORT PortD #define SEG_PIN0 Pin00 #define SEG_PIN1 Pin01 #define SEG_PIN2 Pin02 #define SEG_PIN3 Pin03 #define SEG_PIN4 Pin04 #define SEG_PIN5 Pin05 #define SEG_PIN6 Pin06 #define SEG_PIN7 Pin07 #define DIG_PORT PortB #define DIG_PIN0 Pin00 #define DIG_PIN1 Pin01 #define DIG_PIN2 Pin02 #define DIG_PIN3 Pin03 /* 数码管编码表 */ const uint8_t segTab[16]={ 0x3f, //0 0x06, //1 0x5b, //2 0x4f, //3 0x66, //4 0x6d, //5 0x7d, //6 0x07, //7 0x7f, //8 0x6f, //9 0x77, //A 0x7c, //B 0x39, //C 0x5e, //D 0x79, //E 0x71 //F }; /* 数码管显示函数 */ void display(uint8_t dat) { uint8_t i, j; for(i=0; i<4; i++) { DIG_PORT = 1 << i; //选择第i位数码管 //在数码管上显示dat的第i位 for(j=0; j<8; j++) { SEG_PORT = segTab[dat >> (i*4+j) & 0x0001]; delay_ms(1); SEG_PORT = 0; } } } int main(void) { /* 端口初始化 */ M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = 1; //使能GPIO模块时钟 M0P_GPIO->PAADS &= ~(0x03<<16); //PA08,PA09设置为数字模式 M0P_GPIO->PADIR |= LED_PIN; //PE02设置为输出 M0P_GPIO->PBADS = 0; //PB00~PB03设置为数字模式 M0P_GPIO->PBDIR |= 0x0f; //PB00~PB03设置为输出 M0P_GPIO->PDDIR |= 0xff; //PD00~PD07设置为输出 while(1) { M0P_GPIO->PTDAT_b.PT02 = 0; //LED亮 display(0x1234); //显示0x1234 M0P_GPIO->PTDAT_b.PT02 = 1; //LED灭 display(0x5678); //显示0x5678 } return 0; } ``` 代码中使用了HC32L13X的GPIO模块来控制LED灯和数码管,通过选择不同的数码管和段选位来控制数码管上的数字。需要注意的是,此代码中的数码管是共阳数码管,如果使用共阴数码管需要将数码管编码表进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值