MOV SETB SJMP
A,#10H ;看门狗0.1秒 CS EPST
CALL WRZ
WREN: CLR CS ;X5045写允许 MOV A,#6
CALL WRZ
SETB CS
RET
WRZ: MOV R2,#8 WRZ1: CLR
CK RLC
A
MOV DI,C SETB CK DJNZ R2,WRZ1 CLR CK
SETB DO
RET
RDSR: CLR
CS MOV A,#5 CALL WRZ CALL RDZ SETB CS RET
RDZ:
MOV R2,#8 SETB DI SETB DO CLR CK RDZ1: MOV C,DO
SETB CK RLC A CLR CK
DJNZ R2,RDZ1
RET
;写子程序 ;读状态寄存器 ;读子程序 22
4.3.2 动态显示和按键扫描处理程序实现
动态显示和按键扫描处理,因对时间有较高的要求,故定时中断服务程序来处理。采用T1定时器0(T0),来实现二者功能。动态显示功能是在某一瞬间,只让某一位的字位线处于选通状态,即共阴极的为低电平,同时字段线上输出相应位要显示字符的字段码。而其他各位的字位线处于悬空状态,不显示。同样在下一瞬时,只显示下一位LED,如此循环每位LED。虽然这些字符是在不同的瞬时轮流显示出来的,但由于人眼的视觉残留效应,看到的是每位同时显示字符。1ms的初值要装入定时器,然后将程序计数器的内容(断点地址)压入堆栈保护起来,然后将对应的定时器T0中断矢量装入程序计数器PC,使程序转向T0中断矢量地址000BH,执行该中断服务程序。
动态显示和按键扫描处理程序如下:
MAIN: MOV SP, #6FH ;指定堆栈起始地址 ……
MOV 8, #20H ;指定工作寄存器组,即R0组从 20H单元开始 MOV 0AH, #0 ……
PGTO: MOV TL0, #LOW(65536-1000) ;中断入口,定时时长10ms MOV TH0, #HIGH(65536-1000)
SET RS0 ;选工作寄存器组R0 PUSH ACC ;保存现场
PUSH PSW MOV A, @R0 MOVX @R0, A
MOV A, P2 ;选通74LS145 ANL A, #0F8H ORL A, R1 MOV P2, A INC R0 INC R1
CJNE R0, #26H, X MOV R0, #20H MOV R2, #0
MOV A, P1 ;按键扫描以及抖动处理 ORL A, #0F0H XCH A, 17H
23
XCH A, 18H CJNE A, 17H, X CJNE A, 18H, X CPL A MOV 19H, A
X: MOV A, 19H
JNZ P ;执行按键操作 4.3.3 A/D转换程序实现
A/D转换程序主要是将称重传感器检测到的控制对象的模拟信号转换成数字信号的过程。A/D转换子程序流程图如图4-3所示。
图4-3 A/D转换子程序流程图
4.3.4 显示处理子程序实现
显示子程序主要是显示当前物重的大小,也是比较重要的程序之一。 其中:dpt=0,工作状态。dpt=1,设置。dpt=2,校准。
显示子程序的流程图如下图4-4所示:
24
图4-4 显示处理子程序流程图
4.3.5 键盘子程序实现
如图2-7所示的键盘电路设计成4×4矩阵式,由键盘编码方式可以得出 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E各键对应的键值:
0D8H, 0D0H, 0D1H, 0D2H, 0C8H, 0C9H, 0CAH, 0C0H, 0C1H, 0C2H,0C3H, 0CBH, 0D3H, 0DBH, 0DAH, 0D9H 。
在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。
键盘扫描子程序如下: ORG 0000H AJMP MAIN ORG 0030H MAIN:
MOV DPTR,#TAB ;将表头放入DPTR LCALL KEY ;调用键盘扫描程序 MOVC A,@A+DPTR ;查表后将键值送入ACC MOV P0,A ;将Acc值送入P0口 CLR P2.1 ;开显示
25
LJMP MAIN ;返回反复循环显示 KEY: LCALL KS ;调用检测按键子程序 JNZ K1 ;有键按下继续 LCALL DELAY2 ;无键按调用延时去抖 AJMP KEY ;返回继续检测按键 K1: LCALL DELAY2
LCALL DELAY2 ;有键按下延时去抖动 LCALL KS JNZ K2 AJMP KEY K2: MOV R2,#0EFH MOV R4,#00H K3: MOV P1,R2 L6: JB P1.0,L1 MOV A,#00H AJMP LK L1: JB P1.1,L2 MOV A,#04H AJMP LK L2: JB P1.2,L3 MOV A,#08H AJMP LK L3: JB P1.3,NEXT MOV A,#0cH LK: ADD A,R4 PUSH ACC K4: LCALL DELAY2 LCALL KS JNZ K4 POP ACC RET
NEXT: INC R4 MOV A,R2 JNB ACC.7,KEY RL A ;再调用检测按键程序 ;确认有按下进行下一步 ;无键按下返回继续检测 ;将扫描值送入R2暂存 ;将第一列值送入R4暂存 ;将R2的值送入P1口 ;P1.0等于1跳转到L1 ;将第一行值送入ACC ;跳转到键值处理程序 ;P1.1等于1跳转到L2 将第二行的行值送入ACC ;跳转到键值理程序进行键值处理 ;P1.2等于1跳转到L3 ;将第三行的行值送入ACC ;跳转到键值处理程
;P1.3等于1跳转到NEXT处 将第四行的行值送入ACC ;行值与列值相加后的键值送入A ;将A中的值送入堆栈暂存 ;调用延时去抖动程序 ;调用按键检测程序 ;按键没有松开继续返回检测 ;将堆栈的值送入ACC ;将列值加一 ;将R2的值送入A
;扫描完至KEY处进行下一扫描
;扫描未完将A中的值右移一位进行下一列的扫描26
; ;