1、 单片机课程设计(一)单片机课程设计(一) 出租车计费器出租车计费器的设计的设计 一、设计任务:一、设计任务: 11 外部脉冲自动计数,自动显示。 111 设计一个 255 计数器:0255 计数,计满后自动清 0,重新计数 (在数码管中显示) 。 112 设计一个 50000 计数器:050000 计数,计满后自动清 0,重新 计数(在数码管中显示) 。 12 设计一个出租车计费系统: 起步价为 5 元(2km 以内) ,2km 后,0.8 元/0.5km;要求每 500m 刷新计费 一次,在 8 位数码管中,前 3 位显示数码管显示里程数,后 3 位数码管显 示价钱(角,元,十元,百元)
2、注:要求首先采用 PROTEUS 完成单片机最小系统的硬件电路设计及仿真;程序 仿真测试通过后,再下载到单片机实训板上执行。 二、设计思路二、设计思路 1. 1. 设计一个设计一个 255255 计数器:计数器:0 0255255 计数,计满后自动清计数,计满后自动清 0 0,重新计数(在数,重新计数(在数 码管中显示) 。码管中显示) 。 原理:255 可用 8 位二进制数表示,故本设计可直接采用可以重装载的计 数器 T1 模式二进行计数。然后对 TL1 的内容进行相应的二进制-十进制转换: 首先 TL1 的内容除以 64H,所的商就是十进制的百位,然后用余数除以 0AH,所 得的商就是十进
3、制数的十位,余数即相应的十进制的个位。接着将相应的十进制 数进行译码,并在 LED 数码管上显示出来。每来一个脉冲其显示的结果加一,直 加至 255 然后 T1 重新开始计数。 2 2 设计一个设计一个 5000050000 计数器:计数器:0 05000050000 计数,计满后自动清计数,计满后自动清 0 0,重新计数(在,重新计数(在 数码管中显示) 。数码管中显示) 。 原理: 将 TH1 和 TL1 中的十六进制数转为 BCD 码, 入口:HT1,TL1 中是 16 位二进制数,其中 TH1 中是高 8 位; 出口:R2 R3 R4 中是 BCD 码,其中 R2 中是万位,R3 中是
4、千、百位,R4 - 1 - 中是十、个位。 再转为对应的个.十.百.千.万位。送到缓冲区。接着调用显示子程序。 3.3.设计一个出租车计费系统:设计一个出租车计费系统: 起步价为 5 元(2km 以内) ,2km 后,0.8 元/0.5km;要求每 500m 刷新计费 一次,在 8 为数码管中,前 3 为显示数码管显示里程数,后 3 位数码管显示价钱 (角,元,十元,百元) 原理:计数器每计数 100 个外部脉冲就产生中断,里程加 1 百米,大于两千 米百位就和 5 和 0 比较,如果相等就调用价格计算子程序,价格加 0.8 元。然后 返回中断,调用里程和价格显示子程序。 三、三、PROTEU
5、SPROTEUS 硬件电路图硬件电路图 1、255 计数器计数器 2、50000 计数器计数器 - 2 - 3、 出租车计费系统出租车计费系统 - 3 - 四、调试程序四、调试程序 1、255 计数器计数器 ORG 0000H AJMP START ORG 001BH AJMP TINT1 ORG 0030H START: MOV TMOD,#60H ;计数工作方式 2 MOV TH1,#00H ;初值 0 MOV TL1,#00H SETB TR1 SETB ET1 SETB EA LOOP: LCALL DISP SJMP LOOP TINT1: RETI DISP: MOV A,TL1
6、MOV B,#64H DIV AB ;A 为百位 MOV DPTR,#SEGTAB MOVC A,A+DPTR MOV P2,#03H ;位选 4 MOV P0,A ;送百位数据 ACALL DELAY MOV A,B MOV B,#0AH DIV AB ;A 为十位,B为个位 MOVC A,A+DPTR MOV P2,#04H ;位选 5 MOV P0,A ;送十位数据 ACALL DELAY MOV A,B MOVC A,A+DPTR MOV P2,#05H ;位选 6 MOV P0,A ;送个位数据 ACALL DELAY RET DELAY: MOV R5,#05H ;延时 1ms LOOP1: MOV R6,#0FFH DJNZ R6,$ DJNZ R5,LOOP1 RET SEGTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 DB 6DH,7DH,07H,7FH,6FH