51_LanQiaoBei/题目/真题/13 第十三届国赛_左岚/第十三届国赛/Driver/Led.c
2025-04-13 01:02:19 +08:00

72 lines
1.4 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <Led.h>
static unsigned char temp = 0x00;
static unsigned char temp_old = 0xff;
// 亮码地址0-7是否使能
void Led_Disp(unsigned char addr, enable)
{
// 保证这两个变量的值不会因为函数结束而改变
static unsigned char temp_0 = 0x00;
static unsigned char temp_old_0 = 0xff;
// 更改当前状态
if (enable)
temp_0 |= 0x01 << addr;
else
temp_0 &= ~(0x01 << addr);
// 当前状态与之前的状态不同则进行操作更新led
if (temp_0 != temp_old_0)
{
P0 = ~temp_0;
P2 = P2 & 0x1f | 0x80;
P2 &= 0x1f;
temp_old_0 = temp_0;
}
}
void Beep(unsigned char flag)
{
static unsigned char temp = 0x00;
static unsigned char temp_old = 0xff;
if (flag)
temp |= 0x40;
else
temp &= ~0x40;
if (temp != temp_old)
{
P0 = temp;
P2 = P2 & 0x1f | 0xa0;
P2 &= 0x1f;
temp_old = temp;
}
}
void Relay(unsigned char flag)
{
static unsigned char temp = 0x00;
static unsigned char temp_old = 0xff;
if (flag)
temp |= 0x10;
else
temp &= ~0x10;
if (temp != temp_old)
{
P0 = temp;
P2 = P2 & 0x1f | 0xa0;
P2 &= 0x1f;
temp_old = temp;
}
}
void MOTOR(unsigned char flag)
{
if (flag)
temp |= 0x20;
else
temp &= ~0x20;
if (temp != temp_old)
{
P0 = temp;
P2 = P2 & 0x1f | 0xa0;
P2 &= 0x1f;
temp_old = temp;
}
}