#include<ny8.h>呼吸灯代码
时间: 2023-09-10 16:13:30 浏览: 102
#include_iostream.h_
4星 · 用户满意度95%
以下是一个基于定时器中断的呼吸灯代码,使用了红色LED灯,可以根据需要修改GPIO口和LED颜色:
```
#include <ny8.h>
#define LED_PORT P1CR
#define LED_PIN 4 //红色LED在P1.4口
#define LIGHT_MAX 255 //最大亮度
#define LIGHT_MIN 0 //最小亮度
#define STEPS 20 //亮度调整步长
unsigned char light = LIGHT_MIN; //当前亮度
unsigned char fade_in = 1; //是否渐亮
void initTimer(void)
{
TM2PS = 0x03; //分频系数为 8
TL2 = 0x00; //清空定时器初值
TH2 = 0x00;
TIMIF = 0x00; //清空定时器中断标志
T2CON = 0x10; //启动定时器,开启定时器中断
EA = 1; //开启总中断
}
void main(void)
{
LED_PORT &= ~(1 << LED_PIN); //将LED引脚置为输出,初始低电平(LED灭)
initTimer(); //初始化定时器
while(1);
}
#pragma asm
_timer_isr:
push ar7
push ar6
push ar5
push ar4
push ar3
push ar2
push ar1
push ar0
inc light ;增加或减小当前亮度
jnb P1.4, _fade_out ;如果LED是开的,则执行渐暗
_fade_in:
mov A, light
jz _end_isr ;如果已经最亮了,退出中断
djnz A, _fade_in ;如果还没达到目标亮度,继续增加亮度
mov fade_in, 0 ;调整完毕,开始渐暗
reti
_fade_out:
mov A, light
jz _end_isr ;如果已经最暗了,退出中断
djnz A, _fade_out ;如果还没达到目标亮度,继续减小亮度
mov fade_in, 1 ;调整完毕,开始渐亮
_end_isr:
clr TM2IF ;清空定时器中断标志
pop ar0
pop ar1
pop ar2
pop ar3
pop ar4
pop ar5
pop ar6
pop ar7
reti
#pragma endasm
```
该代码使用定时器中断控制LED的亮度渐变,每次中断时调整LED的亮度,从而实现呼吸灯效果。
阅读全文