?? disp.asm
字號:
//================================================================
//功能: 數碼管動態顯示驅動
//函數:F_Disp_Drv(unsigned int Content,unsigned int StartBit)
//參數:Content--要顯示的內容;StartBit--顯示的開始位
//設計:ZM
//日期:07/1/*
//注意:連接時位選低位接數碼管低位,高位位選接數碼管的高位
//連接說明:IOB0~7連接數碼管段選,IOB8~11連接數碼管的位選
//================================================================
//NOTICE:
// 如自己用萬能版焊接,則位選信號為"低電平"選中相應數碼管
// 如果使用陵陽的鍵盤顯示模組,則位選信號高電平選中相應的數碼管
//================================================================
.include SPCE061A.inc
//================================================================
.define Bit 0x0f00 //設定數碼管的位選(8 ~ 11位)
.define Segment 0x00ff //設定數碼管的段選(0 ~ 7位)
//================================================================
.define DispData P_IOB_Data
.define DispDir P_IOB_Dir
.define DispAttrib P_IOB_Attrib
.define DispBuffer P_IOB_Buffer
//================================================================
//共陰字符表
.ram
.var H_bit,L_bit
.data
DispTable: .DW 0x003F,0x0006,0x005B,0x004F,0x0066 //0、1、2、3、4
.DW 0x006D,0x007D,0x0007,0x007F,0x006F,0x0000 //5、6、7、8、9,全滅
.code
//==================================================
//功能:顯示I/O初始化
//調用:F_DispIO_Initial()
//參數:無
//設計:ZM
//日期:07/5/26
//==================================================
.public _F_DispIO_Initial
_F_DispIO_Initial:
r1=[DispDir]
r1=r1|(Bit|Segment)
[DispDir]=r1
r1=[DispAttrib]
r1=r1|Segment
.ifdef KeyDispMode //如果使用鍵盤顯示模組,則定義位選為同向輸出
r1=r1|Bit
.endif
r1=r1&(~Bit) //如果沒有使用模組,則定義位選為反向輸出
[DispAttrib]=r1
r1=[DispBuffer]
r1=r1&(~(Segment|Bit)) //全部數碼管都熄滅
[DispData]=r1
retf
//===================================
//r1=要顯示的數值
//r2=要顯示的第一位所連接的位置
//可以顯示兩位
//==================================
.Public _F_Disp_Drv
_F_Disp_Drv:
push r1 to [sp]
push bp to [sp]
bp=sp+2
r1=[bp+3]
r2=[bp+4]
r3=1
cmp r2,0xffff //如果要顯示的內容是0xffff,表示要讓數碼管無顯示
je ?NoDisp
call BCD_Convert
call Search_Table
jmp ?loop
?NoDisp:
r4=0x0000
[L_bit]=r4
[H_bit]=r4
?loop:
cmp r3,2 //當count(r3)的值為1,r2為低位的位選;當count(r3)為2,r2為高位的位選
je ?H
r1=r2|[L_bit] //低位數碼管的位選(r2)+要顯示的內容(L_bit)
jmp ?XS
?H:
r1=r2|[H_bit] //高位數碼管的位選(r2)+要顯示的內容(H_bit)
?XS:
r4=[P_IOB_Buffer]
r4=r4&(~(Bit|Segment)) //讓原來顯示的內容全部都清除
r4=r4|r1
[P_IOB_Data]=r4 //顯示新的內容
r2=r2 lsl 1
r3+=1
cmp r3,2
jna ?loop
pop bp from [sp]
pop r1 from [sp]
retf
//=======================================
//功能: BCD碼轉換
//入口參數:R1要轉換的數值
//=======================================
.public BCD_Convert
BCD_Convert:
push r2 to [sp]
r2=0
?loop:
r1-=10 //十位
r2+=1
cmp r1,10
jae ?loop //如果仍然大于10,繼續減
[H_bit]=r2 //r2存放十位
[L_bit]=r1 //r1剩下的數,小于10,為個位
pop r2 from [sp]
retf
.public Search_Table
Search_Table:
push r2 to [sp]
bp=DispTable //bp指向顯示表
bp+=[L_bit] //查個位
r2=[bp]
[L_bit]=r2 //[L_bit]現在內容為轉換后的段顯碼
bp=DispTable //bp指向顯示表
bp+=[H_bit] //查十位
r2=[bp]
[H_bit]=r2 //[H_bit]現在的內容為轉換后的段顯碼
pop r2 from [sp]
retf
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -