admin 管理员组文章数量: 887021
2024年1月16日发(作者:blade的中文翻译)
STM32 汇编语言,按键控制数码管显示
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;按键控制数码管显示;;;;;;;;;;;;;;;;;;;;; ;;共阳极接在PE口(PE[0..7]);;;;;;;;;;;;;;;;;;;;;;;;;
;;按下按键则显示加1,显示0~F;;;;;;;;;;;;;;;;;;;;;;;;;
;;2011-5-3 by 追梦 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BIT2 EQU 0X00000004 BIT6 EQU 0X00000040 BIT8 EQU 0X00000100 GPIOE
EQU 0X40011800 ;GPIOE 地址
GPIOE_CRL EQU 0X40011800 ;低配置寄存器
GPIOE_CRH EQU 0X40011804 ;高配置寄存器
GPIOE_ODR EQU 0X4001180C ;输出,偏移地址0Ch GPIOE_BSRR EQU
0X40011810 ;低置位,高清除偏移地址10h GPIOE_BRR EQU 0X40011814 ;清除,偏移地址14h IOPEEN EQU BIT6 ;GPIOE使能位
IOPAEN EQU BIT2 ;GPIOA使能位
KEY EQU BIT8 ;按键在PA.8
GPIOA EQU 0X40010800 GPIOA_CRH EQU 0X40010804 ;高配置寄存器
GPIOA_IDR EQU 0X40010808 RCC_APB2ENR EQU 0X40021018
STACK_TOP EQU 0X20002000
AREA RESET,CODE,READONLY
DCD STACK_TOP ;MSP主堆栈指针
DCD START ;复位,PC初始值
ENTRY ;指示开始执行
START
LDR R1,=RCC_APB2ENR
LDR R0,[R1] ;读
LDR R2,=IOPEEN
ORR R0,R2 ;改
LDR R2,=IOPAEN
ORR R0,R2 ;改
STR R0,[R1] ;写,使能GPIOA,E时钟
;PE[0..7] 8个引脚均设置成推挽式输出
LDR R0,=0x33333333
LDR R1,=GPIOE_CRL
STR R0,[R1]
;PA.8--KEY 浮空输入
MOV R0,#0X04
LDR R1,=GPIOA_CRH
STR R0,[R1]
LDR R1,=GPIOE_ODR
MOV R0,#0XFF
STR R0,[R1] ;初始时数码管无显示
LDR R2,=GPIOA_IDR ;R2用于扫描按键
LDR R5,=DPYTABLE LOOP
LDR R3,[R2]
AND.W R3,#KEY
CMP R3,#0
BNE LOOP
PUSH {R0}
MOV R0,#10
BL.W DELAY_NMS ;延时10ms用于消除抖动
POP {R0}
LDR R3,[R2]
AND.W R3,#KEY
CMP R3,#0
BNE LOOP
ADD R4,#1
CMP R4,#15
BLE KEYIN
MOV R4,#0
KEYIN
LDRB R0,[R5,R4]
EOR R0,#0XFF
STR R0,[R1] WAIT_TO_UP ;等待按键弹起
LDR R3,[R2]
AND.W R3,#KEY
CMP R3,#0
BEQ WAIT_TO_UP
B LOOP
;延时R0(ms),误差((R0-1)*4+12)/8us
;延时较长时,误差小于0.1%
DELAY_NMS
PUSH {R1} ;2个周期 DELAY_NMSLOOP
SUB R0,#1
MOV R1,#1000 DELAY_ONEUS
SUB R1,#1
NOP
NOP
NOP
CMP R1,#0
BNE DELAY_ONEUS
CMP R0,#0
BNE DELAY_NMSLOOP
POP {R1}
BX LR
;子程序,将R0低八位右循环移一位,高位不变 ByteRor1
PUSH {R1,R2,R3}
LDR R3,=0XFFFFFF00
LSR R1,R0,#1
AND R1,#0X0000007F
AND R2,R0,#0X01
LSL R2,#7
ORR R1,R2
AND R0,R3
ORR R0,R1
POP {R1,R2,R3}
BX LR
;共阴极数码管的码表,使用时先取反 DPYTABLE DCB
0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X
71,'0'
END
版权声明:本文标题:STM32汇编语言,按键控制数码管显示 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705358607h482512.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论