lishenglyx 发表于 2005-8-10 00:00:00

【百分数电量显示 源码】


因为这个代码做的不是很规范,也没有太大的研究价值,但是ZK4321等朋友关于显示位置、可选的问题,
我没有太多时间来做,所以发个源码,大家看一下!
$Segmented
$Mod167

;0x363B64: DAB304DF DABF8087

Vmax EQU 3A44H ;0e,

;Flag EQU 3E48H;测试

DrawImageByIndex EQU 0xB3DF04
;PlaySMSTone EQU 0xB5D3FC


PatchBeginEQU 0x1F8780 ;从0xBF8780开始
patch section code word AT PatchBegin
TheBetter proc far
      
        MOV   [-R0],R1
           MOV   [-R0],R2
           MOV   [-R0],R3
           MOV   [-R0],R12
           MOV   [-R0],R13
           MOV   [-R0],R14
          
           ;extp        #34H,#1H
           ;mov        Flag,r8
           ;cmp        r8,#0B408H
      ;jmpr        cc_ule,Bai;如果不是在充电,用百分号
      ;calls        seg(DrawImageByIndex),sof(DrawImageByIndex);      
      ;jmpr        cc_uc,Exit
;Bai:          
           mov        r14,#22EH
      mov   r13, #0h        ;纵坐标
      mov        r12,#4BH
      calls        seg(DrawImageByIndex),sof(DrawImageByIndex);
      
      mov        r12,#0E10H ;r12为空电,r13为満电
      mov        r13,#1068H
      mov        r14,r13 ;r14=r13-r12为电容量
      sub         r14,r12
      
      extp         #0eH,#1H ;取Vmax到r13
      mov         r13,Vmax
      cmp        r13,r12 ;比较r13(Vmax)和r12(空电)
      jmpr        cc_uge,nozero;r13>=r12 差为正
      mov        r13,#0H;差为负
      jmpr        cc_uc,go
nozero:      
      sub         r13,r12 ;r13-r12=还有多少电
go:   
      
      mov        mdl,r14 ;用电容量/100
      mov         r12,#64H
      divu        r12
      mov        r12,mdl ;r12现为1百分数的数目
      
      mov        mdl,r13 ;r13(还有电量)/r12(1百分数多少格)
      divu        r12
      mov        r12,mdl ;最后得到百分数r12
       
        mov         mdl,r12
           mov        r13,#64H
           divu        r13
           mov        r1,mdl ;r1为除100的商
           jmpr        cc_z,goon
              ;为100以上时
      mov        r14,#1
      add   r14, #20Dh
      mov   r13, #0h        ;纵坐标
      mov        r12,#4BH
      calls        seg(DrawImageByIndex),sof(DrawImageByIndex);
      mov        r12,#51H
      mov   r13, #0h
      mov        r14,#20DH
      calls        seg(DrawImageByIndex),sof(DrawImageByIndex);
      mov        r12,#57H
      mov   r13, #0h
      mov        r14,#20DH
      calls        seg(DrawImageByIndex),sof(DrawImageByIndex);
      jmpr        cc_uc,Exit
      
goon:          
           mov         mdl,mdh
           mov        r13,#0AH
           divu        r13
           mov        r2,mdl;r2为除10的商
           mov        r3,mdh;r3为除1的商
           MOV   [-R0],R3
          
           mov        r14,r2
      add   r14, #20Dh
      mov   r13, #0h        ;纵坐标
      mov        r12,#51H
      calls        seg(DrawImageByIndex),sof(DrawImageByIndex);
      MOV      R3,
      mov        r12,#57H
      mov        r14,r3
      add   r14, #20Dh
      mov   r13, #0h        ;纵坐标
      calls        seg(DrawImageByIndex),sof(DrawImageByIndex);
Exit:

           MOV      R14,
           MOV      R13,
           MOV      R12,
           MOV      R3,
           MOV      R2,
           MOV      R1,
           rets       
TheBetter endp
patch ends
End

lishenglyx 发表于 2005-8-10 00:01:00

主要是代码精简的不好(有点急于求成!)

sdwabc 发表于 2005-8-10 00:02:00

可不可以直接显示出电压值
页: [1]
查看完整版本: 【百分数电量显示 源码】