【龙芯1B】:74HC595数码管或74HC138数码管程序开发

article/2025/11/9 14:48:31


学习目标:解决龙芯1B:74HC595或74HC138数码管显示问题

        首先我们要知道数码管的原理;以74HC595为例,74HC595是具有三态输出功能(即具有高电平、低电平和高阻抗三种输出状态)的门电路。输出寄存器可以直接清除,具有100MHz的移位频率。

        详细看数据手册:

                (1条消息) 单片机数码管74HC595数据手册-单片机文档类资源-CSDN文库

        龙芯1B开发板     集成74HC595电路图:

                手册图:

开发流程:

        第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。方法:送位数据到595。

        第二步:目的:将位数据逐位移入74HC595,即数据串入方法:SH_CP产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送高位,再送低位。

        第三步:目的:并行输出数据。即数据并出方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据送入到输出锁存器。


STM32数码管显示代码:

        解决方法我可以根据STM32的代码思想来解决,当然这就是一名高级CV工程师必会的东西了,不过大部分也是因为STM32的代码生态比较好,要不然也用不上这种方法,所以我们更要支持国产,愿祖国越来越好。

        main.c:

#include "SysTick.h"
#include "smg.h"char smgduan[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F 数码管段选数据int main()
{int i;SysTick_Init(72);LED_Init();SMG_Init();while(1){for(i=0;i<16;i++){GPIO_Write(SMG_PORT,(int)~smgduan[i]);delay_ms(1000);}}
}

        smg.h:

#ifndef _SMG_H
#define _SMG_H#include "system.h"#define SMG_PORT_RCC			RCC_APB2Periph_GPIOC
#define SMG_PIN						GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
#define SMG_PORT					GPIOCvoid SMG_Init(void);#endif

        smg.c:

