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

P 3. 6/ W R16P 3. 7/ R D17X T A L 218X T A L 119GND20US T C 89 C 52S?S W P BS?S W P BS?S W P BS?S W P BS?S W P BGND 洛阳理工学院毕业设计(论文) 10 图 25 键盘调整单元接线图 图中,键盘从上至下依次为: S0:接 口,对上一次的计费进行清零,为下次载客做准备; S1:接 口,通过对功能键 S3 按下次数的计数,实现单价数据的增大; S2:接 口,通过对功能键 S3 按下次数的计数,实现单价数据的减小; S3:接 口,按 1 次,进入调整白天单价;按 2 次,进入调整夜晚单价;按 3 次,进入调整等待单价;按 4 次,进入调整起步价;按 5 次,返回。 S4: 实现白天单价和夜晚单价的切换。 需要注意的时,当按键按下和释放的瞬间都有抖动现象,一般来说,抖动的时间长短与键盘的机械特性有关,大约为 510ms [5]。 所以在实际编程时一定要注意键盘的去抖动。 键盘去抖动有专用的延时电路,也有专门的延时芯片,也可以用软件去抖,考虑到电路的难易程度,从简化硬件的角度,本次设计采用软件去抖动,用一个短延时程序,进行键盘去抖 操作。 显示单元 显示单元由两个 4 位 8 段共阳数码管组成,电路连接时,公共端接高电平,因此我们需要点亮哪个发光二极管只需给哪个二极管阴极送低电平,并采用动态扫描进行显示 [6]。 前三个数码管分别接 、 和 ,用于显示总金额;第四个接 ,显示等待时间;第五个和第六个数码管分别接 和 ,用于显示里程 ,由于需精确到小数位,故最多只能显示 公里,但经过添加溢出指示,可计到 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 Q0 洛阳理工学院毕业设计(论文) 12 H X X Z 其中 : 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 ?。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。