计时出租车 计价器源程序

上传人:kms****20 文档编号:41110299 上传时间:2018-05-28 格式:DOC 页数:8 大小:35KB
返回 下载 相关 举报
计时出租车 计价器源程序_第1页
第1页 / 共8页
计时出租车 计价器源程序_第2页
第2页 / 共8页
计时出租车 计价器源程序_第3页
第3页 / 共8页
计时出租车 计价器源程序_第4页
第4页 / 共8页
计时出租车 计价器源程序_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《计时出租车 计价器源程序》由会员分享,可在线阅读,更多相关《计时出租车 计价器源程序(8页珍藏版)》请在金锄头文库上搜索。

1、计时出租车计时出租车 计价器源程序计价器源程序A_BIT EQU 30H ;里程数个位B_BIT EQU 31H ;里程数十位C_BIT EQU 32H ;里程数百位D_BIT EQU 33H ;单价或总价小数点后一位E_BIT EQU 34H ;单价或总价个位F_BIT EQU 35H ;单价或总价十位 NUM EQU 36H ;存放车轮转的圈数,三公里以后清零NUM1 EQU 37H ;存放车轮转的圈数DANJIA EQU 38H ;存放白天和晚上单价变量 TIME EQU 39H ;存放刹车时定时计数值 FLAG BIT 20H ;标志位 判断是否满 3 公里 FLAG1 BIT 21H

2、 ;标志位 判断满三公里后,白天和晚上对应的每公里相加的值ORG 0000HLJMP STARORG 000BH ;定时器 T0 中断方式 AJMP PINT0 ORG 0030H ;主程序起始地址STAR: MOV SP,#60H ;堆栈初始化MOV A,#00H ;清 0CLR FLAG ;标志位清零 CLR FLAG1 ;标志位清零 MOV R0,#30H ;下面 4 句初始化状态,清零 CHUSHIHUA: MOV R0,AINC R0CJNE R0,#39H,CHUSHIHUAMOV TMOD,#01H ;定时器的工作方式为 T1MOV TH0,#03CH ;计算初值MOV TL0,

3、#0B0HSETB EA ;开中断SETB ET0 ;开定时/计数器 T0 中断WAIT: ACALL DISPLAY ;调显示JNB P1.1 ,NIGHT1 ;按键判断,有晚上按键按下时跳到指定位置JB P1.0 ,WAIT ;没有按键按下时等待MAIN: LCALL DISPLAY ;有按键时,调一个显示,算是延时 JNB P1.0 ,MAIN ; 消抖完,继续检测 CLR P3.0 ; 开始白天收费模式指示灯SETB P3.1 ;关其它的指示灯SETB P3.2SETB P3.3 MOV DANJIA,#8 ;赋白天单价值MOV E_BIT,DANJIA ;传到单价个位AJMP PAN

4、DUAN ;返回NIGHT1: SETB TR0LCALL DISPLAY ;调用显示 JNB P1.0 ,NIGHT1 ;判断晚上按键按下 弹起CLR P3.1 ;按下了,就开指示灯SETB P3.0 ;其它指示灯关闭SETB P3.2SETB P3.3 MOV DANJIA,#9 ;赋晚上的单价,比如 9 元MOV E_BIT,DANJIA ;把单价传到相应寄存器SETB FLAG1 ;置标志位 满三公里后开始调晚上的每公里单价 PANDUAN: ACALL DISPLAY ;调用显示PANDUAN1:JNB P1.3,RESET ;判断清零按键有无按下JNB P1.2 ,TINGCHE

5、;判断是否遇到红灯停车MOV R1,#NUM ;车轮转的圈数 JNB FLAG,DAY ;判断标志位, 是不是到了三公里CJNE R1,#2,DAY2 ;满三公里,每转几圈开始加钱 比如两圈当做是 0.1 公里SJMP DAY1 ;跳转DAY: CJNE R1,#30,DAY2 ;判断是不是到了三公里SETB FLAG ; 到了就置标志位DAY1 :MOV NUM,#0 ;清零JB FLAG1 ,NIGHT2 ;判断是标志位状态,是晚上就跳转ACALL BCDNUM1 ;调译码 计算程序DAY2: JNB P3.5,PANDUAN ;判断车轮启动 JB P3.5,$ CLR TR0 ;关定时计

