蓝桥杯 小蜜蜂 单元训练01:LED指示灯的基本控制
#include "stc15f2k60s2.h"
#include <intrins.h>
#define LED(x) \
{ \
P2 = P2 & 0x1f | 0x80; \
P0 = x; \
P2 &= 0x1f; \
}
typedef unsigned char u8; // 定义类型
u8 LedInfo; // LED灯数值,高低电平
u8 LedCounter = 0; // 闪烁计数
u8 TimerCounter = 0; // 定时器计数
u8 LedNum = 0; // 移位计数
void Timer0_Init(void) // 5毫秒@12.000MHz
{
AUXR |= 0x80; // 定时器时钟1T模式
TMOD &= 0xF0; // 设置定时器模式
TL0 = 0xA0; // 设置定时初始值
TH0 = 0x15; // 设置定时初始值
TF0 = 0; // 清除TF0标志
TR0 = 1; // 定时器0开始计时
ET0 = 1; // 使能定时器0中断
EA = 1;
}
void main()
{
Timer0_Init();
LedInfo = 0xff;
while (1)
{
LED(LedInfo);
}
}
void Timer0_Isr(void) interrupt 1
{
if (++TimerCounter == 100)
{
TimerCounter = 0;
if (LedCounter++ <= 5)
{
LedInfo = ~LedInfo; // 闪烁3次
}
else if (LedCounter <= 13)
{
LedInfo = LedInfo << 1; // 依次点亮
}
else
{
LedInfo = ~(0xff << ++LedNum); // 依次熄灭
if (LedNum == 8)
{
LedNum = 0;
LedCounter = 0;
}
}
}
}