出租车计价器毕业设计
摘要
现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。出租车计价器是根据客户用车情况来自动显示车费的数字仪表,根据用车起步价、行车里程计费求得客户用车的总费用,并通过数码管显示相应的里程及金额。
本次设计中电路以ATS51单片机为中心,附加A44E霍尔传感器测距(本电路中用模拟开关替代),实现对出租车计价,采用AT24C02 实现在系统掉电的时候保存单价,输出采用8段数码显示管,显示行驶总里程和总金额。
模拟出租车计价器设计:进行里程显示,预设起步价和起步公里数;行程按全程收费,有复位功能和启动功能,启动后,开始计价。我们采用单片机进行设计,可以用较少的硬件和适当的软件相互配合来实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能,应用前景广阔。
关键词 出租车计价器 ATS51单片机 A44E霍尔传感器 断电保存 8段数码显示管
0
目录
摘要 ....................................................................................................................... 0 第1章 绪论 ................................................................................... 2
1.1 课题背景 ............................................................... 2 1.2 设计目的与要求 ............................................... 3 1.2.1 设计目的 ....................................................... 3 1.2.2 主要设计内容及基本要求 ................. 3 1.3 方案论证与比较 ............................................... 3
第2章 系统硬件设计 ...................................................................... 5
2.1 硬件设计说明 ..................................................... 5 2.2 ATS51单片机简介 ..................................... 6 2.3 硬件电路设计 ..................................................... 7 2.4 硬件组成 ............................................................... 9 2.4.1 驱动电路 ....................................................... 9 2.4.2 显示电路 ................................................... 10 2.4.3 复位电路 ..................................................... 11 2.4.4 掉电保护电路 .......................................... 12
1
2.4.5 时钟电路 ..................................................... 14 2.4.6 按键电路 ..................................................... 15
第3章 系统软件设计 .................................................................... 16
3.1 软件总体设计 ................................................... 16 3.2 系统软件设计 ................................................... 17
第4章 系统调试 ........................................................................... 19
4.1 软件调试 ............................................................. 19 4.1.1 编程工具—C51语言 .......................... 19 4.1.2 程序调试工具—KEIL ....................... 19 4.1.3 单片机仿真软件在线调
试—PROTEUS .................................................... 19
参考文献 ...................................................................................... 21 致谢 ............................................................................................. 22 附录Ⅰ程序源代码 ......................................................................... 24 附录Ⅱ电路仿真图 ......................................................................... 41
第1章 绪论
1.1 课题背景
随着出租车行业的发展,出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。
我们知道,只要乘坐的出租车启动,随着行驶里程的增加,就会看到司机旁边的计价器里程数字显示的读数从零逐渐增大,而当行驶到某一值时(如2KM)计费数字显示
2
开始从起步价(如4元)增加。当乘客到站时,按下停止按键,计费数字显示总里程和总金额,它可以很直观的反映用户使用情况。
1.2 设计目的与要求
1.2.1 设计目的
毕业设计是将理论与实践相结合的教学环节,通过综合运用教材及其他资料,使所学知识得到进一步加深和扩展。同时还培养设计能力和解决实际问题能力,进行基本技能的训练, 进一步熟练proteus,keilC等软件的操作。本设计的目的是在学习51系列单片机的基础上,设计出符合要求的电路,从而实现设计产品的计价功能。
1.2.2 主要设计内容及基本要求
利用ATS51单片机,设计简单的出租车计价器。在出租车计价器的总体设计中,我主要负责出租车计价器硬件设计。其中主要的外围功能电路有:驱动电路,按键控制电路,掉电保护电路,时钟部分,数码管显示电路等。通过对以上各功能的设计,制作出的出租车计价器应具有以下功能:上电时显示全为零,通过按下启动按键来开始计价,数码管开始显示起步价和起步金额;按下模拟开关按键来产生一个脉冲信号,模拟行驶的里程;数码管开始显示所走里程和所应付的金额,并逐渐增加;按下停止按键,停止计价,数码管显示所走总里程和用户所需付总金额,按下清零按键,数码管全显示零,以备下次计价。
1.3 方案论证与比较
方案一:采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。采用数字电路控制,采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价。
3
考虑到这种电路设计过于复杂,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现;性能不够稳定,电路也不实用。
方案二:采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多 的附加功能。设计采用ATS51单片机为主控器,以A44E霍尔传感器测距(按键替代),实现对出租车的基本的计价设计,并采用AT24C02实现在系统掉电的时候保存单价等信息,输出采用8段数码显示管。利用单片机丰富的I/O端口,及其控制的灵活性,实现基本的计价功能。
系统结构图如下: 按键 显示总里程
复位
掉电 显示S51 时钟1.1系统结构图
通过比较以上两种方案,我们采用方案二实现出租车计价器的功能。本电路设计的计价器能实现基本的计价功能,单片机计算总价的公式为:总价=起步价+单价*(总里程-起步里程)+1。ATS51作为一个单片微型计算系统,灵活性高,其强大的控制处理功能和可扩展功能设计电路提供了很好的选择。
4
第2章 系统硬件设计
2.1 硬件设计说明
单片机是单片微型计算机的简称,单片机以其卓越的性能,得到广泛的应用,已经深入到各个领域。在这次设计中,我们用到P0口和P2口,P0口为8位三态I/O口,此口为地址总线及数据总线分时复用;P2口为8位准双向口,与地址总线高八位复用;P0口和P2口都有一定的驱动能力,P0口的驱动能力较强。
设计中,为了能够让数码管更好的正常显示,我们采用了驱动电路来驱动。在本次硬件设计中,我们考虑采用芯片74LS245来驱动数码管显示。
设计电路时,考虑到用里程(霍尔)传感器价格昂贵,且不便于试验检测,在设计中采用一个模拟开关来代替。模拟开关一端接在P3.4口,另一端接地,通过来回高低电平的变化,每按两次,对应的里程数加一。通过在程序中设置的里程和金额的信息,在
5
加上驱动电路的设计,就可以在数码管上分别显示总金额和总里程。
在显示方面,可以用液晶显示,也可以用数码管进行显示。由于在这次设计中只需要显示里程和金额信息,我们采用数码管进行显示。这样既节约了成本,又可以达到显示的目的。同时为了减少硬件的复杂度,我们采用了动态显示方式,选用了共阴极数码管。
我们还设计了控制按键,能够很好的对出租车计价器控制,如启动/停止按键,清零按键等。
2.2 ATS51单片机简介
ATS51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
P0口有二个功能:
1、外部扩展存储器时,当做数据/地址总线。
2、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口只做I/O口使用:其内部有上拉电阻。
P2口有两个功能:
1、扩展外部存储器时,当作地址总线使用。
2、做一般I/O口使用,其内部有上拉电阻。
P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。
6
图2.1 ATS51引脚图
设计中用到的单片机各管脚(图2.1)功能介绍如下:
VCC:接+5V电源。 VSS:接地。
时钟引脚:XTAL1和XTAL2两端接晶振和30PF的电容,构成时钟电路。 它可以使单片机稳定可靠的运行。
RST:复位信号输入端,高电平有效。当在此引脚加两个机器周期的高电平时,就可以完成复位操作。
P1.0:接启动/停止按键,控制计价。 P1.1:接功能键。 P1.3:接清零键。
P0口接数码管段选端,P2口接驱动芯片。
P3.4(T0):接模拟开关按键,替代了出租车计价器中的霍尔传感器。
P3.1、P3.0口接掉电保护电路。
2.3 硬件电路设计
按下计价按键时,显示起步价和起步里程范围,这些在程序中设置;当等于或超过两公里后,按计算总价的公式为:总价=起步价+单价*(总里程-起步里程)+1进行计
7
价。本设计中,起步价为4元,起步里程为2公里,当然这些数据可以在程序中改写,以满足不同时期价格调整的需要。下图是通过在Keil C中编译通过,并生成Hex文件,在PROTEUS中仿真通过的整体硬件原理图:
图2.2 硬件原理图
8
2.4 硬件组成
硬件组成主要包括:驱动电路、显示电路、复位电路、掉电保护电路、时钟电路、按键电路。
2.4.1 驱动电路
74LS245是我们常用的芯片,用来驱动led或者其他的设备。总线驱动器74LS244和74LS245经常用作三态数据缓冲器,74LS244为单向三态数据缓冲器,而74LS245为双向 三态数据缓冲器。本设计用74LS245作为驱动芯片,双向总线发送器/接收器(3S)。
图2.3 驱动芯片管脚图
74LS245主要电器特性的典型值如下:
引出端符号:
A A总线端 B B总线端
/G 三态允许端(低电平有效)
DIR 方向控制端
9
功能表:
表2.4 功能表
利用74LS245来驱动数码管显示,单片机的P2.0到P2.5分别接A0到A5管脚,进行数据的传送,其中AB/BA接高电平,控制数据从A到B进行传送,B0到B5分别接数码管的位选端,驱动数码管依次显示。P2.0到P2.5的数据通过A传送到B中的数据送到数码管,以达到显示数据信息的目的。
2.4.2 显示电路
多数的应用系统,都要配输入和输出外设,LED显示器和LCD显示器,虽然LCD显示效果比较好,已经成为了一种发展趋势,但为了节约成本,我们选用了LED显示器(图2.5)。
在显示方面,我们选用了动态显示。静态显示虽然亮度较高,接口编程容易,但是每位的段码线分别与一个8位的锁存器输出相连。占用的I/O口线比较多,在显示位数较多的情况下,一般都采用动态显示方式。利用动态显示的方法,由于LED显示器的余辉和人眼的视觉暂留现象,只要每位显示的时间间隔足够短,就仍能感觉到所有的数码管都在显示。为了简化硬件,通常将所有位的段码线相应段并联在一起,由一个8位I/O口控制,在同一时刻,只让一位选通,如此循环,就可以使各位显示出将要显示的字符。
10
图2.5 LED数码管 集成数码管
LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了。在本设计仿真中使用的是6个一组的共阴8段数码管。
找公共共阴和公共共阳的方法:首先我们找个电源|稳压器(3到5伏)和1个1K(几百欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的,找到一个就够了,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。共阴极数码管,阴极接地,当某个发光二极管的阳极为高电平时,发光二极管点亮,对应的段就显示。
2.4.3 复位电路
单片机的复位是由外部的复位电路实现的, 复位电路通常采用上电自动复位和按钮复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。除了上电复位外还需要按键手动复位(图2.6)。按键手动复位有电平方式和脉冲方式两种。其中
11
电平复位是通过RST端经电阻与电源VCC接通而实现的。单片机的复位速度比外围I/O接口电路快为能够保证系统可靠的复位,在初始化程序中应安排一定的复位延迟时间。
图2.6 复位电路
2.4.4 掉电保护电路
掉电保护电路中采用了存储芯片AT24C02。
AT24C02是一个CMOS标准的EEPROM存储器,是AT24CXX系列(AT24C01/02/04/08/16)成员之一,这些EEPROM存储器的特点是功耗小、成本低、电源范围宽,静态电源电流约30uA~110uA,具有标准的I2C总线接口,是应用广泛的小容量存储器之一。
12
图2.7 AT24C02 引脚图
上图是AT24C02的引脚图,这个芯片是一个8脚芯片,内部存储器有256
字节。
引脚功能介绍如下: A0(引脚1):器件地址的A0位,是器件地址的最低位,器件地址排列是A6 A5 A4 A3A2 A1 A0 R/W。
A1(引脚2):器件地址的A1位。 A2(引脚3):器件地址的A2位。 GND(引脚4):地线。 SDA(引脚5):数据总线引脚。 SCL(引脚6):时钟总线引脚。 TEST(引脚7):测试引脚。 Vcc(引脚8):电源线引脚。 本设计采用掉电存储电路图如下:
13
图2.8 掉电存储电路
2.4.5 时钟电路
MCS-51单片机的各功能部件都是以时钟控制信号为基准,内部电路在时钟信号的控制下,严格地按时序执行指令进行工作,单片机本身如同一个复杂的同步时序电路,为了保证其各个部分同步工作,电路要在唯一的时钟信号控制下,严格地按照时序进行工作。其实只需在时钟引脚连接上外围的定时控制元件,就可以构成一个稳定的自激振荡器。为更好地保证振荡器稳定可靠地工作,谐振器和电容应尽可能安装得与单片机芯片靠近。
本设计中使用的振荡电路,由12MHZ晶体振荡器和两个约30PF的电容组成,在XTAL1和XTAL2两端跨接晶体,电容的大小不会影响振荡频率的高低。在整个系统中为系统各个部分提供基准频率,以防因其工作频率不稳定而造成相关设备的工作频率不稳定,晶振可以在电路中产生振荡电流,发出时钟信号。如图2.9所示。
14
图2.9 时钟电路
2.4.6 按键电路
按键控制电路中,单片机的P1.0管脚接启动/停止按键,通过软件编程,当按下按键计数器开始工作,开始计价;当弹起按键时,计数器停止工作,停止计价,启动/停止按键带自锁功能。按下启动按键,开关处于导通状态,这时给P1.0送低电平信号,这时TR0=1,计数器开始工作,调用计价子程序开始计价。清零按键接单片机的P1.3管脚,按下清零按键,P1.3为低电平,调用清零子程序,用于将显示数据清零,在程序中给各位赋0代码(0x3f),以达到清零的目的,方便下次计价。另外为功能键,控制价格调整,这个按键是在没有按下启动/停止按键时有作用,计价过程中无效。
15
图2.10 按键电路
第3章 系统软件设计
3.1 软件总体设计
51单片机的程序设计语言主要有两种:一是汇编程序设计;二是C语言编程设计。两种程序设计语言都有各自的优点。用汇编语言编写和高级语言(C语言)比较起来节省空间,这样对于存储空间仅4KB的芯片来说是极之有利的,51单片机能更高速的运行。C语言编写的程序,虽然不象汇编那样速度快、但程序简单易行、并且需要较小的存储空间。C语言作为一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。此外,C语言程序还具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的主流。
本设计就是采用C语言编写的,由于采用模块化操作,使得程序在修改,执行的时候显得方便易行。
16
3.2 系统软件设计 本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。
在main函数编写开始,要进行初始化,包括对系统初始化和对存储器初始化,要对硬件设备进行初始化,并使硬件处于就绪状态。
通过判断是否计费,调价,清零等状态,来分别调用不同的子程序,使程序在设计之前,就有了很强的逻辑关系。
这些对应于硬件就是通过按下各个控制开关,来分别进行不同的动作,最后数码管根据输入的信息,来显示不同的数据信息,这就达到了软件控制硬件,同时输入信息控制输出信息的目的。
17
整个程序的流程图如下:
18
图3.1系统程序流程图
第4章 系统调试
4.1 软件调试
4.1.1 编程工具—C51语言
8051单片机的应用程序设计,使用C51语言进行程序设计虽然相对于汇编语言代码效率有所下降,但可以方便地实现程序设计模块化,代码结构清晰、可读性强,易于维护、更新和移植,适合较大规模的单片机程序设计。近年来,随着C51语言的编译器性能的不断提高,在绝大多数应用环境下,C51程序的执行效率已经非常接近汇编语言,因此,使用C51进行单片机程序设计已经成为单片机程序设计的主流选择之一。
4.1.2 程序调试工具—KEIL
本设计的软件都是在 Keil μ Vision 4上进行编写,编译,调试以及运行操作。
4.1.3 单片机仿真软件在线调试—PROTEUS
1.打开Proteus软件。
2.选择file菜单下的 open design选项,找到所需的元器件,元器件上单击右键选中,再单击左键对其进行命名和赋值,接着在编辑器左边的一栏中,找出并绘制设计所要的各种元器件,按照电路图连接后并保存。
3.将用keil编译产生的hex文件下载到单片机中:双击51单片机,在对话框中把保存过的hex文件打开,再单击确定。
4.单击左下角运行按钮,进行软件仿真调试,直到出现正确的结果。
19
下图为软件的仿真窗口图:
图4.1软件仿真窗口图
20
参考文献
1 谭浩强.C程序设计(第二版).清华大学出版社,2003
2 胡泉、谢芳.C语言程序设计.华中科技大学出版社,2009
3 戴 佳.51单片机C语言应用程序设计实例精讲.电子工业出版社,2007
4 张毅刚.单片机原理及应用.高等教育出版社,2004
5 马忠梅.单片机的C语言应用程序设计
(第三版).北京航空航天大学出版社,2004 6 胡汉才.单片机原理及其接口技术.北京:清华大学出版社,1995
7 潘永雄.新编单片机原理与应用.西安电子科技大学出版社,2003
8 肖玲妮、袁增贵.Protel 99 SE印刷电路板设计教程.清华大学出版社,2003
9 戴梅萼 史嘉权.微型计算机技术与应用.清华大学出版社,2003
10 何立民.单片机应用系统设计.北京:北京航空航天大学出版社,1990
11 陈明荧.8051单片机课程设计实训教材.北京:清华大学出版社,2004
21
12 王卫平.电子工艺技术基础.电子工业出版社,2004 13 单片机学习
网.http://www.mcustudy.com/
14 电子电路网.http://down.cndzz.com/ 15 张靖武.单片机原理 应用与PROTEUS仿真. 电子工业出版社,2009
致谢
本论文是在陈雷老师的悉心指导下完成的,陈老师的渊博学识和丰富的经验给我留下了深刻的印象。作为一个专科生的毕业设计,由于没有足够的经验,难免有诸多考虑不周的地方,好在有陈老师的指导和同学们的帮助,我才能按时完成任务。感谢我的指导老师陈雷老师,从课题的选择到设计的最终完成,陈老师都给予了我细心的指导和
22
不懈的支持。他严谨细致、一丝不苟的作风一直是我们学习中的榜样,并将继续影响我今后的学习和工作。在此向陈老师致以诚挚的感谢。
毕业设计培养了我思考问题,分析问题与解决问题的能力,在设计中我明白了理论与实践有很大的区别,理论上可以实现的,但要做具体的实物,却要多方面考虑。在陈老师的指导下,加上同组同学的讨论与分析,使所遇到的问题逐步得到解决。
我们的大学即将结束,今天的成绩与一直以来关心、教导我的父母、老师密不可分,在此祝愿他们身体健康、工作顺利、万事如意!
我再次感谢学校和老师给了我这次实践锻炼的机会,以及很多同学对我的帮助,为此我将尽最大的努力,并以最好的心态来回报社会,服务祖国。
23
附录Ⅰ程序源代码
#include xscode[6]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};//显示存储区 int zxscode[6]={0x1f,0x2f,0x37,0x3b,0x3d,0x3e};//共阴显示片选码 24 int codetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码 int i,j,flag; uchar sec; int kk=0;//路程标志位 int jkk=0;//费用 int jflag=0;//费用标志位 int kflag=0;//路程标志位 25 int zdflag=0;//中断标志位 int kilo=0;//路程 int dj=1;//路程单价 int djflag=0;//路程单价 biaozhiwei; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; sbit key5=P3^4; sbit SDA=P3^0; //IIC引脚 26 sbit SCL=P3^1; void delay() {;;} void delay1 (xms)//延时程序子程序 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void start() //IIC开始位 { SDA = 1; SCL = 1; delay(); SDA = 0; 27 delay(); } void stop() // IIC停止位 { SDA = 0; delay(); SCL = 1; delay(); SDA = 1; } void respons() { uchar i; //IIC应答位 28 SCL=1; delay(); while((SDA==1)&&(i<250)) i++; SCL=0; delay(); } void init() { SDA=1; delay(); SCL=1; delay(); } 29 uchar read_byte() // 从EEPROM读到MCU { uchar i,j; for(i=0;i<8;i++) { SCL=1; j<<=1; j|=SDA; SCL=0; } return(j); } 30 void write_byte(uchar date) // 从MCU写到EEPROM { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; SCL=0; delay(); SDA=CY; delay(); SCL=1; delay(); 31 } SCL=0; delay(); SDA=1; delay(); } void write_data(uchar addr, uchar date) 在指定地址addr处写入数据date { start(); write_byte(0xa0); respons(); write_byte(addr); respons(); 32 // write_byte(date); respons(); stop(); } uchar read_data(uchar addr) // addr读取数据 { uchar date; start(); write_byte(0xa0); respons(); write_byte(addr); respons(); start(); 33 在指定地址 write_byte(0xa1); respons(); date=read_byte(); stop(); return date; } void xianshi()//显示程序子程序 { for(flag=0;flag<6;flag++) { P0= xscode[flag];//送显示码 P2= zxscode[flag];// 送片选码 delay1(2); P0=0; 34 } } void jijia()//计费子程序 { if(kk<=2)//计价方案 {jkk=4;//起步价4元 kk=2; } else if(kk>2&&kk<=35) { jkk=4+dj*(kk-2)+1; } else if(kk>35&&kk<900) { 35 jkk=4+2*dj*(kk-2)+1; } kflag=kk/100;//路程百位 jflag=jkk/100;//路费百位 xscode[2]=codetab[kflag]; xscode[5]=codetab[jflag]; kflag=kk/10;//路程十位 jflag=jkk/10;//路费十位 xscode[1]=codetab[kflag]; xscode[4]=codetab[jflag]; kflag=kk%10;//路程个位 jflag=jkk%10;//路费个位 if(kflag==0){kflag=2;}//不足两公里时,显示两公里 36 xscode[0]=codetab[kflag]; xscode[3]=codetab[jflag]; } void qingling() { for(i=0;i<=5;i++)//显示码清零 {xscode[i]=0x3f;} } void main()//主程序 { init(); sec=read_data(2); if(sec>100) sec=0; TL0=(65536-2)%256 ;//计数值设置,记满 37 两次产生中断 TH0=(65536-2)/256 ; TMOD=0x06; EA=1; ET0=1; TR0=0;//关定时器 kilo=0; qingling(); aa; if(key1==0)//当键按下去,开始计费 {TR0=1;//开计数器0 kk=kilo; jijia();} if(key1==1)//当键松开,停止计费 38 { TR0=0;//停计数器1 if(key2==0)//功能调整键 { delay1(10);//延时判断键是否松开 if(key2==1) {xscode[2]=codetab[djflag++];}//当p1.2口的按键按下时功能标志位加一 } if(key3==0&&djflag==2)//当功能键标志位等1时,改变每公里的价钱 { delay1(10); if(key3==1) {dj++;} 39 xscode[1]= codetab[dj/10] ;//把价钱十位送显示区,单价不能超100 xscode[0]=codetab[dj%10]; } if(key4==0)//有键按下,清显示,单价会初始值,单价标志位清零 { qingling(); dj=1; djflag=0; } } xianshi();//调显示子程序 goto aa; 40 } void Timer0_Int() interrupt 1 using 2 // 计数器0中断服务 { zdflag=zdflag+1;//中断标志位加一 if(zdflag==2)//当中断产生二次后,路程加一公里并清中断标志位 {zdflag=0; kilo=kilo+1; } } 附录Ⅱ电路仿真图 41 42
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务