一、实验要求 ARM Cortex-M3微处理器使用端口GPIOA控制一片七段数码管(共阳极),按键K连接GPIOA15管脚。 实现下述功能:使用查询方式查询按键状态,当按键打开时, GPIOA15管脚为“0” ,数码管显示0;当按键闭合时,GPIOA15管脚为“1”,数码管显示自己的学号,每隔1秒显示1位,显示结束后,数码管灯关闭。
二、实现流程
三、实验代码 3.1 写入中断向量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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 程序代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 #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 ; } }
四、代码演示 点此查看视频