HNUST 嵌入式STM32开发板学号显示-2024

1.题目要求

在数码管上实现滚动显示学号

2.参考代码(中断方法)

/******************************学号显示************************
 * 学号显示
 ***********************************************************************/

#include "sys.h"
#include "delay.h"
#include "led.h"

#define uchar unsigned char
// 你的学号(10是不显示)
int StudentID[] = {1,2,3,4,5,6,7,8,9};
// 计算学号长度
int IDLength = (int)sizeof(StudentID) / sizeof(StudentID[0]);
// 时间秒
u8 second = 0;

/****************普通按键初始化函数********************
 * 通用定时器中断初始化
 * 这里时钟选择为APB1的2倍,而APB1为36M
 * arr:自动重装值。
 * psc:时钟预分频数
 * 这里使用的是定时器3!
 ******************************************************/
void TimerxInit(u16 arr, u16 psc)
{
	RCC->APB1ENR |= 1 << 1; // TIM3时钟使能
	TIM3->ARR = arr;		// 设定计数器自动重装值,10为1ms
	TIM3->PSC = psc;		// 预分频器7200,得到10KHZ的计数时钟

	TIM3->DIER |= 1 << 0; // 允许更新中断
	TIM3->CR1 |= 0x01;	  // 使能定时器3

	MY_NVIC_Init(1, 3, TIM3_IRQChannel, 2); // 抢占1,子优先级3,组2
}

/****************定时器3的中断函数********************
 * 定时器3的中断函数
 * 每次中断,second加一
 ******************************************************/
void TIM3_IRQHandler(void)
{
	if (TIM3->SR & 0x0001) // 溢出中断
	{
		second = (second++) % ((2 ^ 32) - 1);
	}
	TIM3->SR &= ~(1 << 0); // 清除中断标志位
}

// 板子初始化
void InitBand()
{
	Stm32_Clock_Init(6);
	delay_init(72);
	TimerxInit(9999, 7199); // 10Khz的计数频率,计数到10000表示1s
	LED_Init();
	LED_SEL = 0;
}
/***************************学号显示函数*****************************/
void ShowStudentID(int ID[])
{ // 变量定义
	uchar i, icode;
	// 8位显示
	for (i = 0; i < 8; i++)
	{
		// 第i位数码管显示数字(second用来移动数字)
		icode = ID[(i + second) % (IDLength)];
		// 显示数字
		SetLed(i, icode);
		// 频率控制(显示亮度控制,数值越大显示越亮)
		delay_us(200);
	}
}

/***************************主函数*****************************/
int main()
{
	// 板子初始化
	InitBand();
	// 主循环
	while (TRUE)
	{
		// 学号显示
		ShowStudentID(StudentID);
	}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值