程序员后端和前端哪个难一些_程序员可以使用的寄存器

后端 (62) 2023-03-24 16:06

本文对前一节程序稍加改动,用数码管显示0-9的数字。

本文得到网友 @ScholarMartin 的指点,感谢热心网友。

本文尚未实现通过结构体操作寄存器,后面再学习。

一、使用宏定义GPIO要显示的位

// 定义一个宏可以设置显示或关闭显示
// 高16位设置8bit全打开
// 低16位通过求反关闭不显示的位
#define onArray(set) (GPIOC_BSRR = 0xFF0000 | (~set & 0xFFFF))

二、定义数码管显示数字

int matrix[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

以上分别定义了0-9的八段码显示数值,与二进制位对应。

三、主体程序

#include"stm32f10x.h"
#include "stm32f10x_lib.h"
#include<stdio.h>

// 定义一个宏可以设置显示或关闭显示
#define onArray(set) (GPIOC_BSRR = 0xFF0000 | (~set & 0xFFFF))
void SystemInit(){

}
// 简单的延迟操作
void delay(u32 i){
	while(i--);
}
void delayMs(){
	delay(0xfffff);
}
void init(int position){
  // 设置通用推挽输出
	GPIOC_CRL &= ~(0x0f<<(4*position)); 
	GPIOC_CRL |= (3<<4*position);
}


/**
 关闭一个引脚
*/
void off(){
	onArray(0x00);
}

void light(int number){
	int matrix[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
	onArray(matrix[number]);
}
int main(void){
	int j;
	// 打开GPIOC时钟
	RCC_APB2ENR |= 1<<4;
  // 初始化8个引脚
	for(j=0;j<8;j++){
		init(j);
	}
	// 灭灯
	off();
	while(1){
		// 轮换显示0到9
		for(j=0;j<10;j++){
			light(j);
			delayMs();
			off();
			delayMs();
		}
	}
}
程序员后端和前端哪个难一些_程序员可以使用的寄存器_https://bianchenghao6.com/blog_后端_第1张

程序员后端和前端哪个难一些_程序员可以使用的寄存器_https://bianchenghao6.com/blog_后端_第2张

上一篇

已是最后文章

发表回复