单片机原理与接口技术课程设计-单片机出租车计价器设计.doc_第1页
单片机原理与接口技术课程设计-单片机出租车计价器设计.doc_第2页
单片机原理与接口技术课程设计-单片机出租车计价器设计.doc_第3页
单片机原理与接口技术课程设计-单片机出租车计价器设计.doc_第4页
单片机原理与接口技术课程设计-单片机出租车计价器设计.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理与接口技术课程设计单片机原理与接口技术课 程 设 计成绩评定表设计课题 : 出租车计价器设计 学院名称 : 电气工程学院 专业班级 : 学生姓名 : 学 号 : 指导教师 : 设计地点 : 31-505 设计时间 : 2012-12-172012-12-23 指导教师意见:成绩: 签名: 年 月 日 单片机原理与接口技术课 程 设 计课程设计名称: 出租车计价器设计 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 王黎、 臧海河、周刚 课程设计地点: 31-505 课程设计时间: 2012-12-172012-12-28 单片机原理与接口技术 课程设计任务书学生姓名 专业班级 学号 题 目出租车计价器设计课题性质工程设计课题来源自拟指导教师 王黎、臧海河、周刚主要内容(参数)基于AT89S51单片机的出租车计价器。1.设置白天/晚上收费标准的转换开关,使白天和晚上这两种不同情况具有不同的收费标准。 2.设置数据的清零开关,并且能够由司机以手动的方式自由修改单价。3.能够在意外掉电的情况下存储单价等数据,并且具有数据的复位功能。4.设置显示液晶页面,使司机与顾客能够清楚的看到液晶所显示当前时间以及路程、总金额和单价。任务要求(进度)第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。第3-4天:按照确定的方案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。第5-6天:软件设计,编写程序。第7-8天:实验室调试。第9-10天:撰写课程设计报告。要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。主要参考资料1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042伟福LAB6000系列单片机仿真实验系统使用说明书3 阎石数字电路技术基础(第五版)北京:高等教育出版社,2006出租车计价器目 录1 引言41.1系统概述41.2 设计目的与要求42 总体方案设计52.1硬件组成52.2 方案论证52.3 总体方案63硬件方案设计83.1硬件设计说明83.2 AT89S51单片机简介83.3硬件组成93.4 液晶1602介绍144.系统软件设计154.1系统程序设计154.2掉电存储AT24C02174.3按键部分174.4显示部分184.5霍尔计程部分215.系统调试与总结215.1 软件编程215.2 软件仿真在线调试-Proteus225.3 硬件电路235.4 硬件电路调试235.5 总结24参考文献:24附录A 系统protel原理图25附 录B 源程序251 引言1.1系统概述出租车计价器是乘客与司机双方的交易准则,是出租车行业规范发展的重要标志,它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,计价器的研究也是十分有应用价值的。本系统是以单片机为核心配合外围电路实现的,具有硬件简洁、软件灵活、便于扩展的特点。本设计采用灵敏的霍尔传感器实现测距,AT24c02实现掉电保存信息,液晶1602实现显示功能,3个按键实现控制功能本系统设计以AT89S51单片机为核心,采用A44E霍尔传感器测距,实现对出租车的不同时段计价统计,采用2个四位一体8段数码管显示费用,不计价时显示为时钟,采用AT24C02实现在系统掉电时保存模式(白天或晚上)单价和与起步价等信息。1.2 设计目的与要求 通过综合运用教材及其他资料,使所学知识得到进一步加深和扩展。同时还培养设计能力和解决实际问题能力,进行基本技能的训练, 进一步熟练proteus,keilC等软件的操作。本设计的目的是在学习51系列单片机的基础上,设计出符合要求的电路,从而实现设计产品的计价功能。利用AT89S51单片机,设计简单的出租车计价器。在出租车计价器的总体设计中,除必有的晶振电路,复位电路,电源电路外,主要的外围功能电路有:按键控制电路,掉电保护电路,液晶显示电路等。通过对以上各功能的设计,制作出的出租车计价器应具有以下功能:上电时显示模式;按下计价键开始进行计价,最终金额与行驶里程,按下设置键,并通过设置+和设置-实现价格,起步价白天和晚上价格进行调整。2 总体方案设计2.1硬件组成按照设计技术要求控制系统硬件如下:(1)控制器。作为控制系统的核心,微控制器,在车行进过程中按规定的计价方式计价,可根据不同的时间进行选择计价方式。同时可调整其变量。(2)利用车轮的转动,通过传感器产生脉冲,送入控制器进行计数。(3)控制模式。控制器可以调整单价起步价等信息,方便价格调整。(4)人机交互界面。通过液晶显示,使直观显示里程,单价,起步价,总价等信息。(5)掉电存储器。对于选定模式与价格后,能在掉电后保存单价等数据不变。硬件方框图如图所示。系统结构图2.2 方案论证(1)控制器由于计价器运算较简单,数据量较小,故采用8为单片机AT89S51,相对于其他16位,32位的MCU,AT89S51具有价格较低且操作方便的优势。(2)传感器的选用传感器的种类较多,可以使用编码器,霍尔传感器等。编码器精度较高价格较贵,由于出租车计数产生脉冲的频率不是很快,所以使用价格相对较低的霍尔传感器。(3)控制模式控制模式采用键盘控制的方式,通过三个按键实现对模式,价格等的调整。(4)人机交互界面人机交互界面主要有以下几种形式: CRT显示器及标准键盘:显示信息量大,操作方便,显示界面友好,但价格高,适用于采用工控机作控制器的场合。 工业人机界面(触摸屏):和CRT显示器一样,具有显示信息量大,操作方便,显示界面友好,适合恶劣的工业环境使用等特点,但价格更高,一般与PLC配套使用。 LED或LCD数码显示器及自行设计的小键盘:价格低廉、体积小是其最大优点,应用于以MCU为控制器的系统中较合适。考虑价格及系统构成等因素,人机交互界面采用LCD显示器及自行设计的小键盘。(5)掉电存储器。配方存储器用于存储设置的配方,需要使用非易失存储器,常用的非易失存储器有以下几种: RAM加后备电源:早期常采用的非易失存储器,电路设计复杂,设计不好可靠性不高,可存储的数据量较大。 FLASH存储器:存储数据量较大,存取速度快,但需要+12V的编程电源,增加了硬件开支。 并行EEPROM:采用+12V编程电源的,具有FLASH存储器的特点,但写入速度慢;采用+5V编程电源的,可靠性不高。 串行EEPROM:与MCU接口方便,价格便宜,可靠性高,适用于存储数据量不大的场合。本课题中,需要存储的配方数据量小,采用串行EEPROM。2.3 总体方案按照上述方案论证的结果,计价器的总体方案基本定型,通过霍尔传感器对车速进行采集,送入单片机,再通过单片机的内部处理数据,将处理好的数据送入1602显示,另一方面通过对数据存储在EEROM中,防止掉电数据丢失。3硬件方案设计3.1硬件设计说明单片机是单片微型计算机的简称,单片机以其卓越的性能,得到广泛的应用,已经深入到各个领域。在这次设计中,我们用到P0口、P1口、P2口和P3口。各口均由口锁存器、输出驱动器、和输入缓冲器组成。4组IO口除都可用作一般输入/输出口外,P0口还可作为分时复用的低8位地址/数据总线,P2口作为高8位地址总线;P1口是唯一的单功能口,仅用作通用的数据输入/输出口;P3口还可用作第二功能口使用。设计中,由于显示的内容较多,为了直观故采用液晶1602显示,在本次硬件设计中,也可以用数码管进行显示。由于在这次设计中只需要显示里程和金额信息,这样硬件简单显示内容较多,又可以达到显示的目的。同时为了减少硬件的复杂度。我们还设计了4个控制按键,能够很好的对出租车计价器控制,包括计价按键,模式选择,加按键,减按键。 3.2 AT89S51单片机简介AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器, 128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。单片机I/O口分配如下:P2口接1602的数据口,P1.0和1.1接AT24C02 SCL和SDA,P2口接三极管驱动数码管,P3口接按键、霍尔传感器。3.3硬件组成硬件组成主要包括:晶振电路、复位电路、显示电路、掉电存储电路、按键电路。MCS-51单片机的各功能部件都是以时钟控制信号为基准,内部电路在时钟信号的控制下,严格地按时序执行指令进行工作,单片机本身如同一个复杂的同步时序电路,为了保证其各个部分同步工作,电路要在唯一的时钟信号控制下,严格地按照时序进行工作。其实只需在时钟引脚连接上外围的定时控制元件,就可以构成一个稳定的自激振荡器。为更好地保证振荡器稳定可靠地工作,谐振器和电容应尽可能安装得与单片机芯片靠近。本设计中使用的振荡电路,由12MHZ晶体振荡器和两个约30PF的电容组成,在XTAL1和XTAL2两端跨接晶体,电容的大小不会影响振荡频率的高低。在整个系统中为系统各个部分提供基准频率,以防因其工作频率不稳定而造成相关设备的工作频率不稳定,晶振可以在电路中产生振荡电流,发出时钟信号。晶振电路单片机的复位是由外部的复位电路实现的, 复位电路通常采用上电自动复位和按钮复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。除了上电复位外还需要按键手动复位按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻与电源VCC接通而实现的单片机的复位速度比外围I/O接口电路快为能够保证系统可靠的复位,在初始化程序中应安排一定的复位延迟时间。复位电路掉电保护电路中采用了存储芯片AT24C02。AT24C02是一个CMOS标准的EEPROM存储器,是AT24CXX系列(AT24C01/02/04/08/16)成员之一,这些EEPROM存储器的特点是功耗小、成本低、电源范围宽,静态电源电流约30uA110uA,具有标准的I2C总线接口,是应用广泛的小容量存储器之一。 图29 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):电源线引脚。本设计采用掉电存储电路图如下:掉电存储电路按键控制电路中,单片机的P1口分别连接8个按键式开关,P3.0模式/调值选择按键;P3.1接加按键;P3.2接减按键;P3.6接开始计价-按键; 按键电路脉冲计数法是智能测速系统中常用的方法。只要转轴每旋转一周,产生一个或固定的多个脉冲,并将脉冲送入微处理器中进行计数。A44E霍尔传感器属于开关型的霍尔器件,其工作电压范围比较宽(4.5V-18V),其输出的信号符合TTL电平标准,可以直接接到单片机的I/O端口上,而且其最高检测频率可达到1MHZ。A44E霍尔开关集成电路应用霍尔效应原理,采用半导体集成技术制造的磁敏电路,它是由电压调整器,霍尔电压发生器,差分放大器,施密特触发器,温度补偿电路和集电极开路的输出级组成的磁敏传感电路,输入为磁感应强度,输出是一个数组电压信号。下图为霍尔传感器测距示意图。单片机霍尔传感器测距霍尔传感器A44E的输出特性霍尔开关电路的输出特性见图 所示。在输入端输入电压V cc ,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差V H 输出,该V H 信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC 门输出。当施加的磁场达到工作点(即BOP) 时,触发器输出高电压(相对于地电位) ,使三极管导通,此时OC 门输出端输出低电压,通常称这种状态为开。当施加的磁场达到释放点(即BRP )时,触发器输出低电压,三极管截止,使OC 门输出高电压,这种状态为关。在外磁场的作用下,当磁感应强度超过导通阈值BOP时,霍尔电路输出管导通,输出低电平。之后, B 再增加,仍保持导通态。若外加磁场的B 值降低到B RP时,输出管截止,输出高电平。我们称BOP 为工作点, BRP 为释放点,BOP - BRP = BH 称为回差。回差的存在使开关电路的抗干扰能力增强。这样两次电压变换,使霍耳开关完成了一次开关动作。一般规定,当外加磁场的南极( S 极) 接近霍尔电路外壳上打有标志的一面时,作用到霍尔电路上的磁场方向为正,北极接近标志面时为负。下图为霍尔传感器在电路中的连接方式霍尔传感器连接图3.4 液晶1602介绍多数的应用系统,都要配输出外设,LED显示器和LCD显示器,为了达到显示目的,我们选用了LCD1602显示器.在显示方面,我们选用LCD显示。背光亮度可调,可显示两行,每行16字符,不能显示汉字,内置含128个字符的ASCII字符集字库,并行接口编程容易,但是占用的I/O口线比较多,LCD16021602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。4.系统软件设计4.1系统程序设计本设计是采用C语言编写的,采用模块化操作,将繁杂的程序分成若干个相对独立的模块分别进行编写,使得程序在修改,执行的时候显得方便易行。本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。在main函数编写开始,要进行初始化,包括对系统初始化和对存储器初始化,要对硬件设备进行初始化,并使硬件处于就绪状态。通过判断是否计费,调价,等状态,来分别调用不同的子程序,使程序在设计之前,就有了很强的逻辑关系。这些对应于硬件就是通过按下各个控制开关,来分别进行不同的动作,最后数码管根据输入的信息,来显示不同的数据信息,这就达到了软件控制硬件,同时输入信息控制输出信息的目的。本程序分为1602LCD显示程序,AT24CO2子函数,按键扫描控制子函数,主函数部分,中断子函数几大模块,整体流程图如下:系统程序流程图4.2掉电存储AT24C02我们根据24C02的时序图来完成“读”、“写”操作。时序图如下:多个图应分别提及。起始命令和停止命令时序图应答信号时序图数据有效时序图4.3按键部分本设计还有丰富的控制功能,包含了4个按键,功能分别有计价、模式调整(白天、黑夜)、价格显示(起步价、单价)、设置启动、设置+、设置-。本系统可以实现分时(白天/黑夜)计价,具体计价方式根据当地出租车运行标准计算,当前标准如下图:打车费用(郑州市)描述起步价(元)单价(元/公里)总费用(元)白天(05:00-22:00)8.01.5晚上(22:00-05:00)10.01.5大于二公里超过三公里部分每公里计价白天计价小于二公里费用=起步价黑夜计价计费准则4.4显示部分指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表10-15:基本操作时序表读写操作时序如图所示:图 读操作时序图写操作时序1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图是1602的内部显示地址。1602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”4.5霍尔计程部分霍尔传感测距函数霍尔传感器的输出为脉冲波形,我们可以设置外部中断0的触发方式为边沿触发方式(即设置IT0=1),此时车轮每转一圈,产生一个下降沿,外部中断函数中计数加1,通过累加计数,获得出轮的转数,再乘以周长,便得到行驶路程。1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)中断函数流程图5.系统调试与总结5.1 软件编程8051单片机的应用程序设计,使用C51语言进行程序设计虽然相对于汇编语言代码效率有所下降,但可以方便地实现程序设计模块化,代码结构清晰、可读性强,易于维护、更新和移植,适合较大规模的单片机程序设计。近年来,随着C51语言的编译器性能的不断提高,在绝大多数应用环境下,C51程序的执行效率已经非常接近汇编语言,因此,使用C51进行单片机程序设计已经成为单片机程序设计的主流选择之一。程序调试工具-KEIL软件本设计的软件都是在 Keil4上进行编写,编译,调试以及运行操作。KEIL软件界面5.2 软件仿真在线调试-Proteus1.打开Proteus软件。2.选择file菜单下的 open design选项,找到所需的元器件,元器件上单击右键选中,再单击左键对其进行命名和赋值,接着在编辑器左边的一栏中,找出并绘制设计所要的各种元器件,按照电路图连接后并保存。3.将用keil编译产生的hex文件下载到单片机中:双击51单片机,在对话框中把保存过的hex文件打开,再单击确定。 4.单击左下角运行按钮,进行软件仿真调试,直到出现正确的结果。在仿真中,我们利用方波输出器模拟霍尔传感器的输出,并在不影响结果的前提下省略了三极管驱动电路以简化仿真图,仿真图如下:Proteus仿真图5.3 硬件电路在焊接电路前,首先要进行元器件的检测。检测主要是测出各个元器件的型号。对于数码管的检测在显示电路中已介绍。识别电阻时可根据各环的数量级和色码表,判断电阻的阻值。排阻是将多个电阻集中封装在一起,组合制成的。排阻具有装配方便、安装密度高等优点。常用排阻有A型和B型。A型排阻的引脚总是奇数的。它的左端有一个公共端(用白色的圆点表示),常见的排阻有4、7、8个电阻,所以引脚共有5或8或9个。B型排阻的引脚总是偶数的。它没有公共端,常见的排阻有4个电阻,所以引脚共有8个。排阻的阻值读法如下:“103”表示:10k,“510”表示:51。以此类推。对于集成芯片的检测,就是根据它的管脚图,来识别各个引脚,以方便焊接。5.4 硬件电路调试设计的过程中,对硬件的检测和对软件的测试都不能忽略,因为在系统的仿真过程中,各元件都是理想的,而在设计实际电路时,就需要多方面考虑。要先对元件进行检测,然后进行调试。例如如果在设计中不加任何驱动,在仿真软件中仍然可以正常计价,但是在具体硬件焊接时,需要考虑电路的驱动能力。 在已经焊接好的电路板上,要对其各个元器件进行检查。一般情况下,集成电路不会出现故障。驱动部分是检查三极管与数码管和单片机接触的各个引脚,看是否焊接良好。显示部分检测的目的是看数码管是否能够正常显示。如果不该亮的字段点亮,检测是因否有短路的情况;如果数码管不显示,说明位选端可能没有焊好;如果显示不够亮,则应该检查驱动电路。晶振部分使用示波器查看波形。如果出现看不到12MHZ的正弦波形的现象,说明此部分电路不正常。时钟部分通过与北京时间的对比完成检测。计价部分可以通过采用脉冲发生器实现检测。5.5 总结MCU具有体积小、重量轻、价格低廉的特点,应用于小型系统中可以有效降低系统的成本。针对不同的情况,采取相应的抗干扰措施,霍尔传感器具有较强的稳定性,可以较长时间使用,液晶1602显示内容较多,工业级稳定性好,显示内容较多。可以在环境恶劣的工业现场可靠地运行。参考文献: 1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042伟福LAB6000系列单片机仿真实验系统使用说明书3 阎石数字电路技术基础(第五版)北京:高等教育出版社,20064郭天祥. 新概念51单片机C语言教程. 电子工业出版社,20094康华光 模拟电子技术基础(第五版).高等教育出版社,2006 5彭伟.单片机C语言程序设计实训100例:基于8051+Proteus仿真.电子工业出版社,2009附录A 系统protel原理图附 录B 源程序注:程序在keil 4中编译通过,并测试#include reg52.h#include AT24c02.h#define uchar unsigned char #define uint unsigned intsbit rs=P35;sbit lcden=P34;sbit s1=P30;/功能键sbit s2=P31;/增加键sbit s3=P32;/减小键sbit s4=P36;/计价开始uchar s1num=0;/记录功能键按下的次数uchar flag=0;/正常工作模式uchar count_start=0,day_flag=1,day_price=8,night_price=10;/白天flag为1float danjia=1.5,zongjia;unsigned long int count;/计算步数uchar code table=Day :08+1.5/km ;uchar code table1=Night:10+1.5/km; void delay(uint z)/延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/写液晶命令函数rs=0;lcden=0;P2=com;delay(4);lcden=1;delay(4);lcden=0;void write_date(uchar date)/写液晶数据函数rs=1;lcden=0;P2=date;delay(4);lcden=1;delay(4);lcden=0;void write_count(uchar add,uchar date)/显示步数char shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void write_danjia(uchar add,float date)uchar shi,ge;ge=(char)(date*10)%10;shi=(char)date)%10;write_com(0x80+add);write_date(0x30+shi);write_com(0x80+2+add);write_date(0x30+ge);void write_sfm(uchar add,float date)/1602液晶刷新金额和公里数char qian,bai,shi,ge,mao;uchar a=. ;mao=(int)(date*10)%10;ge=(int)date)%10;shi=(int)date)/10%10;bai=(int)date)/100%10;qian=(int)date)/1000%10;write_com(0x80+0x40+add);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);write_date(a);write_date(0x30+mao);void write_xinxi()uchar i; write_com(0x80);if(day_flag=1)for(i=0;i15;i+) write_date(tablei); write_count(6,day_price);elsefor(i=0;i15;i+)write_date(table1i); write_count(6,night_price); write_danjia(9,danjia);void init()/初始化函数EA=1;/打开总中断EX1=1;/开外部中断1IT1=1;/设置负跳变沿触发中断write_com(0x38);/1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_xinxi();write_com(0x80+0x40);write_date(36); /$write_date(58); /:write_com(0x80+0x40+0x09);write_date(107); /Kwrite_date(109); /Mwrite_date(58); /: void price(uchar qibu,float dj,unsigned long int jb) if(jb1000)zongjia=qibu+dj*(jb-1000)*2)/1000+1); write_sfm(2,zongjia) ; else write_sfm(2,qibu) ; write_sfm(12,(jb*2)/1000) ; void keycan() if(s4=0)delay(5);if(s4=0) while(!s4); if(count_start=0)count_start=1;elsecount_start=0; if(s1=0)delay(5);if(s1=0)s1num+;flag=1;while(!s1);switch(s1num) /光标闪烁定位case 1:write_com(0x80+0);write_com(0x0f);break;case 2:write_com(0x80+7);break;case 3:write_com(0x80+11);break;default :s1num=0;flag=0;write_com(0x0c);break;if(s1num!=0)if(s2=0)delay(5);while(!s2);switch(s1num)case 1:if(day_flag=1) day_flag=0;else day_flag=1; write_xinxi();break;case 2:if(day_flag=1)day_price+;write_count(6,day_price);elsenight_price+;write_count(6,night_price); write_com(0x80+7);break;case 3:danjia=danjia+0.1; write_danjia(9,danjia); write_com(0x80+11);break;if(s3=0)delay(5);while(!s3);switch(s1num)case 1:if(day_flag=1) day_flag=0;else day_flag=1; write_xinxi();break;case 2:if(day_flag=1)day_price-;write_count(6,day_price);elsenight_price-;write_count(6,night_price); write_com(0x80+7);break;case 3:danjia=dan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论