c595四位数码管在STM32上计时显示

在某宝上买了这个四位数码管(3642BS)打算用来做项目,没想到给的例程只有51和arduino的,并没有给出STM32的驱动程序。在阅读了51的程序后大概了解了主要代码思路,花了一点时间把程序移植到了STM32上,写了一个计时的功能。和大家分享下。我手上的单片机是STM32f103C8T6.
我手上的这个四位数码管好像就是单独为时间显示制作的,第一、三、四位都是7段数码管,并非常见的8段数码管。只有第二位是带有时间显示分号的8位数码管。
主程序

//说明: 
//              ----------------------------------------------------------------
//              GND   电源地
//              VCC   接5V或3.3v电源
//              DIO   接PB12
//              RCLK  接PB13
//              SCLK  接PB14            
//              ----------------------------------------------------------------
#include "delay.h"
#include "sys.h"
#include "led4.h"
#include "timer.h"
#include "stm32f10x_tim.h"
int T=0;                                              //记录计时秒数
int main (void);
void led4show(int r,int j,int k,int l);
void ledout(u16 x);
 u8 d=40;                                        
  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用74HC595驱动四位数码管STM32F103库代码: ```c #include "stm32f10x.h" #define DATA_PIN GPIO_Pin_7 #define LATCH_PIN GPIO_Pin_6 #define CLOCK_PIN GPIO_Pin_5 void HC595_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = DATA_PIN | LATCH_PIN | CLOCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } void HC595_WriteByte(unsigned char data) { GPIO_ResetBits(GPIOB, LATCH_PIN); for (int i = 0; i < 8; i++) { if (data & 0x80) GPIO_SetBits(GPIOB, DATA_PIN); else GPIO_ResetBits(GPIOB, DATA_PIN); GPIO_SetBits(GPIOB, CLOCK_PIN); GPIO_ResetBits(GPIOB, CLOCK_PIN); data <<= 1; } GPIO_SetBits(GPIOB, LATCH_PIN); } void HC595_DisplayDigit(unsigned char digit, unsigned char position) { static const unsigned char digitCode[] = { 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 }; unsigned char code = digit < sizeof(digitCode) ? digitCode[digit] : 0; code |= position << 6; HC595_WriteByte(code); } void HC595_DisplayNumber(unsigned int number) { unsigned char digit[4]; digit[3] = number % 10; digit[2] = (number / 10) % 10; digit[1] = (number / 100) % 10; digit[0] = (number / 1000) % 10; HC595_DisplayDigit(digit[0], 0); HC595_DisplayDigit(digit[1], 1); HC595_DisplayDigit(digit[2], 2); HC595_DisplayDigit(digit[3], 3); } ``` 使用方法: ```c int main(void) { HC595_Init(); while (1) { for (int i = 0; i < 10000; i++) { HC595_DisplayNumber(i); for (int j = 0; j < 100000; j++); } } } ``` 其中,`HC595_DisplayDigit`函数用于在指定位置显示一个数字,`HC595_DisplayNumber`函数用于在四个位置上分别显示一个数字。在`main`函数中,可以使用`HC595_DisplayNumber`函数不断循环显示数字。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值