在线时间18 小时
UID267378
注册时间2011-3-7
NXP金币0
TA的每日心情 | 开心 2021-1-14 20:09 |
---|
签到天数: 7 天 连续签到: 1 天 [LV.3]偶尔看看II
中级会员
 
- 积分
- 303
- 最后登录
- 2021-4-10
|
本帖最后由 深山明月 于 2019-11-23 00:21 编辑
main.c
#include "LPC11Uxx.h"
#define LED_NUM 4
const unsigned long led_mask[] = {1UL << 8, 1UL << 9, 1UL << 10, 1UL << 11};
/*----------------------------------------------------------------------------
initialize LED Pins
PIO1.8, PIO1.9 PIO1.10, PIO1.11
*----------------------------------------------------------------------------*/
void LED_Init (void)
{
LPC_SYSCON->SYSAHBCLKCTRL |= (1UL << 6); /* enable clock for GPIO */
/* configure GPIO as output */
LPC_GPIO->DIR[1] |= (led_mask[0] | led_mask[1] |led_mask[2] |led_mask[3]);
LPC_GPIO->CLR[1] |= (led_mask[0] | led_mask[1] |led_mask[2] |led_mask[3]);
}
/*----------------------------------------------------------------------------
Function that turns on requested LED
*----------------------------------------------------------------------------*/
void LED_On (unsigned int num)
{
if (num < LED_NUM)
{
LPC_GPIO->SET[1] |= led_mask[num];
}
}
/*----------------------------------------------------------------------------
Function that turns off requested LED
*----------------------------------------------------------------------------*/
void LED_Off (unsigned int num)
{
if (num < LED_NUM)
{
LPC_GPIO->CLR[1] = led_mask[num];
}
}
/*----------------------------------------------------------------------------
Function that outputs value to LEDs
*----------------------------------------------------------------------------*/
void LED_Out(unsigned int value)
{
int i;
for (i = 0; i < LED_NUM; i++)
{
if (value & (1<<i))
{
LED_On (i);
}
else
{
LED_Off(i);
}
}
}
void Delay(unsigned int DelayTimes)
{
LPC_CT16B0->TCR = 0x02;
LPC_CT16B0->PR = 12;
LPC_CT16B0->MR0 = DelayTimes;
LPC_CT16B0->IR = 0xFF;
LPC_CT16B0->MCR = 0x04;
LPC_CT16B0->TCR = 0x01;
while(LPC_CT16B0->TCR & 0x01);
LPC_CT16B0->TCR = 0x00;
}
void Delay_Us(unsigned int DelayTimes)
{
LPC_CT16B0->TCR = 0x02; // reset timer
LPC_CT16B0->PR = 48; // set prescaler
LPC_CT16B0->MR0 = DelayTimes;
LPC_CT16B0->IR = 0xFF; // rese all interrupts
LPC_CT16B0->MCR = 0x04; // stop timer on match
LPC_CT16B0->TCR = 0x01; // Start timer
while(LPC_CT16B0->TCR & 0x01);
LPC_CT16B0->TCR = 0x00; // Close timer
}
void Delay_Ms(unsigned int DelayTimes)
{
LPC_CT16B0->TCR = 0x02;
LPC_CT16B0->PR = 48000;
LPC_CT16B0->MR0 = DelayTimes;
LPC_CT16B0->IR = 0xFF;
LPC_CT16B0->MCR = 0x04;
LPC_CT16B0->TCR = 0x01;
while(LPC_CT16B0->TCR & 0x01);
LPC_CT16B0->TCR = 0x00;
}
int main(void)
{
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 7); // 打开CT16B0时钟
LED_Init ();
LED_Off(0);
LED_Off(1);
LED_Off(2);
LED_Off(3);
for(;;)
{
LED_On(0);
Delay_Ms(500);
LED_Off(0);
Delay_Ms(500);
}
}
|
|