STM32——跑马灯实现

                                                       /*走马灯实现*/
							                               	/*实现原理:依次从头到尾点亮8个灯
							                                	*列如:第一个灯赋值低电平(点亮),
								                              	*延迟之后(暂未确定多少s),
								                              	*不使用灯寄存器之后,系统自动熄灭,							                              	
								                              	*在点亮下一个灯,依次往下
								                              	*/								

#include "stm32f10x.h"
#define uint unsigned int
void Delay(uint time);
 void LEDInit(uint i);
int main(){
	RCC->APB2ENR |= (1<<2);   //开启时钟,GPIOA属于总线APB2;  GPIOA对应APB2的第二位 0:为关闭(默认)  1:开启
  while(1)
	{
    uint i;
		for (i = 0; i < 8; i++){
			LEDInit(i);
			Delay(100000); //试运行
     // GPIOA->ODR |= 0xFFFFFFFF; //延迟之后给灯高电平(熄灭)
     // Delay(1000000); //试运行		
		}
		if (i >= 8){
			i = 0;	
		}
	//GPIOA->CRL = 0x11111111;    //推挽输出   把PA0,PA1,PA2,PA3,PA4,PA4,PA5,PA6,PA7配置成输出
  //输出寄存器
	//GPIOA->ODR &= 0xFFFFFFFE;  //让GPIOA输出0   默认输出低电平亮
 }
}
void SystemInit(void){


}
/*名称:   延迟函数
*功能:     延迟
*延迟级别:微妙级
*/
//传入1000000就是1s
void Delay(uint time){
	uint i;
	for (i = 0; i < time; i++){
		uint t = 11;
		while (t != 0){
			t--;
		}
	}
	
}
/*
描述:根据主函数传过来的值以依次点亮相对应的灯
*/
void LEDInit(uint i){
	 GPIOA->ODR = 0;
	switch(i){
		case 0: 
			GPIOA->CRL = 0x01;  //把PA0设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFFE; //把PA0设置为低电平
		  break;
		case 1: 
			GPIOA->CRL = 0x10;  //把PA1设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFFD; //把PA1设置为低电平
		  break;
		case 2: 
			GPIOA->CRL = 0x100;  //把PA2设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFFC; //把PA2设置为低电平
		  break;
		case 3: 
			GPIOA->CRL = 0x1000;  //把PA3设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFFB; //把PA3设置为低电平
		  break;
		case 4: 
			GPIOA->CRL = 0x10000;  //把PA4设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFFA; //把PA4设置为低电平
		  break;
		case 5: 
			GPIOA->CRL = 0x100000;  //把PA5设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFF9; //把PA5设置为低电平
		  break;
		case 6: 
			GPIOA->CRL = 0x1000000;  //把PA6设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFF8; //把PA6设置为低电平
		  break;
		case 7: 
			GPIOA->CRL = 0x1000000;  //把PA7设置为推免输出
		  GPIOA->ODR &= 0xFFFFFFF7; //把PA7设置为低电平
		  break;
		
	}
	
}


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FranzLiszt1847

嘟嘟嘟嘟嘟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值