6、数器SETB P3.2 ;关定时计数器指示灯INC NUM ;圈数加一INC NUM1 ACALL BCDNUM ;调用译码 显示 SJMP PANDUAN ;返回RESET: CLR TR0 ;关定时计数器 CLR P3.3 ;开指示灯 SETB P3.0 ;关其它的指示灯 SETB P3.1 ;关其它的指示灯 SETB P3.2 ;关其它的指示灯 MOV A,#00H ;清零 CLR FLAG ;请标志位 CLR FLAG1 ;请标志位MOV R0,#30H ;所有存数据的寄存器清零QINGLING:MOV R0,AINC R0CJNE R0,#38H,QINGLINGSJMP WAIT

7、;返回等待按键NIGHT2: ACALL BCDNUM2 ;调用译码程序 NIGHT3: JNB P3.5,PANDUAN ;晚上判断车轮转动次数 JB P3.5,$ INC NUM ;圈数加一INC NUM1 CLR TR0 ;关定时计数器 SETB P3.2 ;关定时计数器指示灯 ACALL BCDNUM ;调用译码 显示 SJMP PANDUAN ;返回 TINGCHE: SETB TR0 ;遇红灯时堵车时刹车停车 CLR P3.2 ;刹车、计时指示灯LJMP PANDUAN1;*; 显 示 子 程 序;*DISPLAY: MOV DPTR,#NUMTAB ;指定查表启始地址MOV R0

8、,#30H MOV R6,#0FBH ;R6 用来存位选段的数据 DIS0: MOV A,R0 MOVC A,A+DPTR ;开始查表MOV P0,A ;送到 P0 口显示MOV A,R6 ;把 R6 数据送到 AMOV P2,A ;然后送到 P2 口 用来驱动 9012 RL A ;累加器循环左移MOV R6,A ;把左移后的值送到 R6ACALL D1MS ;延时 INC R0 CJNE R0,#32H,DIS2 ;显示每一位数码管CLR P0.7 ;开第一个小数点SJMP DIS0DIS2: CJNE R0,#35H,DIS1 ;显示每一位数码管 CLR P0.7 ;开第二个小数点SJM

9、P DIS0 ;返回DIS1: SETB P0.7 ;置小数点CJNE R0,#36H,DIS0 ;判断显示完了没有RET;*; BCD 译码子程序(分配里程显示数据);*BCDNUM:MOV A,NUM1 ;把转的圈数赋值给 AMOV B,#10 ;到了 10 就要进位了 DIV AB ;用除法MOV A_BIT,B ;把余数存在 B 里MOV B,#10 ;再赋值给 B 10 DIV AB ;把商再除法运算除数还是 10MOV B_BIT,B ;最后把余数传到十位 MOV C_BIT,A ;把商传到百位RET ;其实整个程序就是把一个三位数拆成三位分别显示;*; BCD 译码子程序(分配白

10、天单价超三公里后显示数据);*BCDNUM1:CLR C ;和上面的 BCDNUM 原理相同MOV A,D_BITMOV R3,#1ADD A,R3MOV B,#10DIV ABMOV D_BIT,BCLR CADD A,E_BITMOV B,#10DIV ABMOV E_BIT,BCLR CADD A,F_BITMOV F_BIT,A RET;*; BCD 译码子程序(分配晚上单价超三公里后显示数据);*BCDNUM2:CLR C ;和上面的 BCDNUM 原理相同MOV A,D_BITMOV R3,#2ADD A,R3MOV B,#10DIV ABMOV D_BIT,BCLR CADD A

11、,E_BITMOV B,#10DIV ABMOV E_BIT,BCLR CADD A,F_BITMOV F_BIT,ARETBCDNUM3:CLR C ;和上面的 BCDNUM 原理相同MOV A,D_BITMOV R3,#5ADD A,R3MOV B,#10DIV ABMOV D_BIT,BCLR CADD A,E_BITMOV B,#10DIV ABMOV E_BIT,BCLR CADD A,F_BITMOV F_BIT,ARET;*; 计时服务程序;*PINT0: PUSH ACCINC TIMEMOV TH0,#03CH ;再赋初值MOV TL0,#0B0HMOV A,TIME CJNE A,#200,STOP1 ;判断有没有到计时时间比如 10 秒MOV TIME,#0ACALL BCDNUM3STOP1:POP ACCRETI;*; 延时 1MS 服务程序(按 12MHZ 算);*D1MS: MOV R7,#2DJNZ R7,$RET;* ;7 段数码管各划的数字排列表(共阳极);*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号