standfly 2019-07-01
本文提供基于Texas Instruments 公司开发的Tiva C Series的系统板 ––—- TM4C123GH6PM ,以及DY - Tiva - PB v3.0 的拓展板实现呼吸灯算法。
核心思路是通过循环调整亮灭的时间,总时间一定,使灭的时间与亮的时间成反比
int i = 0, j = 0, flag = 0; int m = 180, n = 180, t = 180, q = 180; //设置系统时钟为50MHz SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // 端口GPIO F使能,F0引脚解锁NMI功能 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // 使能 GPIO F模块 HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; // 开锁 PORT F HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= GPIO_PIN_0; // 解锁 F0 引脚 HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0; // 重新上锁 // 设置GPIO方向 GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0); // PF0设置为输出 GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0); // 蓝LED灯初始态:灭 // 设置PA4为输出 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 使能 GPIO A模块 GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_4); // PA4设置为输出 GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,1<<4); // 绿LED灯初始态:灭 // 设置PD6为输出 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); // 使能 GPIO D模块 GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6); // PD6设置为输出 GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,1<<6); // 红LED灯初始态:灭 // while(1) // 死循环,main函数没有结束 { GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0 << 0); // 蓝色LED灯:亮 for(i = m; i > 0; i--) for(j = m; j > 0; j--); // 软件延时 GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 1 << 0); // 蓝色LED灯:灭 for(i = q - m; i > 0; i--) for(j = q - m; j > 0; j--); // 软件延时 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 0 << 4); // 绿色LED灯:亮 for(i = m; i > 0; i--) for(j = m; j > 0; j--); // 软件延时 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 1 << 4); // 绿色LED灯:灭 for(i = n - m; i > 0; i--) for(j = n - m; j > 0; j--); // 软件延时 GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, 0 << 6); // 红色LED灯:亮 for(i = m; i > 0; i--) for(j = m; j > 0; j--); // 软件延时 GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, 1 << 6); // 红色LED灯:灭 for(i = t - m; i > 0; i--) for(j = t - m; j > 0; j--); // 软件延时 if((m == 0) && (flag == 0)) flag = 1; if(!flag) m--; else { if(m < n) m++; else flag = 0; } }
<!DOCTYPE html><html lang="en"><head>. background-color: black;margin: 0 auto;margin-top: 200px;widt