中州大学毕业设计
POP PSW ;状态字恢复
POP ACC ;累加器恢复 RETI ;中断返回
;每转一圈时间计数处理程序,每圈时间放在68H—6BH单元中 INTEX1: PUSH ACC ;累加器堆栈保护 PUSH PSW ;状态字堆栈保护 CLR EX1 ;关外部中断1
JNB 00H,INTEX11 ;溢出标志为0转INTEX11
MOV TL1,#0FFH ;溢出时计时单元赋#0FFH(显示速度为零) MOV TH1,#0FFH
MOV 6CH,#0FFH MOV 6DH,#0FFH
INTEX11: MOV 68H,TL1 ;将时间计数值移入暂存单元68H-6BH MOV 69H,TH1 MOV 6AH,6CH MOV 6BH,6DH
CLR A ;清A
MOV TL1,A ;计数单元置零 MOV TH1,A
MOV 6CH,A MOV 6DH,A
CLR 00H ;清溢出标志
POP PSW ;状态字堆栈恢复 POP ACC ;累加器堆栈恢复 RETI ;中断返回 ;T1计数器中断服务程序。(计数器T1由外部中断1输入控制,当为高电平时计时开始)
INTT1: PUSH ACC ; 累加器堆栈保护 PUSH PSW ;状态字堆栈保护 INC 6CH ;6C计时单元加1
MOV A,6CH ;6C单元内容移入A JNZ INTT11 ;不为0,转INTT11 INC 6DH ;进位,6DH单元加1 MOV A,6DH ;移入A
JNZ INTT11 ;不为0,转INTT11
SETB 00H ;计时器溢出,置溢出标志位 INTT11: POP PSW ;状态字堆栈恢复 POP ACC ;累加器堆栈恢复
16
中州大学毕业设计
RETI ;中断返回
开始 关中断 现场保护 开中断 中断处理 关中断 现场恢复 开中断
中断返回 图 3.4 中断流程图
(4)里程、速度处理程序 里程处理程序
外中断0服务程序用于对单片机P3.2口输入的圈脉冲进行计数,为十六进制计数器。60H为低位,62H为高位。每次计数一次后,对里程数据进行一次存储操作。当车轮每转一圈,通过霍尔元件将脉冲数输入单片机内,通过计数器计出脉冲数,再用乘法子程序算出里程数。
SSS: MOV 19H,#64H ;除数最高位赋值 MOV 18H,#00H ;除数赋值 MOV 17H,#00H ; 除数赋值 MOV 16H,#00H ; 除数赋值 MOV 11H,#00H ; 被除数赋值
17
中州大学毕业设计
MOV 12H,#00H ; 被除数赋值
MOV 13H,62H ; 被除数赋值 MOV 14H,61H ; 被除数赋值 MOV 15H,60H ; 被除数赋值
LCALL DIVST ;调除法程序 LCALL BCDST ; 跳到二进制转BCD码程序 MOV A,25H ;将25H内容移入A ANL A,#0FH ; 高四位为0 MOV 70H,A ; MOV A,25H ; SWAP A ; ANL A,#0FH ; MOV 71H,A ; MOV A,24H ; ANL A,#0FH ; MOV 72H,A ; MOV A,24H ; SWAP A ; ANL A,#0FH ; MOV 73H,A ;
RET
速度处理程序
移入70H
将25H内容移入A 交换高低字节 高四位为0 移入71H
将24H内容移入A 高四位为0 移入72H
将24H内容移入A 交换高低字节 高四位为0 移入73H 开始 点亮里程指示灯 将车圈数转换成里程 显示里程值 返回
3.5 里程处理程序流程图
18
图中州大学毕业设计
外中断1服务程序用于处理轮子转动一圈后的计时数据。当标志位(00H)为1时,计数溢出,放入最大时间值(为#0FFH);当标志位为0时,将计数单元(TL1、TH1、6CH、6DH)的值放入68H~6BH单元。定时器计出每转一圈所用的时间,用自行车车轮的周长除以时间就得出自行车的速度。 VVV: MOV 18H,68H ;除数赋值 MOV 17H,69H ;除数赋值
MOV 16H,6AH ;除数赋值 MOV 11H,#00H ;被除数赋值 MOV 12H,#00H ; MOV 13H,#36H ; MOV 14H,#0EEH ; MOV 15H,#80H ; LCALL DIVST ; MOV 14H,#00H ; LCALL BCDST ; MOV A,25H ; ANL A,#0FH ; MOV 70H,A ; MOV A,25H ; SWAP A ; ANL A,#0FH ; MOV 71H,A ; MOV 72H,#00H ;72H MOV 73H,#00H ;73H
RET ;被除数赋值 被除数赋值 被除数赋值 被除数赋值 调除法程序 舍去一位
跳到二进制转BCD码程序 以下将速度值放入显示单元 高四位为0 放入70H内 再取数
高低字节交换 高四位为0 放入71H内 为0 为0 子程序返回
19
中州大学毕业设计
开始 开速度指示灯 计算速度 N P3.0=1? Y 报警 显示速度 返回 图 3.6速度处理程序流程图
(5)显示子程序
采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
本设计P2.0、P2.1、P2.2、P2.3信号一起组成位选通的位选信号,P0.0~P0.7信号一起组成段码选通的段选信号,通过软件编程,先把所要显示的数据放入存储单元,然后把数据送入段选通对应的地址,再选通某一个LED,逐步完成四个LED的显示。
;里程显示控制程序
DISPLAYS:SETB P1.0 ;点亮LED1
CLR P1.1 ;关闭速度指示灯
20