学习目标:解决龙芯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
  4. 百度网盘链接:链接:https://pan.baidu.com/s/1IefafwZ2jURKRxdIwVe1ew

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

  1. 【龙芯1B】:LCD显示图片文字背景色前景色、小创语音控制lcd显示、数码管倒计时

    项目场景:     闲来无事,写了几个关于嵌入式技能大赛的任务.希望对大家有所帮助.本文开发板由百科荣创的龙芯1b开发板支持,关于嵌入式技能大赛的开发板.  LCD显示图片&文字&背景 ...

  2. 【龙芯1B】:有源蜂鸣器例程

    前言 大家对龙芯1B200有任何问题都可以私信我,大家的关注才是我不断更新的动力. 可能私信不能很及时的回,大家稍微谅解一下,看到立马就回. 一.蜂鸣器介绍 这里简单的介绍一下大家众所周知的蜂鸣器,蜂 ...

  3. 【国产之光】:龙芯1B(嵌入式方向)

    自从嵌入式1B的出产,我就开始了解了,毕竟是嵌入式方向的工程师,不管什么岗位都爱国,不过的确国产的一出自然想去看看国产之光,也希望祖国芯片事业越来越好.(作为一名博主当然说这些就像说废话)那么我们开始 ...

  4. 【龙芯1B】:龙芯1B200字号修改程序(基于龙芯1B200)

    嵌入式芯片与系统设计竞赛开发板 项目场景:   由于龙芯的资料很少,于是想普及一下龙芯1B的字号修改例程.希望对大家有所帮助,如有不妥之处,可联系博主!一切的资源都是为了传播学习,让大家都能学会,这才 ...

  5. 龙芯1b(LS1B200)使用LVGL7.0.1组件 使用中文的坑

    问题 龙芯1b(LS1B200),使用LVGL库.无法正常显示中文字体问题. 问题查找 1.查看配置文件lvgl-7.0.1\lv_conf.h 在文件中发现龙芯已经帮助我们使用宏定义配置好了中文字库 ...

  6. 龙芯1b(LS1B200)使用LVGL7.0.1组件 按钮矩阵 实现简易计算器

    需求:通过按钮点击实现加减乘除的简易计算器. 1.我们使用矩阵按钮(lv_btnmatrix)快速创建布局,文本框(lv_textarea)显示结果. 2.在按钮回调中将点击结果加入文本框上显示. 矩 ...

  7. 龙芯1b(LS1B200)使用LVGL7.0.1组件的滑杆控件控制三色RGB灯的亮度

    需求:通过三个滑杆,分别控制RGB三色灯的红绿蓝颜色.并显示0-100%的滑动数值 在这里我们使用LVGL库的滑杆 (lv_slider)组件来控制数值,并绑定回调事件,在回调事件中控制RGB灯的颜色 ...

  8. 龙芯1B核心板,内核编译方法:实现usb转串口,即pl2303驱动的模块化安装使用

    龙芯1B核心板,内核编译方法,以usb转串口的方法为例 usb转串口的驱动,惯例使用的是pl2303驱动,在龙芯1B中也不例外,龙芯1B中使用的内核版本号是linux3.18,其中本身就带有pl230 ...

  9. 龙芯1B核心板QT4环境下,phonon+phonon_mplayer+mplayer,实现音频控制播放

    应用Phonon框架实质上分4个部分,你的程序,Phonon库,Phonon后端插件(phonon_backend),真正的后端. Phonon其实什么都不干,他只是提供了一套API接口,这套接口可以 ...

最新文章

  1. 基于 CoreText 实现的高性能 UITableView
  2. js如何运行python代码_python中执行javascript代码
  3. python 文件路径_「按需学Python」 1. Glob库遍历路径/文件
  4. 南京师范大学计算机技术调剂,南京师范大学2017年研究生调剂信息
  5. tokudb mysql_【MySQL】TokuDB引擎安装教程
  6. AutoScan-收集监视及办理器械
  7. Google:推荐几款好用的Chrome浏览器插件
  8. DropDownList 選項改變確認腳本
  9. Eclipse C/C++开发环境搭建
  10. Postman 报错SSL Error: Self signed certificate Disable SSL Verification
  11. L1-8 估值一亿的AI核心代码 (20 分)
  12. PLC可编程控制器的结构和工作原理
  13. Windows 10 20H2 微软MSDN官方正式版ISO镜像下载
  14. wunderlist_Wunderlist的6种开源替代品
  15. OpenCV之IplImage详解
  16. 字节跳动杨震原:A/B测试不是万能的,但不会一定不行 ​
  17. F. Asya And Kittens
  18. 【前端】CSS(十一)PC端品优购项目(下)
  19. root 无法修改文件权限
  20. [ue4] 着色器绑定(Shader Binding)

热门文章

  1. su oracle 登录不了,Oracle中su切换进去sqlplus登录失败的问题处理
  2. Mysql 新建用户并且授权用户的访问数据库权限以及可以对数据的操作类型
  3. 【BZOJ4372】烁烁的游戏 动态树分治+线段树
  4. 工信部装备司文件首提数字孪生关键技术
  5. 解决bug--解决VS2019“无法下载安装文件,请检查网络设置”问题
  6. ICDsoft主机半价优惠码推荐
  7. k8s编排nacos standalone模式踩坑实录
  8. 作业4: 用户体验分析——以 “师路南通网站” 为例
  9. 小米2020校招Android笔试题
  10. 浅析Kubelet如何上报状态