版权声明:让结局不留遗憾,让过程更加完美。 https://blog.csdn.net/Xiaomo_haa/article/details/86726288
呼吸灯2s一循环,由暗到亮,再由亮到暗。
main.c
/*******************************************************************************
* 文件名:main.c
* 描 述:呼吸灯2s一循环,由暗到亮,再由亮到暗。
* 作 者:小默haa
* 版本号:v1.0.0
* 日 期: 2019年1月31日
* 备 注:呼吸灯
*
*******************************************************************************/
#include <STC15F2K60S2.H>
#include "sys.h"
u8 Led_dat; //led显示状态
u16 PWM = 0;
void main(void)
{
u8 i;
All_Init();
Time0_Init();
Time1_Init();
Led_dat = 0x7f;
EA = 1;
while(1)
{
}
}
sys.c
#include "sys.h"
/*******************************************************************************
* 函数名 :All_Init
* 输入值 :无
* 返回值 :无
* 作者 :小默haa
* 时间 :2019年1月15日
* 功能描述:外设初始化
* 备注 :关闭所有外设
*******************************************************************************/
void All_Init(void)
{
P2 = (P2 & 0x1f) | 0x80; //打开Y4C(LED)
P0 = 0xff; //关闭LED
P2 = (P2 & 0x1f) | 0xe0; //打开Y7C(数码管)
P0 = 0xff; //关闭数码管
P2 = (P2 & 0x1f) | 0xa0; //打开Y5C
P0 = 0x00; //关闭蜂鸣器、继电器
P2 = P2 & 0x1f; //关闭Y4C,Y5C,Y6C,Y7C
}
//定时器1初始化
void Time1_Init(void)
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x91; //设置定时初值10us
TH1 = 0xff; //设置定时初值10us
TF1 = 0; //清除TF0标志
ET1 = 1; //允许定时器0中断
TR1 = 1;
EA = 0;
}
/*******************************************************************************
* 函数名 :Timer1
* 输入值 :无
* 返回值 :无
* 作者 :小默haa
* 时间 :2019年1月30日
* 功能描述:定时器1中断服务程序
* 备注 :实现呼吸灯
*******************************************************************************/
void Timer1(void) interrupt 3
{
static u16 t = 0, n = 0, flag_pwm = 0;
t ++;
if(t == 1000)
t = 0;
n ++;
if(n == 100)
{
n = 0;
if (flag_pwm == 0)
{
PWM ++;
if(PWM == 1000)
flag_pwm = 1;
}
else if (flag_pwm == 1)
{
PWM --;
if(PWM == 0)
flag_pwm = 0;
}
}
if(t < PWM)
Led_illume(0x00);
else
Led_illume(0xff);
}
led.c
#include "sys.h"
/*******************************************************************************
* 函数名 :Led_illume
* 输入值 :led数据
* 返回值 :无
* 作者 :小默haa
* 时间 :2019年1月20日
* 功能描述:LED点亮程序
* 备注 :根据传输进来的数据值,点亮相应LED
*******************************************************************************/
void Led_illume(u8 dat)
{
P2 = (P2 & 0x1f) | 0x80; //打开Y4C(LED)
P0 = dat;
P2 = P2 & 0x1f;
}