用定时器实现流水灯

本文介绍了如何使用定时器配置和GPIO接口实现流水灯效果。通过设置RCC配置HSE时钟,定时器配置计数模式,GPIO配置LED端口,并结合延时函数,实现了LED灯的交替亮灭,形成流水效果。
摘要由CSDN通过智能技术生成
#include <stm32f4xx.h>

#define GPIO_Pin_6                 0x0040  /* LED2 */

#define GPIO_Pin_7   0x0080  /* LED1 */

#define PLL_M 8
#define PLL_N 336
#define PLL_P 2
#define PLL_Q 7

void RCC_config(void);
void TIMER_config(void);
void GPIO_Config(void);
void Delay_ms(int nCount);

int main()
{
RCC_config();
TIMER_config();
GPIO_Config();
while(1)
{
// Pin_7灭,Pin_6亮
GPIOF->ODR &= ~GPIO_Pin_6;  
GPIOF->ODR |= GPIO_Pin_7;   
Delay_ms(1000);
// Pin_6灭,Pin_7亮
GPIOF->BSRRL |= GPIO_Pin_6;
GPIOF->BSRRH |= GPIO_Pin_7;

51单片机使用定时器实现流水灯程序主要是利用定时器的计数功能周期性地切换LED灯的状态,以达到动态显示的效果。一般步骤如下: 1. **初始化定时器**: 首先配置定时器工作模式,比如使用8051系列的定时器T0,通常需要设置为模式1,即自动重装定时器模式。 ```c TMOD = 0x01; // 设置T0为模式1 TH0 = 0xFF; // 初始化高8位计数值 TL0 = 0xFD; // 初始化低8位计数值,形成延时时间 ``` 2. **设定中断触发条件**: 让定时器溢出(定时器最大值减1后再次等于0)时引发中断。 ```c ET0 = 1; // 开启定时器T0溢出中断 IE = 1 << TF0; // 启动中断允许控制寄存器,打开TF0中断标志 ``` 3. **编写中断服务程序(ISR)`: 当定时器溢出时,进入ISR,在这里改变灯的状态并清除溢出标志。 ```c void Timer0_ISR(void) interrupt 1 { if (TF0) { // 检查是否溢出 P1 ^= 0b11111111; // 变换灯的状态,例如P1口的7位LED灯,异或操作会循环切换灯亮灯灭 TF0 = 0; // 清除溢出标志,准备下一次计数 } } ``` 4. **主程序中启动定时器**: 开启外部中断源,并启用GATE引脚,使得定时器能够启动中断。 ```c EX0 = 1; // 开启外部中断 EA = 1; // 全局中断使能 ``` 5. **处理其他任务**: 主程序可以继续执行其他任务,当定时器的中断被响应时,LED灯状态会随之变化。 注意:流水灯的具体连接方式取决于硬件电路布局,通常是将LED串联到单片机的I/O口上,然后通过轮流点亮各段LED来实现流水效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值