出租车计费系统论文
摘要汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标 志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价 器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器 的研究也是十分有一个应用价值的。 电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故 障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成 接触不良, 功能不易实现。 为此我们采用了单片机进行设计, 相对来说功能强大, 用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强, 可以通过软件编程来完成更多的附加功能。针对计费模式的切换,通过软件编程 就可以轻易而举的实现。避免了机械开关带来的不稳定因素。 本电路以89S52 单片机为中心、附加A44E 霍尔传感器测距(用信号发生器 的脉冲信号模拟),实现对出租车计价统计,采用AT24C02 实现系统掉电的时候 保存单价、路程和总金额等信息,输出采用4 段数码显示管,可以通过切换开关 进行切换显示。本电路设计的计价器不但能实现基本的计价,而且还能根据行驶 状态和中途等待来调节单价。1目录1 设计指标及要求····························· 4 ·····························4 2 方案比较与选择····························· ·····························52.1 方案一分析····························· ·····························5 2.2 方案二分析····························· ·····························6 2.3 AT89S52单片机介绍 ························· ·························73 电路仿真与分析····························· 9 ·····························93.1、路程计算、计价单元的设计·······················9 、路程计算、计价单元的设计 ······················ 9 3.2、数据显示单元的设计························· 、数据显示单元的设计 ·························10 3.3、程序设计 ····························· 3.3、程序设计······························11 3.3.1、主程序模块 ························· 3.3.1、主程序模块··························12 T0( 中断服务子程序················· 3.3.2 T0(定时器 0)中断服务子程序 ·················13 T1( 中断服务子程序················· 3.3.3 T1(定时器 1)中断服务子程序 ·················13 子程序····················· 3.3.4 压缩 BCD 码加 5 子程序 ·····················13 显示子程序·························· 3.3.5 显示子程序 ··························13 码转换子程序······················· 3.3.6 BCD 码转换子程序 ·······················14 3.4、电路仿真 ····························· 3.4、电路仿真······························144 电路板制作、焊接、调试························ 15 ························1 4.1 电路板制作···························· ····························15 4.2 电路板焊接···························· ····························15 4.3 电路调试····························· 16 ·················· ··········· 5 讨论及进一步研究建议··························18 ························· 6 课程设计心得······························ ······························19 7 致谢···································19 ·································· 8 Abstract·································20 ································ 9 参考文献·································21 ································ 10 附录··································· ·································· 2221.设计指标及要求 1.设计指标及要求(1)、设计任务: )、设计任务: 设计任务 设计并制作一台出租车计价器系统。 (2)、设计要求及指标 )、设计要求及指标 设计要求 A、基本要求 、 行驶状态和红灯等待状态具有不同的收费标准。 数据的复位功能 数据显示 B、发挥部分 、 能够在掉电的情况下存储单价等数据 语音播报数据信息 (3) 系统设计说明 ) 、 可以自增系统功能 允许用 MSC-51 系列或 89C52 系列单片机 系统程序采用汇编语言编程 硬件原理图采用 DXP 及 PCB 绘制32.方案论证与比较 2.方案论证与比较利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和 价格调节、掉电保护功能。框图如下:图一出租车计价器系统框图方案一:89C51单片机 单片机+ 2.1 方案一:89C51单片机+动态扫描方案一整体电路图 图二 方案一整体电路图4该方案由三部分组成,分别是:掉电保护模块、单片机模块、显示模块。 其中在显示模块,用汇编语言编写程序,以软件对单片机中的数据进行动态 扫描,动态扫描数据送4位共阴极数码管显示,通过软件实现动态输出显示;在 单片机模块中编写程序,实现计价器的各种功能。包括单价,里程计数,总价变 化等。 但采用动态显示方式最大的缺点是显示模块要长时间占用单片机CPU时, 即 使不处于计数状态,单片机CPU也要不断的对片内RAM进行扫描,对系统的有效 利用率不高。基于这个原因,我们小组的保证设计指标的前提下,对系统电路 做了改进,如方案二示。方案二:89S52单片机 单片机+ 2.2 方案二:89S52单片机+静态扫描图三方案二整体电路在方案一的基础上,我们在下列四方面做了改进: (1)、 针对片内存储单元的大小,为获得更大的存储单元,用89S52单片机代5替89C51。 (2)、 显示模块采用采用4个7位移位寄存器和4个共阴极数码管进行静态显示 以减小CPU的负荷。 (3)、 编写程序,以实现显示屏中数据间的切换(单价、路程和总价间的显 示切换) (4)、 增加显示切换指示单元,当显示状态切换时,能同步指示状态的变化。 2.3 AT89S52 单片机及其引脚说明AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密 度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了 通用8位中央处理器和ISP Flash存储单元,具有很高性价比。 AT89S51 是一个有 40 个引脚的芯片,引脚配置如下图所示。图四AT89S52引脚配置AT89S51 芯片的 40 个引脚功能为: VCC 电源电压。 GND 接地。 RST 复位输入。当 RST 变为高电平并保持 2 个机器周期时,将使单片机复位。WDT 溢出将使该引脚输出高电平, 设置 SFR AUXR 的 DISRTO 位 (地址 8EH) 可打开或关闭该功能。 DISKRTO 位缺省为 RESET 输出高电平打开状态。 XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2 来自反向振荡放大器的输出。6P0 口 一组 8 位漏极开路型双向 I/O 口。 也即地址/数据总线复用口。 作为输出口用时, 每位能驱动 8 个 TTL 逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据 存储器或程序存储器时,这组口线分时转换地址(低 8 位)和数据总线复用,在访问期间激 活内部上拉电阻。在 Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节, 校验时,要求外接上拉电阻。 P1 口 一个带内部上拉电阻的 8 位双向 I/O 口,P1 的输出缓冲级可驱动(吸收或输出 电流)4 个 TTL 逻辑门电路。对端口写“1” ,通过内部的上拉电阻把端口拉到高电平,此时 可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出 一个电流(IIL) 。Flash 编程和程序校验期间,P1 接收低 8 位地址。P1 口部分端口引脚及功 能如表 1 所示。 表 1 P1 口特殊功能 P1口引脚 P1.5 P1.6 P1.7 特殊功能 MOSI (用于ISP 编程) MOSI (用于ISP 编程) SCK(用于ISP 编程)P2 口 一个带内部上拉电阻的 8 位双向 I/O 口。P1 的输出缓冲级可驱动(吸收或输 出电流)4 个 TTL 逻辑门电路。对端口写“1” ,通过内部的上拉电阻把端口拉到高电平,此 时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输 出一个电流(IIL) 。在访问外部程序存储器或 16 位地址的外部数据存储器时,P2 口送出高 8 位地址数据。在访问 8 位地址的外部数据存储器时,P2 口线上的内容在整个访问期间不改 变。Flash 编程和程序校验期间,P2 亦接收低 8 位地址。 P3 口 一个带内部上拉电阻的 8 位双向 I/O 口。P3 的输出缓冲级可驱动(吸收或输 出电流)4 个 TTL 逻辑门电路。对 P3 口写“1”时,它们被内部的上拉电阻把拉到高电并可 作输入端口。作输入端口使用时,被外部拉低的 P3 口将用上拉电阻输出电流(IIL) 。P3 口 除了作为一般的 I/O 口线外,更重要的用途是它的第二功能,如表 2 所示。P3 口还接收一 些用于 Flash 闪速存储器编程和程序校验期间的控制信号。 表 2 P3 口特殊功能 P3口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 特殊功能 RXD(串行输入口) TXD(串行输出口) (外部中断0) (外部中断1) T0(定时器0外部输入) T1(定时器1外部输入) (外部数据存储器写选通) (外部数据存储器读选通)7PSEN 程序储存允许输出是外部程序存储器的读先通信号,当 AT89S51 由外部程序 存储器取指令(或数据)时,每个机器周期两次 PSEN/有效,即输出两个脉冲。当访问外部 数据存储器,没有两次有效的 PSEN/信号。 EA/VPP 外部访问允许。欲使 CPU 仅访问外部程序存储器,EA 端必须保持低电平,需 注意的是:如果加密位 LB1 被编程,复位时内部会锁存 EA 端状态。Flash 存储器编程时,该 引脚加上+12V 的编程电压 VPP。综合考虑2个方案的各个特点,我们小组决定采用方案二。3、电路分析与仿真3.1、 程计算、 3.1、路程计算、计价单元的设计 里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片 机,经处理计算,送给显示单元的。其原理如图2-1所示。图五路程脉冲输入我们选择了P3.4 口(定时器0的外部输入)作为信号的输入端,内部采用定 时器0中断(这样可以减少程序设计的麻烦),车轮每转一圈(我们设车轮的周 长是2米),霍尔开关就检测并输出一个脉冲信号,定时器T0计数加1,每计125 个数(相当于汽车行驶了250米),T0计满溢出一次就引起单片机的中断,在T0 中断子程序中,使寄存器R1加1,R1每计4个数,相当于行驶1km,使30H中的行程 S加1,判断若行程超过3km,在T0每次中断使R1加1时,调用BCDJ6子程序使总价 加6角。由于霍尔传感器A44E检测信号并不是本设计的重点,所以我们电路调试 时,改用信号发生器产生的脉冲信号模拟霍尔传感器A44E检测到的信号。83.2、 3.2、数据显示单元的设计3.2.1、显示单元图六显示模块从单片机串口输出的信号先送到左边的带锁存功能的 8 位移位寄存器(74HC 595),由于移位脉冲的作用,使数据向右移,达到显示的目的,然后一起输出显 示。借助软件来实现输出,使得电路在调试的时候更灵活,使硬件电路变得更简 化,大大提高了电路的可靠性。同时移位寄存器 74HC595 还兼作数码管的驱动。3.2.2 显示切换单元 由于设计要求有单价(2 位) 、路程(2 位) 、总金额(3 位)显示输出, 采用 LCD 液晶段码显示,在距离屏幕 1 米之外就无法看清数据,不能满足要求, 而且在白天其对比度也不能够满足要求,因此我们采用 4 位 LED,通过切换开关 进行切换显示。数码管的分屏显示,如图所示:9图七切换模式示意图图八切换单元电路图无论出租车处于什么状态,只要按下 S1,S2,可以实现单价、路程和总金 额的分屏显示;当 S1 处于按下状态时,显示当前的总金额,当 S2 处于按下状态 时,同时显示单价和路程,供客户查询。103.3 程序设计图九 S1:总价显示开关 S3:红灯等待计费开关系统流程图 S2:路程和单价显示开关 S4:行驶计价总开关该计程计价系统的软件设计分为以下几个模块:113.3.1、主程序模块 3.3.1、 在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初 始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还 需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始 化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计 价等不同的操作。当按下 SB0 时,就启动计价,将根据里程寄存器中的内容计算 和判断出行驶里程是否已超过起价公里数。若已超过,则将总金额的寄存器加上 单价,并送出显示路程和单价。当到达目的地的时候,通过 S1 切换开关切换显 示总金额,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。T0( 中断服务子 3.3.2 T0(定时器 0)中断服务子程序 P3.4 口(定时器 0 的外部输入)作为信号的输入端,内部采用定时器 0 中 断(这样可以减少程序设计的麻烦),车轮每转一圈(我们设车轮的周长是 2 米),霍尔开关就检测并输出一个脉冲信号,定时器 T0 计数加 1,每计 125 个 数(相当于汽车行驶了 250 米),T0 计满溢出一次就引起单片机的中断,在 T0 中断子程序中,使寄存器 R1 加 1,R1 每计 4 个数,相当于行驶 1km,使 30H 中 的行程 S 加 1,判断若行程超过 3km,在 T0 每次中断使 R1 加 1 时,调用 BCDJ6 子程序使总价加 5 角。T1( 中断服务子 3.3.3 T1(定时器 1)中断服务子程序 利用定时器 T1 检测是否处于停车状态,晶振频率用 f=12MHZ,T1 定时方式 定时 50ms,模式 1,计数初值为 3CB0H,T1 中断。当 T1 计满 0.05s 使寄存器 R2 加 1,R2 每加到 100(相当于经过 5s) ,检测一次 TL0 中的数据与上次是否相同, 如不同则使 R2 清 0 并中断返回,如相同就认为已停车,使 R2 清 0 并使 R3 加 1。 R3 每加到 9 相当于经过了 60s,调用子程序 BCDJ6 使总价加 5 角,之后调用显示 子程序显示。 3.3.4 压缩 BCD 码加 6 子程序 主要功能是将单片机中存储的计价值加 5 角 3.3.5 显示子程序12由于是分屏显示数据,所以就要用到 2 个显示子程序,分别是:总价/元显 示子程序、单价/元和路程/公里显示子程序。 3.3.6 BCD 码转换子程序 把部分单元中的压缩 BCD 码转换成非压缩 BCD 码存于特定单元中。3.4 电路仿真图图十无乘客时计价器状态(做单价、路程显示时候左边两位路程数,右边两位单价数)图十一起步价 7 元图十二3km 后单价 2.4 元图十三路程数 4 公里、单价 2.4 元图十四总价 10.6 元(7 元+3.6 元)/(3km+1.5km)134、电路板制作、焊接、调试制作过程: 4.1 制作过程:本课程设计是建立在 DXP 软件的仿真和 Protel 软件的绘制 PCB 图的基础上, 在制作电路板(PCB 板)之前,要将切换显示电路原理图转换为布线图(Protel) , 布线过程要求电路所有结点均要有连接。 我们的 PCB 板的制作过程完成得比较顺 利。打印电路图、电路图印板、腐蚀电路板,每一道工序都能够平稳的完成。焊接过程: 4.2 焊接过程:1.注意焊芯底座,不要将芯片直接焊在板上. 2.滤波电容,最好焊上,注意电解电容方向. 3.IC 插座的焊接,用排焊. 4.电压测试点,不用焊接. 5.不用的接口,不焊.让其空载. 6.焊锡之前应该先插上电烙铁的插头,给电烙铁加热。 7.焊接时,焊锡与电路板、电烙铁与电路板的夹角最好成 45 度,这样焊锡与电 烙铁夹角成 90 度。 8.焊接时,焊锡与电烙铁接触时间不要太长,以免焊锡过多或是造成漏锡;也不 要过短,以免造成虚焊 9.元件的腿尽量要直,而且不要伸出太长,以 1 毫米为好,多余的可以剪掉。 10.焊完时,焊锡最好呈圆滑的圆锥状,而且还要有金属光泽电路调试: 4.3 电路调试:14图十五 计价器初始状态图十六计价器起步价 7.0元15图十七计价器路程/单价显示图 路程0Km单价2.4元/Km165 讨论及进一步研究建议:针对本课程设计的要求,我们小组将扩展部分“实现掉电保护”作为进一步 的讨论研究。 AT24C02 引脚图及其引脚功能AT24C02 芯片引脚配置如下图所示:图AT24C02引脚配置图AT24C02芯片DIP封装,共有8个引脚,下表是其引脚功能表:引脚名 功能 地址引脚 连续数据信号/连续 时钟信号 WP VCC/GND 写保护引脚 电源端/接地端A0~A2SDA/ SCLWP接VSS时,禁止写入高位地址,WP接VDD时,允许写入任何地址;2.3 2.3.1 AT24C02 掉电存储单元的设计掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02是 ATMEL 公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压 最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V) ,芯片内的资料可以在断电的 情况下保存40 年以上,而且采用8脚的DIP封装,使用方便。其电路如下图:图掉电存储电路原理图图中R8、R9是上拉电阻,其作用是减少M24C02的静态功耗,由于M24C02的数据线 和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA (数据/地址)与单片机传送数据。 每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统 重新上电的时候, 自动调用读存储器程序, 将存储器内的单价等信息, 读到缓存单元中, 供主程序使用。176.课程设计心得此次电子系统设计中,我们组由三位同学组成,每个人都投入了最大的热情 和精力, 从设计电路图, 选择元器件, 使用 proteus 软件仿真电路, 运用 protel 软 件进行 PCB 图的绘制与布线, 焊接电路板, 每一个过程都经过了大家的共同探讨, 其过程中出现了不少的问题, 我们没有气馁, 没有退缩, 积极向老师和同学请教, 并且一遍又一遍的重复实践,直到我们期望的结果实现。事实也证明我们的努力 没有白费,认真严谨的实习态度给我们带来了成功的喜悦! 本次实习是我们到目前为止最头疼也是收获最大的一次实习。 设计是我们电 信专业将来必需的技能, 这次实习恰恰给我们提供了一个应用自己所学知识的机 会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都 对我们所学的知识进行了检验。可以说,本次实习有苦也有甜。 设计思路是最重要的,只要你的设计思路是成功的,那你的设计已经成功了 一半。因此我们应该在设计前做好充分的准备,像查找详细的资料,为我们设计 的成功打下坚实的基础。 制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调 试要一步一步来,不能急躁,因为要先在电脑上仿真,比较慢,又要求我们有一 个比较正确的仿真方法。这又要我们要灵活处理,在不影响试验的前提下可以加 快进度。 要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。 在团队合作方面,我们团队有比较明确的分工,例如,上网和到图书馆查找 资料,设计电路图,焊接电路,检查电路接口等等。而且有时候不能只是做自己 的任务,还要充分了解其他成员的任务和情况,一起讨论遇到的问题,共同思考 出方案。这次实习使我们充分认识到团队合作的重要性和必然性!7.致谢 7.致谢在此次课程设计中,由于是接触到自行设计,自行制作,自行调试的课题,难免 要遇到一些困难,在调试阶段,我们小组经历了最为艰难的时刻,在计数,锁存部分 电路的功能的实现仍存在难度,而经指导老师的指导,在经历了数天的奋战后,终 于我们小组的作品成功的通过了验收,在此要向各实验指导老师致以最衷心的感 谢.特别是代芬老师、邓小玲老师、孙道宗老师等对我们作品的支持,以及在整个 课程设计过程中给予的殷切关怀.188TheTaximeterSystemAbstractvehicle meter is both passengers and drivers of the transaction criteria, it is the taxi industry an important symbol, a taxi is the most important tools. It relates to the interests of both transactions. Has a good performance regardless of the meter is a vast number of taxi drivers or passengers are very necessary. Therefore, the car meter is also very much a study of value. Circuits and digital circuit design of the meter as a whole circuit of a larger scale, using the device, a failure rate is high and difficult to debug, the pattern of switching need to use mechanical switches, mechanical switch will cause a long-time connection is bad, functional Not easy to achieve. To this end we have adopted a microcontroller design, a relatively powerful, with less hardware and appropriate software can easily coordinate with each other to achieve the design requirements, flexibility and strong, can be programmed by software to complete more The additional features. Pricing model for the switch, software programming and can easily cite the achievement. To avoid a mechanical switch the destabilizing factors. The circuit to 89 S52 MCU as the center, additional A44E Hall sensor location (using the pulse signal generator simulation), and the Taximeter statistics, a brown-out system AT24C02 realize the time saved priced, and the total amount of distance , And other information, output by paragraph 4 of the digital display, you can switch to switch shows. The circuit design of the meter can not only achieve the basic pricing, but also under way and will wait for the state to regulate the price.199 参考文献[1] 丁元杰 主编. 《单片微机原理及应用》[M].机械工业出版社. [2] 戴永 主编. 《微机控制技术》[M].湖南大学出版社. [3] 李伯成 主编. 《微型计算机原理及接口技术》[M].清华大学出版社.附录: 10 附录:系统源程序QDJ GLJ DJ S EQU 70 EQU 24 EQU 30H EQU 31H;;;;;;;;;;;;;;;;;;JJDZJ EQU 32H JJGZJ EQU 33H ;;;;;;;;;;;;;; DJJ DJY SGW SSW JJJ JJY JJSY JJBY EQU 40H EQU 41H EQU 42H EQU 43H EQU 44H EQU 45H EQU 46H EQU 47H ORG 0000H LJMP MAIN ORG 000BH LJMP T0INT ORG 001BH LJMP T1INT MAIN: MOV SP,#60H MOV DPTR,#TAB; TMOD,#16H; MOV TMOD,#16H; MOV TH0,#83H MOV TL0,#83H TH1,#3CH;籘 定时0.05S MOV TH1,#3CH;籘1定时0.05S MOV TL1,#0B0H MOV IE,#8AH;;;;;;;;;;;;;;;;;;MOV DJJ,#00H MOV DJY,#00H MOV SGW,#00H MOV SSW,#00H MOV JJJ,#00H MOV JJY,#00H MOV JJSY,#00H JJBY,#00H MOV JJBY,#00H JB P1.4,L4;;;;;;;;;;;;;;;;;;;; SETB RS0 LCALL RDADD; CLR RS0 L4: ACALL BCDZH;;;;;;;;;;;;;;;;; ;CLR P1.2;;;;;;;;;;;;;;;;; JJ: ACALL DISP JB P1.3,JJ;; P1.3,JJ;; ;JB P1.3,JJ TR0;; SETB TR0;; SETB TR1 CLR P1.1 DJ,#56 MOV DJ,#56 MOV S,#00H ;; MOV JJGZJ,#00 ;; JJDZJ,#70;; MOV JJDZJ,#70;; ACALL BCDZH ;CLR P1.2;;;;;;;;;;;;;;;;; JJ2:ACALL DISP P1.3,JJ2;; JNB P1.3,JJ2;; ;JNB P1.3,JJ2 TR0;; CLR TR0;; CLR TR1; JNB P1.3,JJ2 SJMP20;MOV SCON,#00H;;;;;; SETB PT0CLR RS0 CLR RS1 SETB IT0 SETB IT1 P1.1;无乘客灯亮 SETB P1.1;无乘客灯亮 STA:SETB SDA SETB SCL NOP NOP CLR SDA NOP NOP CLR SCL RET 停止子程序;;;;;;;;;;; ;停止子程序;;;;;;;;;;; STOP:CLR SDA SETB SCL NOP NOP SETB SDA NOP NOP CLR SCL CLR SDA RET ;应答位检查子程序 ACK:SETB SDA SETB SCL CLR F0 MOV C,SDA JNC CEND SETB F0 CEND:CLR SCL RET ;应答 MACK:CLR SDA SETB SCL NOP NOP CLR SCL SETB SDAMAIN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAIN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;以下是掉电保护的程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;启动子程 序; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RET ;发送一字节子程序 WRBYT:MOV R6,#08H WLP:RLC A MOV SDA,C SETB SCL NOP NOP CLR SCL DJNZ R6,WLP RET ;接收一字节子程序 RDBYT:MOV R6,#08H RLP: SETB SDA SETB SCL MOV C,SDA MOV A,R2 RLC A MOV R2,A CLR SCL DJNZ R6,RLP RET ;;;;写入AT24C02程序 写入AT24C02 ;;;;写入AT24C02程序 WRADD:MOV R7,#04H LCALL STA MOV A,#0AH WRBYT LCALL WRBYT LCALL ACK JB F0,WRADD MOV A,#00H LCALL WRBYT LCALL ACK JB F0,WRADD MOV R0,#DJ WRDA: MOV A,@R0 LCALL WRBYT LCALL ACK21RET ;非应答 MNACK:SETB SDA SETB SCL NOP NOP CLR SCL CLR SDA R7,#04H;循环次数 RDADD: MOV R7,#04H;循环次数 ;启动发送 LCALL STA ;启动发送 MOV A,#0A0H ; LCALL WRBYT ; LCALL ACK JB F0,RDADD MOV A,#00H ; LCALL WRBYT LCALL ACK JB F0,RDADD LCALL STA MOV A,#0A1H LCALL WRBYT ACK LCALL ACK JB F0,RDADD MOV R0,#DJ RDN: LCALL RDBYT; ;; ;MOV @R0,A ; DJNZ R7,ACK1 LCALL MNACK ; LCALL STOP ; RET ;发送应答位 ACK1: LCALL MACK ;发送应答位 INC R0 SJMP RDN SDA EQU P1.7 SCL EQU P1.6 ;延时10MS子程序DELAY10M:MOV 延时10MS子程序DELAY10M:MOV 10MS子程序 R7,#0AH DL3:MOV R6,#0FFH DL4: DJNZ R6,DL4 DJNZ R7,DL3 RETJB F0,WRADD INC R0 DJNZ R7,WRDA LCALL STOP DELAY10m LCALL DELAY10m RET ;;;;;;;;;;;;;;;;读取AT24C02程序 读取AT24C02 ;;;;;;;;;;;;;;;;读取AT24C02程序 ;掉电保护子程序结束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ;; BCDZH:PUSH ACC SETB RS0 MOV R0,#DJ MOV R1,#DJJ LPB: MOV A,@R0 MOV R2,A ANL A,#0FH MOV @R1,A INC R1 MOV A,R2 ANL A,#0F0H SWAP A MOV @R1,A INC R0 INC R1 CJNE R0,#34H,LPB;;;;;;;;;;;;;;;;;;;; CLR RS0 POP ACC RET DISP:SETB RS0 JB P1.0,L1 MOV R0,#DJJ CLR P1.2 SJMP L2 L1:MOV R0,#JJJ L2:MOV R1,#4 MOV A,#08H LP: MOV P2,A MOV R2,A MOV A,@R0 MOVC A,@A+DPTR22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ACALL DELAY INC R0 MOV A,R2 RR A DJNZ R1,LP CLR RS0 L3:RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH, 6FH ;延时1ms子程序 延时1ms子程序 1ms DELAY:MOV R7,#02H DL:MOV R6,#0FFH DL1: DJNZ R6,DL1 DJNZ R7,DL RET ;T0中断子程序, 250m中断一次 ;T0中断子程序,每250m中断一次 中断子程序 T0INT:PUSH ACC R1;;R1中存250m数 中存250m INC R1;;R1中存250m数,每 行驶250mR1 250mR1加 行驶250mR1加1 R1,#4,LPT0;; CJNE R1,#4,LPT0;;行驶不 千米,行程S不加1 满1千米,行程S不加1,转LPT0 A,S;;行程每满1千米, MOV A,S;;行程每满1千米, 行程s 行程s加1 ADD A,#1 DA A MOV S,A R1,#0;;R1复 MOV R1,#0;;R1复0 LPT0: MOV A,S CLR C SUBB A,#3 FH0;;行程S不到3千米, JC FH0;;行程S不到3千米, 计价不加6 转返回FH0 计价不加6,转返回FH0 BCDJ6;; 行程S 千米, ACALL BCDJ6;; 行程S满3千米, 调用BCDJ6子程序计价加 BCDJ6子程序计价加6 调用BCDJ6子程序计价加6 FH0: ACALL BCDZH ;CLR P1.2;;;;;;;;;;;;;;;;; SETB RS0 LCALL WRADDJNB P2.2,L5 ORL A,#80H L5:MOV P0,A POP ACC RETI ;; BCDJ6: MOV A,JJDZJ ADD A,#6 DA A MOV JJDZJ,A MOV A,JJGZJ ADDC A,#0 DA A MOV JJGZJ,A RET ;T1中断子程序 中断子程序, 0.05s中断一次 ;T1中断子程序,每0.05s中断一次 T1INT:PUSH ACC MOV TH1,#3CH MOV TL1,#0B0H MOV A,R2 JNZ LPT MOV R4,TL0 LPT: INC R2 R2,#100,FH1 CJNE R2,#100,FH1 MOV R2,#0 MOV A,R4 CJNE R3,#9,FH1 MOV R3,#0 ACALL BCDJ6 ACALL BCDZH SETB RS0 LCALL WRADD CLR RS0 ;CLR P1.2;;;;;;;;;;;;;;;;; ACALL DISP FH1: POP ACC RETI END23CLR RS0 ACALL DISP24