一、实验要求
ARM Cortex-M3 微处理器使用端口 GPIOA 控制一片七段数码管(共阳极),按键 K 连接 GPIOA15 管脚。
实现下述功能:使用查询方式查询按键状态,当按键打开时, GPIOA15 管脚为 “0” ,数码管显示 0;当按键闭合时,GPIOA15 管脚为 “1”,数码管显示自己的学号,每隔 1 秒显示 1 位,显示结束后,数码管灯关闭。
二、实现流程

三、实验代码
3.1 写入中断向量
AREA RESET,CODE EXPORT __Vectors EXPORT Reset_Handler __Vectors DCD __initial_sp DCD Reset_Handler SPACE 39*4 IMPORT DISPLAY DCD DISPLAY Reset_Handler PROC IMPORT main ldr r1,=main bx r1 B . ENDP NOP AREA STACK,DATA SPACE 0x100 __initial_sp
END
|
3.2 程序代码
#include "usrt1.h"
void INIT() { RCC->APB2ENR = 1 << 2; RCC->APB2ENR = 1 << 11; GPIOA->CRH = 0x43333333; TIM1->PSC = 7999; TIM1->ARR = 999; NVIC->ISER[0] = 0x1 << 25; }
int Cout = 0;
int NUM[11]; void NUM_INIT() { NUM[0] = 0x2400; NUM[1] = 0x7900; NUM[2] = 0x4000; NUM[3] = 0x4000; NUM[4] = 0x1000; NUM[5] = 0x7900; NUM[6] = 0x4000; NUM[7] = 0x2400; NUM[8] = 0x4000; NUM[9] = 0x2400; NUM[10] = 0x1000; }
void DISPLAY() { TIM1->SR = 0; GPIOA->ODR = NUM[Cout]; Cout++; }
int main() { int Flag; INIT(); NUM_INIT(); while(1) { Flag = GPIOA->IDR >> 15; if(Flag == 1) { TIM1->DIER = 1; TIM1->CR1 = 0x81; if(Cout > 11) GPIOA->ODR = 0x7f00; } else GPIOA->ODR = 0x4000; } }
|
四、代码演示
点此查看视频