用单片机stc89c52设计的出租车计价器毕业设计(论文)(编辑修改稿)内容摘要:

溢出指示,可计到 20 公里,在现实中已基本够用;后面两个数码管分别接 和 ,用于显示单价。 由于溢出指示是采用发光二极管是否点亮表示,故必须选好参数以确保发光二极管正常工作。 根据元件手册(也可用万用表测量)查得,发光二极管点亮时压降洛阳理工学院毕业设计(论文) 11 为 ,点亮电流为 320mA,取导通电流为 5mA,所以限流电阻可选择为()/5=660,故可选择限流电阻值 510Ω。 由于数码管内部二极管点亮时需要 5mA 以上的电流,而单片机的输出电流还不到 1mA,所以数码管与单片机连接时需加驱动电路,可以使用上拉电阻的方法,也可以使用专门的驱动芯片,考虑到复用单片机 I/O 接口,节省单片机 I/O 资源,此 次设计采用 74HC573 锁存器,其输出电流较大,电路接口简单且可直接驱动数码管显示。 74HC573 的引脚分布图 26 如下。 OE11D22D33D44D55D66D77D88D9GND10 LE 118Q 127Q 136Q 145Q 154Q 163Q 172Q 181Q 19V C C 2074 H C 5 73GNDP 1. 6 图 26 74HC573 的引脚分布 OE :为三态允许输入端 (低电平有效 ),也可称作输出允许端; 1D8D 为数据输入端; 1Q8Q 为数据输出端; LE 为锁存允许端。 74HC573 所对应真值表 21 如 表。 表 21 74HC573 真值表 INPUT OUTPUT OE LE D Q L H L L L X H X X H Q0 Z 洛阳理工学院毕业设计(论文) 12 其中 : H— 高电平。 L— 低电平; X— 任意电平; Z— 高阻态,既不是高电平也不是低电平,其电平状态由与它相连接的其它电气状态决定; Q0—上次的电平状态。 由真值表可以看出,当 OE 为高电平时,无论 LE与 D 端为何电平状态,其输出均为高阻态,此时芯片处于不可控状态。 做设计时必须使其处于可控状态,即 OE 应该接低电平。 当 OE 为低电平时,若 LE 为 H,则 D 与 Q 同时为 H 或者 L,数据实现直通传送;而当 LE 为 L 时,无论 D 为何状态 Q 都保持上一次的数据状态,数据被锁存住,利用此特性即可实现对数码管的控制。 本次设计中:段选信号 LE 接 ,对应图中标号 ;位选信号 LE接 ,对应图中标号。 控制显示时先给 高电平,使通道打开,接着送字码,然后把 电平拉低,使字码保持住;之后打开 (送高电平),紧接着送位码,控制要显示的位,然后把 拉低,数据被保持。 最后延时 5ms;依次循环扫描;利用数码管点亮后的余晖和人眼视觉暂留效应即可实现动态显示。 数码 管动态显示电路如图 27 所示。 洛阳理工学院毕业设计(论文) 13 OE11D22D33D44D55D66D77D88D9GND10LE118Q127Q136Q145Q154Q163Q172Q181Q19V C C20U274H C 57 3OE11D22D33D44D55D66D77D88D9GND10LE118Q127Q136Q145Q154Q163Q172Q181Q19VCC20U374H C 57 3V C C40P 39P 38P 37P 36P 35P 34P 33P 32EA31A L E30P S E N29P 21P 22P 23P 24P 25P 26P 27P 28P 1P 2P 3P 4P 5P 6P 7P 8R S T9P 10P 11P 12P 13P 14P 15P 16P 17X T A L 218X T A L 119GND20U1S T C 89C 5211 7 4 2 1 10 5 3129 8 6a b c d e f g d pc om 1 c om 2 c om 3 c om 4L E D ?7S E G ( 0 .36) X 411 7 4 2 1 10 5 3129 8 6a b c d e f g d pc om 1 c om 2 c om 3 c om 4L E D ?7S E G ( 0 .36) X 412345678161514131211109排阻R E S P A C K 4排阻R E S 8AGNDGND40 V C CV C CP P GNDGNDV C CV C C 图 27 数码管动态显示电路 洛阳理工学院毕业设计(论文) 14 第 3章 软件设计 系统主程序 在主程序模块中,需要完成对各参量和接口的初始化、出租车起步价和单价的初始化以及中断、计算、循环等工作。 另外,在主程序模块中还需要设置启动 /清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。 然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。 当出租车运行后,就启动计价器,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。 若已超过,则根据里程值、每公里的单价值和起步价来计算出当前的总金 额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待金额加到总金额里,然后将总金额、里程、等待时间和单价送数码管显示出来。 程序流程如图 31 所示。 金 额 计 算显 示NYNY清 零夜 晚 单 价切 换开 始初 始 化按 键 扫 描 图 31 主程序流程图 洛阳理工学院毕业设计(论文) 15 里程计数中断程序 每当霍尔传感器输出一个低电平信号,单片机定时器 0(工作在计数模式)就对其计数一次,相应的变量设为 inter 就自加 1,当里程计数器inter 对里程脉冲计满 500 次时,对其自身进行清零操作,为 下一次计数做准备,同时进入里程计数中断服务程序中,里程变量加 1,总金额根据此时所设单价做出相应的变化。 里程中断子程序如图 32 所示。 I N T 0计 数 达 到 5 0 0。 增 加 1 公 里调 用 价 格 子 程 序达 到 最 大 里 程。 返 回NNY开 始Y 图 32 里程中断服务子程序 中途等待中断程序 在中途等待中断程序中,定时器 1 每 50ms 计一次数,每计够 100 次(5sec),便将当前里程值送入某个缓存变量,与前一个 5 秒的值进行比较,如果两者相同,则表明霍尔传感器没有输出信号,认为出租车停了下来,洛阳理工学院毕业设计(论文) 16 进入等待计时,计时中间变量 dd 自加 1,计够 12 次为一 分钟, dd 自清零,同时根据所设的等待单价刷新总金额。 计数初值可有以下公式获得: X=(65536t)**10^6/12。 TH=X/256。 TL=X%256。 其中: X 表示计数初值, TH、 TL 分别为 16 位计数器高 8 位和低 8 位应装入的初值。 用定时器作为基准,可使测试的等待时间更为精确(可以精确到 uS级);且每隔 5 秒比较一次,能有效减小误判率,避免把汽车低速行驶误认为静止等待处理。 中途等待子程序流程图如图 33 所示。 C C = 1 0 0。 二 者 相等 吗。 5 0 m s了 吗。 变 量 c c + +YYN与 前 一个 5 s比 较变 量 d d + +YND D = 1 2。 等 待 时 间 + +YN返 回T 1 计 时 开 始N开 始 图 33 中途等待中断子程序流程图 洛阳理工学院毕业设计(论文) 17 计算程序 计算程序根据里程数分别进入不同的计算公式。 如果里程大于 3 公里,则执行公式:总金额 =起步价 +(里程 3) *单价 +等待时间 *等待单价;否则,执行公式:总金额 =起步价 +等待时间 *等待单价。 程序流程图如图 34 所示。 开 始里 程 3总 金 额 = 起 步 价总 金 额 + = ( 里 程 3 )* 起 步 价总 金 额 + = 等 待 时 间 *等 待 单 价总 金 额 = 起 步 价总 金 额 + = 等 待 时 间 *等 待 单 价返 回NY 图 34 计算程序流程图 显示程序 洛阳理工学院毕业设计(论文) 18 由于 8 位数码管所有段选皆有 8 位的 P0 口进行控制,因此,在每一瞬间, 8 位 LED 会显示同一个数字。 要想每位显示不同的字符,就必须采用动态扫描的方法轮流点亮各位 LED,即在每一时刻只使某一位显示字符。 在此瞬间,段选控制 I/O 口输出相应字符段选码(字符码),而位选则控制 I/O 口在该显示的位送入选通电平,以保证该位显示显示相应字符。 如此循环操作,使每位分时显示该位应该显示的字符 [7]。 在本次设计中显示程序利用延时程序,每隔 5ms 刷新一次,相应的数码管点亮,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,给人看上去每个数码管总是在亮,以实现动态显示。 键盘程序 键盘采用查询的方式,放在主程 序中,当有按键按下的时候,在相应 I/O口产生一次低电平,当单片机查询出该低电平后便转入进行处理,处理结束返回。 键盘程序流程图如图 35。 洛阳理工学院毕业设计(论文) 19 K e y 3 = 0 ?白 天 单 价 + 1返 回K e y 3 n u m 为 真K e y 3 n u m = 1 ?K e y n u m = 2。 K e y 1 = 0 ?NYYNk e y 3 n u m = 0 ?K e y 2 = 0。 YYN白 天 单 价 1Y显 示k e y 3 n u m + +开 始N储 存 白 天 单 价K e y 1 = 0 ?夜 晚 单 价 + 1YK e y 2 = 0。 YNNK e y 3 n u m = 3。 N储 存 夜 晚 单 价K e y 1 = 0 ?等 待 单 价 + 1YK e y 2 = 0。 夜 晚 单 价 1等 待 单 价 1K e y 3 n u m = 4。 储 存 等 待 单 价K e y 1 = 0 ?起 步 单 价 + 1K e y 2 = 0。 起 步 单 价 1K e y 3 n u m = 5。 储 存 起 步 单 价K e y 3 n u m = 0YYYNNNNYNYNNYNNK e y 4 = 0 ?白 天 、 夜 晚 单价 切 换YK e y 0 = 0 ?仅 显 示 总 金 额与 起 步 价 YNNY图 35 键盘程序 洛阳理工学院毕业设计(论文) 20 按键检测流程图 36 所示。 开 始YYYNNN寄 存 器 , I \ O端 口 初 始 化检 测 是 否 有 键 按 下延 时 5 m s执 行 相 应 代 码检 测 是 否 有 键 按 下检 测 是 否 有 键 释 放 图 36 按键检测子程序流程图 洛阳理工学院毕业设计(论文) 21 第 4章 调试改进过程及运行结果分析 动态扫描的调试和分析 动态扫描是单片机编程中最基本的知识,虽对其原理有比较清晰的掌握,也曾用汇编语言写过程序 ,但此次用 C 语言编写还是出现了错误。 第一就是把段码和位码顺序送反,结果是只有在延时时间较长时才能显示正常,当然这样的代价是没有静态的效果;第二就是用动态扫描时给。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。