📄 led.asm
字号:
//============================================================
// 文件名称: led.asm
// 实现功能: 共阴数码管显示驱动程序
// 日期: 2006/9/20 V1.0
//============================================================
.INCLUDE SPCE061A.inc
.EXTERNAL _guiLED_Value
.RAM
.PUBLIC LED_No
.VAR LED_No = 0
.IRAM
.DATA
C_Address: .DW 0x003f,0x0006,0x005b,0x004f, 0x0066,0x006d,0x007d,0x0007,0x007f,0x006f,0x0000;
//'0''1''2''3''4''5''6''7''8''9''a' 的段码
C_Dig: .DW 0x0008,0x0010,0x0020;
//LED位选
.CODE
//======================================================
// 函数名称: LED_Show()
// 汇编调用: F_LED_Show
// 实现功能: 显示刷新.
// 入口参数: LED的位选(C_Dig),LED的段码(guiLED_Value)
// 出口参数: 无
// 破坏寄存器: r1~r4
//======================================================
.PUBLIC _LED_Show
.PUBLIC F_LED_Show
_LED_Show:
F_LED_Show:
push r1,r5 to [sp] //弹出入口参数共两个入口参数
L_Loop:
bp = [LED_No]
r1 = bp + _guiLED_Value
r1 = [r1]
r2 = bp + C_Dig //取LED管的片选地址
r2 = [r2]
r4 = r1 + C_Address //取显示数据的地址
r4 = [r4]
r4 = r4 lsl 4
r4 = r4 lsl 4
cmp bp, 1 //取小数点
jne l
r4 |= 0x8000
l:
r1 = [P_IOA_Buffer]
r1 &= 0x00ff
r1 |= r4
[P_IOA_Buffer] = r1
r1 = [P_IOB_Buffer]
r1 &= 0xff00
r2 |= r1
[P_IOB_Data] = r2 //送位码信号
bp = bp + 1 //更改位码,指向下一次显示位
cmp bp,3 //显示到最后一位
jne l1 //否
bp = 0 // 是
l1:
[LED_No] = bp //
POP r1,r5 FROM [sp]
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -