STM32 学习5 寄存器编程LED显示数字
Posted 编程圈子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 学习5 寄存器编程LED显示数字相关的知识,希望对你有一定的参考价值。
STM32 学习5 寄存器编程LED显示数字
本文对前一节程序稍加改动,用数码管显示0-9的数字。
一、使用宏定义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();
}
}
}
以上是关于STM32 学习5 寄存器编程LED显示数字的主要内容,如果未能解决你的问题,请参考以下文章