龙空技术网

STM32 学习4 寄存器编程跑马灯示例

编程圈子 399

前言:

现时大家对“net走马灯远吗”大体比较重视,咱们都需要了解一些“net走马灯远吗”的相关文章。那么小编同时在网络上汇集了一些对于“net走马灯远吗””的相关资讯,希望你们能喜欢,各位老铁们快快来学习一下吧!

一、说明

本章节对前一篇内容进行适当修改,通过寄存器操作控制开发板8个LED灯点亮、熄灭。

二、项目架构三、源代码及说明1. 跑马灯

#include"stm32f10x.h"#include "stm32f10x_lib.h"#include<stdio.h>void SystemInit(){}// 简单的延迟操作void delay(u32 i){	while(i--);}void init(int position){  // 设置通用推挽输出	GPIOC_CRL &= ~(0x0f<<(4*position)); 	GPIOC_CRL |= (3<<4*position);}void on(int position){	GPIOC_BSRR = (1<<(16+position));}void off(int position){	GPIOC_BSRR=(1<<(position));}int main(void){	int diff=2;	int j;	// 打开GPIOC时钟	RCC_APB2ENR |= 1<<4;  // 初始化8个引脚,全设置为熄灭	for(j=0;j<8;j++){		init(j);		off(j);	}	while(1){		// 重复设置8个引脚		for(j=0;j<8;j++){			on(j);			delay(0xfffff);			off(j);			delay(0xfffff);		}	}}
2. 显示数值
#include"stm32f10x.h"#include "stm32f10x_lib.h"#include<stdio.h>	void SystemInit(){}// 简单的延迟操作void delay(u32 i){	while(i--);}void init(int position){  // 设置通用推挽输出	GPIOC_CRL &= ~(0x0f<<(4*position)); 	GPIOC_CRL |= (3<<4*position);}/** 打开一个引脚*/void on(int position){	GPIOC_BSRR = (1<<(16+position));}/** 关闭一个引脚*/void off(int position){	GPIOC_BSRR=(1<<(position));}void onArray(int array[], int len){	int j;	for(j=0;j<len;j++){		on(array[j]);	}}void allOff(){	int j;	for(j=0;j<8;j++){		off(j);	}}void light1(){	int arr[] = {1, 2};	onArray(arr, 2);}void light2(){	int arr[] = {0,1,6,4,3};	onArray(arr, 5);}void light3(){	int arr[] = {0,1,6,2,3};	onArray(arr, 5);}void light4(){	int arr[] = {5,6,1,2};	onArray(arr, 4);}int main(void){	int diff=2;	int j;	// 打开GPIOC时钟	RCC_APB2ENR |= 1<<4;  // 初始化8个引脚,全设置为熄灭	for(j=0;j<8;j++){		init(j);		off(j);	}	while(1){		// 重复设置8个引脚		light1();		delay(0xfffff);		allOff();		light2();		delay(0xfffff);		allOff();		light3();		delay(0xfffff);		allOff();		light4();		delay(0xfffff);		allOff();					}}

效果:

这里对一些函数进行了初步的封装。下次看看能不能再封装一个函数,可以调用以后直接用来显示数字。

标签: #net走马灯远吗