利用 ARM芯片地址总线扩展的 I/O 来驱动 LED 显示,画出接线示意图,编写程序,控制实验平台的发光二极管 LED1,LED2,LED3,LED4,使它们有规律的点亮和熄灭,具体顺序如下: LED4 亮->LED3 亮->LED2 亮->LED1 亮->LED4 灭->LED3 灭->LED2 灭->LED1 灭,如此反复。 提示:4 个 LED 采用了共阳极的接法,分别与 SYSLED1-4 相连,通过SYSLED1-4 引脚的高低电平来控制发光二极管的亮与灭。当这几个管脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。
时间: 2023-08-07 13:19:09 浏览: 213
接线示意图如下:
```
_______
| |
LED4--| |
| |
LED3--| |
| |
LED2--| |
| |
LED1--| |
| |
| |
|_______|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
-----------ARM----------
```
程序代码如下:
```c
#include "stm32f10x.h"
void delay(int count) {
for (int i = 0; i < count; i++) {
for (int j = 0; j < 7200; j++);
}
}
int main() {
// 使能 PORT C 时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
// PC8-PC11 设为输出模式
GPIOC->CRH &= ~(GPIO_CRH_MODE8 | GPIO_CRH_MODE9 | GPIO_CRH_MODE10 | GPIO_CRH_MODE11);
GPIOC->CRH |= GPIO_CRH_MODE8_0 | GPIO_CRH_MODE9_0 | GPIO_CRH_MODE10_0 | GPIO_CRH_MODE11_0;
GPIOC->CRH &= ~(GPIO_CRH_CNF8 | GPIO_CRH_CNF9 | GPIO_CRH_CNF10 | GPIO_CRH_CNF11);
// 循环点亮和熄灭 LED
while (1) {
GPIOC->ODR = 0x0000;
GPIOC->ODR |= 0x0100; // LED4 亮
delay(1000);
GPIOC->ODR = 0x0000;
GPIOC->ODR |= 0x0200; // LED3 亮
delay(1000);
GPIOC->ODR = 0x0000;
GPIOC->ODR |= 0x0400; // LED2 亮
delay(1000);
GPIOC->ODR = 0x0000;
GPIOC->ODR |= 0x0800; // LED1 亮
delay(1000);
GPIOC->ODR = 0x0000;
delay(1000);
GPIOC->ODR = 0x0000;
GPIOC->ODR |= 0x0200; // LED3 灭
delay(1000);
GPIOC->ODR = 0x0000;
GPIOC->ODR |= 0x0400; // LED2 灭
delay(1000);
GPIOC->ODR = 0x0000;
GPIOC->ODR |= 0x0800; // LED1 灭
delay(1000);
GPIOC->ODR = 0x0000;
delay(1000);
}
}
```
程序的原理是利用 `GPIOC->ODR` 寄存器对 LED 进行控制,通过赋值不同的二进制数来点亮和熄灭不同的 LED。`delay` 函数用于延时,使得 LED 点亮和熄灭的时间有规律。
阅读全文