#include "smg.h"void SMG_Init()
{GPIO_InitTypeDef GPIO_InitStructure;//结构体定义RCC_APB2PeriphClockCmd(SMG_PORT_RCC,ENABLE);//打开GPIOC的时钟GPIO_InitStructure.GPIO_Pin=SMG_PIN;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;GPIO_Init(SMG_PORT,&GPIO_InitStructure);GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}

龙芯1B数码管代码:

        smg_drv.c:

/** smg_drv.c** created:2022.11.18*  author:LHB 数码管程序*/
#include "smg_drv.h"
#include <stdio.h>#include "ls1b.h"
#include "mips.h"
#include "ls1b_gpio.h"//74HC138
//#define  HC138_A(val)   GPIO_WriteBit(GPIOD, GPIO_Pin_12, (BitAction)val)
//#define  HC138_B(val)   GPIO_WriteBit(GPIOD, GPIO_Pin_13, (BitAction)val)
//#define  HC138_C(val)   GPIO_WriteBit(GPIOD, GPIO_Pin_14, (BitAction)val)//74HC595
#define  HC595_SI(val)  gpio_write(39,val)// GPIO_WriteBit(GPIOC, GPIO_Pin_6, (BitAction)val)
#define  HC595_RCK(val) gpio_write(48,val)// GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)val)
#define  HC595_SCK(val) gpio_write(49,val)//GPIO_WriteBit(GPIOC, GPIO_Pin_8, (BitAction)val)/*******************************
功  能:数码管端口初始化
参  数:无
返回值:无
*******************************/
void SMG_Init(void)
{gpio_enable(39,DIR_OUT);gpio_enable(48,DIR_OUT);gpio_enable(49,DIR_OUT);gpio_enable(45,DIR_OUT);gpio_enable(44,DIR_OUT);gpio_enable(43,DIR_OUT);gpio_enable(42,DIR_OUT);HC595_Send(0xff);
}/*******************************
功  能:HC595发送数据
参  数:dat    数据
返回值:无
*******************************/
void HC595_Send(unsigned char dat)
{unsigned char dat_buf = 0, i;for(i=0; i<8; i++){dat_buf = dat & 0x80;if (dat_buf)      //输出1bit数据{HC595_SI(1);    //将74HC595串行数据输入引脚设置为高电平}else{HC595_SI(0);    //将74HC595串行数据输入引脚设置为低电平}HC595_SCK(0);delay_us(1);HC595_SCK(1);delay_us(1);dat <<= 1;}HC595_RCK(0);delay_us(3);HC595_RCK(1);
}//显示的数字数组,      依次为0,   1,      2     3    4      5    6       7
unsigned char digivalue[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D,  0x07};unsigned char Display[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};				// 不带小数点
unsigned char Display_1[] = {0xbf,0x86,0xdb,0xcf,0xef,0xed,0xfd,0x87,0xff,0xef,0xff,0x00};	// 带小数点/*******************************
功  能:数码管位段控制
*******************************/
void SMG_Sele(unsigned char index)
{switch(index){case 0:gpio_write(45,1);gpio_write(44,0);gpio_write(43,0);gpio_write(42,0);break;case 1:gpio_write(45,0);gpio_write(44,1);gpio_write(43,0);gpio_write(42,0);break;case 2:gpio_write(45,0);gpio_write(44,0);gpio_write(43,1);gpio_write(42,0);break;case 3:gpio_write(45,0);gpio_write(44,0);gpio_write(43,0);gpio_write(42,1);break;default:gpio_write(45,0);gpio_write(44,0);gpio_write(43,0);gpio_write(42,0);break;}
}/**************************************************************
*功  能:动态数码管模拟
**************************************************************/
void hc595_Test(unsigned short num)
{unsigned char temp = 0;unsigned char j = 0;if(num >= 9999)num = 0000;for(j = 0; j < 10; j++){// 数据选择temp = Display[num / 1000];HC595_Send(temp);SMG_Sele(0);  //数码管显示数据delay_ms(1);// 选择数据temp = Display[num / 100%10];HC595_Send(temp);SMG_Sele(1);  //数码管显示数据delay_ms(1);// 选择数据temp = Display[num / 10%10];HC595_Send(temp);SMG_Sele(2);  //数码管显示数据delay_ms(1);// 选择数据temp = Display[num % 10];HC595_Send(temp);SMG_Sele(3);  //数码管显示数据delay_ms(1);}
}

运行结果:

        


总结

        需要详细工程请联系

  1. 关注微信公众号(嵌入式up)
  2. CSDN私信
  3. 工作微信:bulidupup

努力到无能为力,拼搏到感动自己。


http://chatgpt.dhexx.cn/article/smJVCuWR.shtml

相关文章

【74HC595芯片】核心驱动代码

介绍 74HC595是一个8位串行输入、并行输出的位移缓存器&#xff1a;并行输出为三态输出。 在SCK 的上升沿&#xff0c;串行数据由SDL输入到内部的8位位移缓存器&#xff0c;并由Q7’输出&#xff0c;而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存…

MSP430G2553 HC595 数码管 SPI 显示 时分秒

// Timer A0 interrupt service routine #pragma vectorTIMER0_A0_VECTOR __interrupt void Timer_A(void) {t_count (t_count 1) % 500; //500次2ms就是1sif (t_count 1){rtc_sec;if (rtc_sec 60){rtc_sec 0;rtc_min;if (rtc_min 60){rtc_min 0;rtc_hour;if (rtc…

嵌入式开发--IO口扩展--74HC595

嵌入式开发–IO口扩展&#xff0c;输出引脚 嵌入式开发经常遇到IO口不够的情况&#xff0c;更换引脚更多的单片机是一种选择&#xff0c;但最近两年单片机的价格翻着跟斗的往上涨&#xff0c;替代方便也有&#xff0c;就是通过IO口扩展芯片来实现。 本段说明摘自明微电子的说…

STM32+74HC595:带领你10分钟用对74HC595

使用的是STM32CBT8&#xff0c;小模块用起来性价比超级高&#xff0c;资源丰富&#xff0c;移植u/COS及HTTP、MQTT协议等等用起来简直欲罢不能&#xff0c;摇摇欲仙&#xff01; BUT&#xff1a;IO口资源太少了&#xff0c;我想让你驱动100个LED&#xff0c;你缺告诉我&#x…

74HC595芯片实现原理及跑马灯数码管应用程序-----day2

74HC595芯片应用-----day2 1.CMOS移位寄存器–74HC595 可串行输出控制下一级级联芯片。![在这里插入图片描述](https://img-blog.csdnimg.cn/2facff61a1d948d4a7c ![在这里插入图片描述](https://img-blog.csdnimg.cn/79b3b2b43dcc4b91ae4ec2c986149990.png 基础概念&#xff1…

【STM32学习】(14)两个74HC595控制四个数码管显示

74HC595是在单片机系统中常用的芯片之一他的作用就是把串行的信号转为并行的信号&#xff0c;常用在各种数码管以及点阵屏的驱动芯片&#xff0c; 使用74HC595可以节约单片机mcu的io口资源&#xff0c;用3个io就可以控制8个数码管的引脚&#xff0c;他还具有一定的驱动能力&…

基于STM32单片机的流水灯控制-74HC595

基于STM32单片机的流水灯控制-74HC595 冰果派-棉花糖V1.0开发板 文章目录 基于STM32单片机的流水灯控制-74HC595冰果派-棉花糖V1.0开发板[toc] 一 任务二 硬件电路如何设计1. IO口不够用2.74HC595D 三 程序怎么编写1.单片机怎么把数据给5952.写程序&#xff08;595驱动&#x…

STM32+74HC595

74HC595功能是将串行数据&#xff08;由SHCP\CLK、DS\DATA输入串行数据&#xff09;转换并行数据&#xff08;芯片上的QA~QH八个数据输出口&#xff09;; 具体工作方式是&#xff1a;由CLK提供时钟&#xff0c;DATA输入高低电平&#xff08;数据&#xff09;&#xff0c;CLK每…

74HC595的使用

介绍 74HC595是一个8位串行输入、并行输出的位移缓存器&#xff1a;并行输出为三态输出。在SCK 的上升沿&#xff0c;串行数据由SDL输入到内部的8位位移缓存器&#xff0c;并由Q7’输出&#xff0c;而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器…

stm32驱动hc595

根据网上资料&#xff1a; 595具体使用的步骤:第一步&#xff1a;目的&#xff1a;将要准备输入的位数据移入74HC595数据输入端上。方法&#xff1a;送位数据到_595。第二步&#xff1a;目的&#xff1a;将位数据逐位移入74HC595&#xff0c;即数据串入方法&#xff1a;SH产生一…

STM32实现74HC595控制

一、前言 本文主要是实出74HC595的简单控制功能实现&#xff08;学习笔记整理&#xff09;。 二、概述 &#xff08;一&#xff09;74HC595简述 74HC595是一个8位串行输入、平行输出的位移缓存器&#xff1a;平台行输出为三态输出。 在SCHCP的上升沿输入&#xff0c;在STCP的…

STM32学习记录——74HC595四位数码管显示

数模管作为STM32的一个重要外设&#xff0c;由于其成本低、稳定&#xff0c;被用于许多场景中。本篇文章来介绍下四位数码管的使用方法。 数码管显示 一、数码管的分类二、74HC595芯片&#xff08;串入并出&#xff09;三、原理图四、代码主要操作五、代码分析1.void HC595_GPI…

【74HC595】STM32 74HC595驱动程序

以下为.h文件&#xff1a; #ifndef __74HC595_H__ #define __74HC595_H__ #include "stm32f10x.h" #define SHCP_GPIO_PORT GPIOA #define SHCP_GPIO_CLK RCC_APB2Periph_GPIOA #define SHCP_GPIO_PIN GPIO_Pin_1 #defin…

RK3588+FPGA+Cameralink高速相机解决方案

1. 视频接入&#xff0c;其中可见使用LVDS&#xff0c;红外使用cameralink 2. H264低倍率压缩编码本地存储 3. H264压缩使用同步422接口或者网口UDP协议输出实时码流 4. 使用串口进行通讯&#xff0c;进行类似于可见、红外或者激光器或者地面控制软件等之间的通讯 5. 使用网…

【芯片使用】74HCHC595

实验平台&#xff1a;普中A2开发板&#xff0c;STC89C51RC芯片&#xff0c;11.0592M晶振。 文章目录 前言一、代码1.main.c2.HC595.c2.HC595.h 总结 前言 74HC595是一个8位串行输入、并行输出的位移缓存器&#xff1a;并行输出为三态输出。在SCK 的上升沿&#xff0c;串行数据…

HC595驱动数码管

74HC595是一个8位串行输入、并行输出的位移缓存器 引脚定义 Q0~Q7&#xff1a;并行输出 Q7’&#xff1a;串行输出 SH_CP&#xff1a;移位寄存器时钟输入 ST_CP&#xff1a;存储寄存器时钟输入 DS&#xff1a;串行输入 原理图 举例 共阴极数码管控制 #define uchar unsign…

保护手机号码不被应用窃取的有力措施

在使用手机过程中&#xff0c;经常遇到很多应用软件私自获取我们的手机号码并传播出去&#xff0c;导致我们手机经常接到很多莫名其妙的电话。 我们今天分享一种能够彻底屏蔽手机号码被非法获取的有效非法&#xff0c;也就是使用琢石模拟器对手机号码进行模拟&#xff0c;让应用…

安卓app服务器地址文件夹,查看安卓app的服务器地址

查看安卓app的服务器地址 内容精选 换一换 robox脚本里的docker run命令中的镜像名称要改成本地自己注册的名称。(名称为:镜像注册中的名称,也可以通过docker images查看)设置环境变量,将容器指定到GPU卡上运行。export DISPLAY=:0robox脚本中设置的DISPLAY号要与此处设置的…

虚拟手机的服务器地址和端口是什么,如何查看服务器地址和端口号

如何查看服务器地址和端口号 内容精选 换一换 本节操作介绍如何在移动设备上连接Linux实例。以iTerminal-SSH Telnet为例介绍如何在iOS设备上连接 Linux 实例,详细操作请参考IOS设备上登录Linux云服务器。以JuiceSSH为例介绍如何在Android设备上连接 Linux 实例,详细操作请参…

互联网早报:腾讯推出“微小号”,用虚拟手机号拨打电话收发短信

行业热点 1、腾讯推出“微小号”&#xff0c;用虚拟手机号拨打电话收发短信&#xff1b; 2、得物App:误操作发出数万 520 无门槛券,不是营销,订单算数&#xff1b; 3、滴滴网约车宣布进入南非市场&#xff0c;4 月将进入厄瓜多尔&#xff1b; 4、一季度抖音日活数据&#x…