首页 > 其他分享 >四位阳数码管显示 stm32

四位阳数码管显示 stm32

时间:2023-05-19 22:25:12浏览次数:45  
标签:595 void stm32 数码管 InitStruct GPIO 四位 define

 

 

#ifndef __LED595_H
#define __LED595_H
#include "main.h"
#define SDI_595   PCout(8) /*1bit数据*/
#define SCLK_595  PCout(9) /*将串行数据锁存到并口驱动LED,一个高低电平变化*/
#define LOAD_595  PCout(10) /*将串行数据锁存到并口驱动LED,一个高低电平变化*/

void led595_init(void);// 相关GPIO初始化
void SendByte(uint8_t byte);//发送一位数码管数据
void freshData(void);//显示新数据
void seg_test(void);//测试

////位带操作,实现51类似的GPIO控制功能
////具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
////IO口操作宏定义
//#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
//#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
//#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 
////IO口地址映射
//#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C 
//#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C 
//#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C 
//#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C 
//#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C 
//#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C    
//#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C    

//#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808 
//#define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08 
//#define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008 
//#define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408 
//#define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808 
//#define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08 
//#define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08 
// 
////IO口操作,只对单一的IO口!
////确保n的值小于16!
//#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出 
//#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入 

//#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出 
//#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 

//#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出 
//#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入 

//#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出 
//#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入 

//#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出 
//#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入

//#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出 
//#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入

//#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出 
//#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入

#endif /* __LED595_H */

 

 

#include "led595.h"
//const uint8_t seg7led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴数码管显示码
// 依次是 0,1,2,---,9
const uint8_t seg7led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //共阳数码管显示码

void led595_init(void)// 相关GPIO初始化
{
    
    
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  __HAL_RCC_GPIOC_CLK_ENABLE (  );
     
  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}

void SendByte(uint8_t byte)//发送一位数码管数据
{
   uint8_t i;
     LOAD_595=0;
     SCLK_595=0;
    for(i=0;i<8;i++)
    {
        if((byte&0x80)==0x80)
            SDI_595=1;
        else
            SDI_595=0;    
        SCLK_595=1;
        SCLK_595=1;
        SCLK_595=0;
        byte=byte<<1;
  }    

}
void freshData(void)//显示新数据
{
  LOAD_595=1;
    LOAD_595=1;
    LOAD_595=0;
}
void seg_test(void)//测试
{
  uint8_t j;   
    uint8_t i;
    uint8_t byte;    
    for(j=0;j<10;j++)
    {
    byte =seg7led[j];
        byte =byte&0x7F;//点亮小数点
        SendByte(byte);//发送一位数码管数据
        freshData();//显示新数据
    HAL_Delay(2000);
    }

}

 

标签:595,void,stm32,数码管,InitStruct,GPIO,四位,define
From: https://www.cnblogs.com/excellentHellen/p/17416448.html

相关文章

  • STM32 开发工具集 All In One
    STM32开发工具集AllInOneSTM32F103C8T6STM32的3种启动模式自举加载程序Bootloader从程序闪存存储器自举从系统存储器自举从内部SRAM自举https://cdn.xgqfrms.xyz/STM32/STM32F103x8B_DS_CH_V10.pdfhttps://www.st.com/resource/en/application_note/cd001......
  • 关于STM32Cube_FW_F1_V1.8.0内的example顶层程序设计逻辑 与 RTC_Calendar增补
     Examples内程序结构STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Examples内程序结构分析如下:使用外设XXX向工程添加 stm32f10x_XXX.c修改stm32f10x_conf.h 在stm32f1xx_hal_msp.c中写 外设XXX写初始化程序在stm32f1xx_it.c中写中断服务程序在main.c中写配置程......
  • STM32 单片机烧录程序的方式 All In One
    STM32单片机烧录程序的方式AllInOneSTM32F103C8MCU微控制器MPU微处理器https://www.st.com/zh/microcontrollers-microprocessors/stm32f103c8.htmlhttps://www.st.com/zh/microcontrollers-microprocessors/stm32f103.html烧录方式Stlink-V2仿真器/Stlink-V3......
  • 记录stm32多重ADC模式
    为什么要使用多重ADC模式呢?主要是馋多重ADC模式下可以轻易实现采样率翻倍的效果实现原理可以参考这篇ADI的文章:交织采样ADC基础的基本原理|亚德诺半导体(analog.com)总结:解决了单个ADC采样需要等待转换结束才能继续采样的问题,代价是使用更多的ADC上个......
  • PB6接SCL,PB7接SDA,IIC通信访问 24C02, STM32F103的HAL版本
    在野火霸道板子上,已有at24c02,256个字节。/*测试代码*/staticuint8_tflag;uint8_tdata_w[]={1,2,3,4,5};uint8_tdata_r[5]={0};AT24CXX_Init();//初始化IIC接口flag=AT24CXX_Check();//检查器件if(flag==0){u16Writ......
  • 一位共阴数码管实验
    光控LED一位共阴数码管实验实验目的数码管依次显示0-9理论按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应......
  • STM32+HAL库+SHT30温湿度传感器模块I2C通讯数字型
    模块与接线SHT30模块与引脚SCL-------PA4SCL--------PA5实现步骤:  1、IIC地址 0x45(板子上有)  2、启动温湿度测量写入0x2c0x06  3、延时10ms,等待测量结束  4、读测量值,发读指令,延时1ms,接收测量结果。  5、采样值转换为温度值、湿度值程序代......
  • 激光切割机打标机雕刻机打码机控制系统上位机源码,完全自主开发,控制系统用stm32f407平
    激光切割机打标机雕刻机打码机控制系统上位机源码,完全自主开发,控制系统用stm32f407平台开发,上位机用C#开发,上位机具备x.y.z手动控制功能,圆弧插补,画正弦波,直线,往复运动,回原点,激光开关控制,强度设定等功能,速度和移动距可设置,圆弧插补输入半径即可。在上位机点击导入坐标文件会打开选......
  • co2激光切割机控制系统上位机C#源码,stm32f407控制板源码,可用于雕刻机,切割机,写字机,点胶
    co2激光切割机控制系统上位机C#源码,stm32f407控制板源码,可用于雕刻机,切割机,写字机,点胶机。标价为最低价,谢绝还价功能描述:1.自动解析G代码并在主界面还原图形显示2.可手动操作xy轴3.显示g代码坐标文件4.回原点控制。5.支持图形缩放,鼠标拖动YID:622500643037657099......
  • 激光切割机雕刻机桌面打标机打码机点胶机写字机上位机C#源码STM32F407控制板源码
    激光切割机雕刻机桌面打标机打码机点胶机写字机上位机C#源码STM32F407控制板源码可用在各类切割机、雕刻机、打标机、点胶机、写字机、打孔机控制板STM32F407支持3轴手动操作,鼠标单击运行距离和速度可设置,通信方式为串口轴控模式:两轴和三轴三轴模式可调节z轴作为升降和角度控......