若51单片机P1口接了8个LED,编写程序完成跑马灯程序要求大约1秒变化一次

若51单片机P1口接了8个LED,编写程序完成跑马灯程序要求大约1秒变化一次,第1张

//假设晶振12MHZ,P1控制8个LED低电平亮

#include "reg51.h"

unsigned int YSJS=0

signed char LED=0XFE

void main(void)

{

TMOD |= 0X10 //定时器1工作于方式1,16位定时器

TH1 = 0XFE //定时器1定时时间=500uS

TL1 = 0X0C

ET1 = 1//使能定时器1中断

TR1 =1

EA =1 //开总中断

while(1)

{

}

}

void TIMER1(void) interrupt 3//定时器1中断函数使用默认寄存器组

{

TH1 = 0XFE //定时器1定时时间=500us

TL1 = 0X0C

YSJS++

if(YSJS==2000) //500uS*2000=1000000uS=1S

{

P1 = LED

LED=LED<<1

LED=LED | 1

if(LED==0XFF)LED=0XFE

YSJS = 0

}

}

以下代码摘自 正点原子ALIENTEK 战舰 STM32F103 V3 开发板教程 《STM32F1 开发指南(库函数版)》第十三章 定时器中断实验。

#include "timer.h"

//通用定时器 3 中断初始化

//这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M

//arr:自动重装值。

//psc:时钟预分频数

//这里使用的是定时器 3!

void TIM3_Int_Init(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure

NVIC_InitTypeDef NVIC_InitStructure

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE)//①时钟 TIM3 使能

//定时器 TIM3 初始化

TIM_TimeBaseStructure.TIM_Period = arr//设置自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc//设置时钟频率除数的预分频值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1//设置时钟分割

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up//TIM 向上计数

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure) //②初始化 TIM3

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ) //③允许更新中断

//中断优先级 NVIC 设置

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn //TIM3 中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0//先占优先级 0 级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3 //从优先级 3 级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE //IRQ 通道被使能

NVIC_Init(&NVIC_InitStructure) //④初始化 NVIC 寄存器

TIM_Cmd(TIM3, ENABLE) //⑤使能 TIM3

}

//定时器 3 中断服务程序⑥

void TIM3_IRQHandler(void) //TIM3 中断

{

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查 TIM3 更新中断发生与否

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update )//清除 TIM3 更新中断标志

LED1=!LED1

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7793299.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存