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

news2025/1/15 14:29:04

 


 

学习目标:解决龙芯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					GPIOC

void 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://www.coloradmin.cn/o/19232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Springboot搭建java项目(十六)——Kafka的简介

kafka官网&#xff1a;http://kafka.apache.org/ 参考文献&#xff1a;大白话 kafka 架构原理 (qq.com) 一、kafka简介 Kafka最初由Linkedin公司开发&#xff0c;是一个分布式的、分区的、多副本的、多订阅者&#xff0c;基于zookeeper协调的分布式日志系统&#xff08;也可…

[附源码]计算机毕业设计JAVA后疫情下物业管理系统

[附源码]计算机毕业设计JAVA后疫情下物业管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

数据传输功能单元——DID参数定义

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;本文介绍数据传输服务的dataldentifier&#xff08;DID&#xff09;定义。 参考文章&#xff1a; 22服务-ReadDataByIdentifier 文章目录诊断协议那些事儿一、DID参数二、参数的定义总结一、DID参数 逻辑上&#…

MongoDB初识(一)

什么是MongoDB MongoDB 是一个以JSON为数据模型的文档数据库&#xff0c;文档来自于“JSON Document”&#xff0c;并非我们一般理解的PDF&#xff0c;WORD文档 MongoDB中的记录就是一个文档&#xff0c;它是由键值对组成的数据结构。MongoDB 文档类似于 JSON 对象。字段的值…

基于农产品(蔬菜)数据挖掘的分析与实现(Python+Spider)

目 录 摘 要 I Abstract II 1绪论 1 1.1研究背景 1 1.2项目来源 1 1.3研究目的 2 1.3研究现状 2 1.4主要内容及预期目标 3 1.4.1数据挖掘技术简述及优点 3 1.4.2程序设计思路 3 1.4.3节点布置方案 4 1.4.4预期目标 5 2农产品&#xff08;蔬菜&#xff09;价格形成机制及影响因素…

少儿编程 电子学会图形化 scratch编程等级考试四级真题答案解析(选择题)2022年9月

2022年9月Scratch四级真题解析 选择题(共15题,每题2分,共30分) 1、运行下列程序,说法正确的是 A、列表中的数字全部小于11 B、列表的长度为10 C、变量i最终值为20 D、列表中有大于10的数字 答案:D 考点分析:考查积木综合使用,重点考查列表积木的使用,开始向列表…

4.1.2 类非静态成员函数返回值转换与NRV优化

类非静态成员函数返回值转换与NRV优化 下述代码即是Point3d的整体函数原型&#xff0c;对于第33行的调用&#xff0c;正常理解即会首先调用默认构造函数生成一个临时对象&#xff0c;进而调用拷贝构造函数将临时对象拷贝给p2。但是实际上任何编译器都不会采用上述的调用方法&a…

四十七、Fluent近壁面处理

0. 前言 今天这篇文章&#xff0c;我们介绍一下近壁面处理的方式来求解湍流壁面物理规律。 前文四十五、四十六及本文四十七这三篇文章可以说是非常详细而系统的把壁面函数及相关理论全都介绍了一遍&#xff0c;大家可以参考进行设置。也希望大家能多多转发&#xff0c;点赞呀&…

MySQL中的锁机制、MyISAM表锁、MyISAM表级锁争用情况、MyISAM并发插入Concurrent Inserts、MyISAM的锁调度

前言: 关于读锁、写锁、乐观锁、悲观锁、行锁、表锁的理解可以看看以前我写的: 读锁、写锁、乐观锁、悲观锁、行锁、表锁 内部锁:在MySQL服务器内部执行的锁,以管理多个会话对表内容的争用。这种类型的锁是内部的,因为它完全由MySQL服务器执行,不涉及其他程序。 表级锁:…

JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来 —— 感受来自Ehcache的强大实力

大家好&#xff0c;又见面了。 作为《深入理解缓存原理与实战设计》系列专栏&#xff0c;前面几篇文章中我们详细的介绍与探讨了Guava Cache与Caffeine的实现、特性与使用方式。提到JAVA本地缓存框架&#xff0c;还有一个同样无法被忽视的强大存在 —— Ehcache&#xff01;它…

Windows同时安装两个版本JDK,并实现动态切换JAVA8或者JAVA11

一、需求 对于Java开发工程师来说&#xff0c;可能手头上同时负责不同的项目&#xff0c;但是由于历史的原因&#xff0c;Java版本可能没有做到统一升级&#xff0c;有的项目是使用JDK8版本&#xff0c;有的项目使用的是JDK11的版本&#xff0c;那这时候就需要我们电脑同时兼容…

html2canvas 行内元素边框样式生成问题解决(根据文字生成图片)

项目场景&#xff1a; 实现一个基于一段文字生成一张图片的需求&#xff0c;其中&#xff0c;有一段文字需要下划线&#xff0c;但是不是text-decoration:underline;的样式&#xff0c;因为下划线要距离字一段距离&#xff0c;接到这个方案时&#xff0c;第一时间想到的就是ht…

在x86的Docker中构建TVM的ARM环境

文章目录前言1. 加载arm-ubuntu镜像2. 安装acl库3. 编译arm运行时4. 编译在x86运行在arm4.1 在x86的环境中构建arm的编译环境4.2 测试x86-ubuntu与arm-ubuntu能否ping通4.3 调用RPC4.4 ACL的使用5. arm版的tvm编译和运行时环境5.1 构建arm版的tvm编译和运行时环境5.2 关于ubunt…

卷积版wav to image 训练实例

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

Java语言知识大盘点(期末总复习)二

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

2022年珠海市第三届半导体行业集成电路测试工竞赛成功举办

11月19日&#xff0c;2022年珠海市第三届职业技能大赛暨香洲区第七届“香洲工匠”职业技能竞赛半导体行业集成电路测试工竞赛在珠海这片创新热土上成功举办&#xff0c;48支集成电路高素质技能人才队伍齐聚香江&#xff0c;同台竞技&#xff0c;碰撞出绚烂的“芯”火花。 香洲区…

Spring之Gateway网关

前言 什么是网关&#xff1f;简单理解就是我们所有服务的入口&#xff0c;当我们使用了微服务以后&#xff0c;每个服务都会有一个对应的接口&#xff0c;比如我们有用户服务&#xff0c;订单服务等等&#xff0c;如果没有网关的话&#xff0c;那么前端是这样调用的 很明显app和…

Design a TinyURL

title: Notes of System Design No.02 — Design a TinyURL date: 2022-05-05 13:23:57 tags: 系统设计 categories: 系统设计 description: " Design a TinyURL" 1.Functional Requirements 1.长链接->短链接(写) 2.短链接->长链接(读) 3.可以设置超时时间…

unittest框架

unittest框架1.通过unittest框架创建测试2.通过unittest框架添加断言3.自动化用例管理TestLoader类的用法4.unittest智能封装等待1.通过unittest框架创建测试 1.必须继承于unittest.TestCase类 2.可以定义setUp和tearDown方法进行初始化&#xff0c;每条测试用例开始或结束会执…

谷歌浏览器-chrome浏览器占用电脑CPU过高、容易崩溃的解决办法

一、问题背景 最近特别难受的一点——谷歌浏览器总是莫名其妙崩溃&#xff0c;而且明明是只开了两三个标签页的情况下。 不管是谷歌自己的任务管理器&#xff0c;还是win10自带的任务管理器&#xff1b;在崩溃情况下&#xff0c;谷歌浏览器的电脑cpu占用率高达80以上。 网上…