用keil编写一个红绿灯程序
时间: 2024-05-03 07:19:51 浏览: 50
这里提供一个基于Keil的红绿灯程序,使用的是STM32F103C8T6开发板,LED分别连接在GPIOB的0、1、2引脚上,其中PB0输出红灯,PB1输出黄灯,PB2输出绿灯。
```c
#include <stm32f10x.h>
void Delay(uint32_t nCount);
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/* Configure PB0, PB1 and PB2 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while (1)
{
/* Turn on the red light */
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
Delay(1000000);
/* Turn on the yellow light */
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
Delay(500000);
/* Turn on the green light */
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB, GPIO_Pin_2);
Delay(1000000);
/* Turn off all lights */
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_2);
Delay(500000);
}
}
void Delay(uint32_t nCount)
{
for (; nCount != 0; nCount--);
}
```
程序的思路是通过循环控制红绿灯的状态,首先点亮红灯,然后延时一段时间,接着点亮黄灯,再次延时,最后点亮绿灯。程序中使用了一个简单的延时函数,每个延时时间可以根据需要进行调整。
阅读全文