收藏 分销(赏)

本科毕业论文---基于单片机的出租车拼车计价器设计论文.doc

上传人:可**** 文档编号:9872116 上传时间:2025-04-11 格式:DOC 页数:36 大小:765KB 下载积分:8 金币
下载 相关 举报
本科毕业论文---基于单片机的出租车拼车计价器设计论文.doc_第1页
第1页 / 共36页
本科毕业论文---基于单片机的出租车拼车计价器设计论文.doc_第2页
第2页 / 共36页


点击查看更多>>
资源描述
滨州学院本科毕业设计(论文) 毕业设计(论文) 题 目 基于单片机的出租车 拼车计价器设计 系 (院) 电气工程系 专 业 电气工程与自动化 班 级 学生姓名 学 号 指导教师 职 称 二〇 年 月 日 独 创 声 明 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。据我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 本声明的法律后果由本人承担。 作者签名: 年 月 日 毕业设计(论文)使用授权声明 本人完全了解该学校关于收集、保存、使用毕业设计(论文)的规定。 本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定) 作者签名: 年 月 日 本科毕业设计(论文) 基于单片机的出租车拼车计价器设计 摘 要 随着环境污染日益严重的趋势,以及城市交通越来越拥堵的趋势,出租车拼车越来越流行,拼车在城市交通中扮演着举足轻重的作用。然而,拼车带来一系列的问题,例如乘客与司机间的纠纷,乱收费的现象,究其原因,没有一套完善的拼车计价器得到推广使用。基于这个问题,本设计致力于完善传统的拼车计价器,以满足市场,乘客,司机的需求。 系统的功能是基于单片机控制下的各个模块功能的实现。系统以AT89S52单片机为控制核心,实现车内液晶显示,语音播报,票据打印等功能。系统硬件主要包括:12V转5V的电源模块,输入模块,单片机最小系统,车内液晶模块,车外LED模块,霍尔传感器测距模块,语音播报模块,票据打印模块等。软件则包括:系统的流程图,主程序以及各模块子程序。 本设计可完成车外显示拼车状态,车内显示时间,里程数,票价,语音播报,票据打印等功能。本设计最多可完成三人拼车,而且拼车达一定里程数可有优惠,最终使得乘客,司机都受益。 关键词:拼车计价器,单片机,霍尔元件 Carpool Meter Design Based On SCM Abstract With the trend of increasingly serious environmental pollution, as well as the trend of increasingly congested urban traffic, carpool becomes more and more popular,so it plays an important role in urban transport. However, carpool causes a series of problems, such as disputes between passengers and drivers,the phenomenal of bad charge.The main reason is that the market doesn’t have a widespread carpool charge device. In view of this problem, this design is committed to improving the traditional car meter for satisfying the market 's, passengers ' and drivers ' needs. Function of the system is the realization of each module based on single-chip microcomputer control. The System is based on AT89S52 single-chip microcomputer, coupled with inside LCD, voice broadcast, ticket printing and other functions. System hardware includes:12V turn 5V power supply module, data-input module, smallest single-chip microcomputer system, LCD module, LED module outside the car, Hall sensors module, broadcast module, ticket-printing module. Software includes: system flow chart, the main program, as well as module subprograms. This design allows for the display of carpool conditon, time, mileage, fare, and it also has the function of broadcasting voice, printing bill. This design can complete up to three people for carpool, what’s more,carpool at a certain mileage will eventually benefit the passengers and drivers. Keywords: car meter, microcontroller,holzer components 30 目 录 第一章 绪论 1 1.1拼车计价器研究的背景意义 1 1.2 设计的主要研究工作 1 1.3 设计目标 2 第二章 系统总设计方案 3 第三章 系统硬件设计 5 3.1电源转换电路 5 3.2 单片机最小系统 5 3.3 掉电保护电路 6 3.3.1 TL7705的工作特性 7 3.3.2 掉电保护电路工作原理 7 3.4 路程测量模块 7 3.4.1 A44E的工作特性 8 3.5 输入模块 8 3.5.1 74HC164移位寄存器 9 3.5.2 外部中断扩展设计 9 3.5.3 输入模块的电路原理图 10 3.6 显示模块 10 3.6.1 12864液晶显示 10 3.6.2 车外LED显示屏 11 3.7 语音模块 12 3.8 票据打印模块 13 第四章 系统软件设计 14 4.1 主程序流程图设计 14 4.2 各个子模块流程图设计 15 4.2.1 掉电保护电路 15 4.2.2 路程测量模块中断流程 15 4.2.3 独立键盘模块 16 4.2.4 车内液晶显示模块 17 4.2.5 车顶LED显示模块 17 4.2.6 语音模块 18 4.2.7 票据打印模块 18 4.3 主要模块子程序 19 4.3.1路程测量程序: 19 4.3.2 计价程序 20 4.3.3 独立键盘程序(外部中断方式查询) 21 4.3.4 12864液晶显示程序 23 第五章 总结 27 参考文献 28 谢 辞 29 附 录 30 第一章 绪论 1.1拼车计价器研究的背景意义 在大力倡导节能环保减排的当下,拼车能够起到缓解交通压力的作用,而且节省道路资源,还能提高汽车使用效能,因此无论是从环保,还是缓解交通压力方面看,拼车,可以减轻污染,节省资源[1],对于社会的可持续发展起着重要作用。 拼车以一种合理的计价方式向乘客收取乘车费用,降低乘车成本,而且对于司机来说可以获取更多的回报。因而当打车困难时,很多乘客乘客是愿意进行拼车出行的。只要拼车适当,既能降低乘客的乘车费用,而且能够提高交通运输的效率,理应得到社会的推广与完善,尤其是在提倡可持续发展的当下。 但是,部分出租车司机强行拼车、绕路拼车、拼车不打折等行为,也一度成为网友吐槽的热点。因此,研制出合理的拼车计价器不仅能保障消费者的权益,也使得出租车市场更加公开公正,使得广大市民放心乘车,从而有效缓解环境污染,交通拥堵问题,对于社会的长远发展起着举足轻重的作用。 1.2 设计的主要研究工作 目前单片机的应用越来越广泛,在众多控制领域都有涉及到单片机。单片机作为方便高效的微控制处理器,给科技社会的发展带来了日新月异的变化。单片机因其体积小,功耗小,控制功能强大等许多优点,被广泛地用于智能仪器,家用电器,工业控制,网络通信,汽车电子等众多领域。而且单片经过几十年的发展完善,功能越来越强大,在科技社会中占有重要地位。 本次设计就是一款基于单片机AT89S52的拼车计价器设计。本系统的硬件部分需要完成电源模块,液晶显示模块,语音模块,路程测量模块,票据打印等模块的设计。其中电源模块需要根据车载电瓶的输出电压设计出一款电压转换电路,提供单片机以及其他用电模块的额定使用电压。液晶显示模块则要选定合适的液晶显示屏,然后弄清楚使用手册,然后实现相应的功能。路程测量模块需要比较一些常用测距的传感器,确定一款性价比较高的传感器作为本系统的路程测距模块。语音模块则使得本次设计更加人性化,合理化,提供更高质量的服务。票据打印本着公平公正的原则,避免一些因为不公平问题引起的纠纷。 软件部分采用C语言进行编程。首先,可以根据硬件部分的系统框图设计出结构流程图,然后用C语言写出主程序,各个模块重要的子程序,程序的各个模块子程序应该做到见名达意。 1.3 设计目标 系统能够实现12V电压转5V电压,进过滤波电路处理后,能够保持稳定的5V电压输出。当乘客上车后可以通过触摸屏输入相关信息,然后系统立即能够更新乘客的乘车信息,车内液晶显示屏上能够及时更新乘客行驶的里程数,乘车费用,时间等信息。车外LED显示器能够显示行驶路向,拼车状态(拼车人数是否已满)。语音播放器则能播报一些人性化的内容,放松乘客的心态。当乘客到站下车后,系统能通过票据打印器打印出乘车信息。 第二章 系统总设计方案 本系统以AT89S52单片机为控制核心,以电源转换模块,输入模块,距离测量模块,车内液晶显示模块(采用12864液晶),车外LED模块,语音播报模块,票据打印模块为主要的模块单元。系统框图如图2-1所示。 图2-1 系统框图 车载电瓶12V电压经过电源转换电路得到5V电压,5V电压供电给MCU,以及各个模块。当有第一位乘客A乘车时,司机通过触摸屏输入该乘客的目的地,然后通过车外LED显示器显示出来。同时通过键盘按下按键start1,当车开动后,通过测距传感器传送的路程进行计费,同时把路程距离和费用实时在12864液晶屏上进行显示。在行车过程中,语音模块播送相关信息。乘客A到站下车后,司机按下按键stop1,则停止对乘客A的信息记录,然后通过票据打印机打印出相关的费用票据,司机再次按下按键clear1,则会清空乘客A的乘车记录。如果途中有乘客协商拼车,司机按下按键start2则对第二名乘客B进行乘车记录,乘客B下车时只需按下stop2,清空记录只需按下按键clear2,操作及功能与乘客A相同。本系统最多允许3人拼车,第三人拼车时操作规程与乘客A,B类似。以上即为系统的设计方案。 本系统计费方式根据行车阶段划分车费。具体计费方案举例来说明:甲从A地上车,行驶了a段路程,此时乙拼车,在甲行驶的a段路程中单独乘车费用为x, 然后甲乙两人又共同行驶了b段路程,此时甲下车,在共同行驶的b段路程中乘车费用为y,则两人平摊费用y,即平均每人花费y/2,那么甲在此次乘车过程中总共花费x+y/2。当三人拼车时,道理亦然。在这个方法中,我们根据三个人的下车顺序对车程进行了划分,然后将每一阶段的花费均摊到此阶段车上的人身上,每个人需要支付所有摊到的价钱。当然本次设计在充分考虑到公平公正的同时,也给与了乘客一些优惠政策:当某乘客行车达一定里程数时,可以减少拼车费用,而且行驶的里程数与费用成正相关,即路程走的越多优惠额度越大,但最终的优惠额度会有一个上限值。 第三章 系统硬件设计 系统的硬件部分主要包括:电源转换电路,单片机最小系统,掉电保护电路,路程测量模块,输入模块,车内液晶显示模块,车顶LED显示模块,语音模块,票据打印模块。 3.1电源转换电路 电源转换电路是将车载电瓶12V电压转化为5V电压,给单片机和其他额定电压在5V左右的模块供电。出租车会有电压12V的电瓶,选用78L05稳压芯片,此芯片可以将12V电压转换为5V电压,输入端和输出端都需要设计滤波电容,其中C1和C2这两个电解电容主要起滤波作用[2],提高电压稳定性,尽量缓解电压纹波的影响,而C3和C4两个普通电容则是抑制电路的自激振荡。 图3-1电源转换电路 电解电容容值大小的选择与负载大小有关,当负载较大时,应选择容值较大的电解电容。本次设计中,负载包括单片机,液晶显示模块,LED模块,语音模块等,如果负载过大,可选用容值更大的电解电容。当电流过大时,78L05稳压芯片可能发热较严重,因此在芯片外围可以安装散热装置,延长芯片的使用时间,同时也是提高系统的稳定性。 3.2 单片机最小系统 单片机最小系统应包括AT89S52单片机[3],5V电源电路,晶振电路,复位电路这几部分。其中AT89S52单片机起核心控制作用,复位电路就好像电脑重启部分,当单片机因为程序运行出现跑飞的情况时,按下复位键便可以使单片机重新启动运行。晶振电路提供单片机运行的时钟频率,频率越高单片机运行速度越快,因此晶振电路起的作用非常重要。如下便是单片机最小系统的电路原图 图3-2 单片机最小系统 3.3 掉电保护电路 掉电保护电路是当电源断开或者外围电路的电压下降到限定值时,完成数据保护。本系统采用的是一种专门检测电源变化的芯片TL7705,当TL7705通过所连电路检测到外围电压(这里指5V输入电压)下降至某个值时,一般电压降至4.5V以下时,就会向AT89S52单片机发出中断请求[4]。CPU立即进入掉电工作模式,通过软件部分的掉电保护程序对重要的数据,比如乘客乘车记录等信息进行保护。下图为掉电保护电路的原理图。 图3-3 掉电保护电路 3.3.1 TL7705的工作特性 TL77O5是电源监视用的集成电路,其内部基准电压发生器具有较高的温度稳定性,从1管脚可以输出稳定2.5V的基准电压。为吸收电源的纹波及脉冲干扰,通常在1管脚接上0.1uf的滤波电容。被要求监视的电压接至芯片的SENSE引脚,当电源电压小于基准电压时,RESET引脚输出高电平。当电源电压高于基准电压时,RESET关断。 3.3.2 掉电保护电路工作原理 P1作为备用电池使用,当系统掉电时,P1可与D1,R2作为备用电路。当系统工作在正常状态时,即外围电源电压正常输入时,二极管D1不会导通,VCC直接给单片供电,并且可以给备用电池充电。当然备用电池电量有限,因此出于减小能量损耗考虑,备用电池只给单片供电,保护数据。当外围电源掉电后,单片的供电由备用电池负责,而外围电路部分的供电则由电源电容来完成,不过供应电量的时间比较短暂。 3.4 路程测量模块 本系统在路段测量模块中使用A44E霍尔传感器作为路程测量芯片[5]。A44E有三个管脚,1管脚接VCC,2管脚接GND,3管脚作为输出信号端。当管脚都连接好后,此时的霍尔片处在磁场中时,霍尔传感器的输出端输出低电平。当车轮转动一圈时小磁铁就能提供一个磁场,则霍尔传感器输出一次低电平即完成一次数据采集。车轮每转一圈,霍尔开关就检测并输出信号,引起AT89S52单片机的中断,对脉冲计数,通过累加的脉冲数就可以计算出行驶的路程。A44E霍尔传感器的电路原理图如下: 图3-4 A44E电路接线图 3.4.1 A44E的工作特性 A44E芯片属于开关型的霍尔器件,其工作电压范围为4.5~18V区间段,电压范围比较宽。而且A44E芯片输出的信号符合TTL电平标准,因此可以直接接到AT89S52单片机的I/O上,并且最高检测频率高达1MHZ,所以这个特性完全可以满足出租车行驶速度的检测。霍尔传感器A44E在测速系统中的主要功能是进行车轮转速采集。车轮每转一周,磁铁就会经过A44E一次。A44E的第3脚就输出一个脉冲信号作为单片机AT89S52的外中断信号,从P3.3口输入,从而进行中断程序的处理。当然,由于A44E良好的性能,即便是出于恶劣的环境条件下,A44E依然可以稳定的运行,具有良好的抗干扰性能。 3.5 输入模块 输入模块主要由独立键盘组成,当第一个乘客上车后,汽车开动时,司机需要按下按键start1,开始对第一个乘客的记录。当车停下来时,司机按下stop1,则暂停对第一位乘客的计费,待第一位乘客下车后,先将其乘车费用结算清楚,然后司机可以按下按键clear1,那么系统就会清除第一位乘客的乘车记录。第二位,第三位乘客的拼车也同样操作。 键盘一般可以分为线性键盘和矩阵键盘。线性键盘是指一个按键对应一个IO口,这种键盘的排布方式占用大量的IO口,浪费单片机资源。而矩阵键盘则相对节约IO口资源,比如a*b的矩阵键盘,只需要a+b个IO口。但这种传统的矩阵键盘也存在几点不足之处,最主要的在于传统矩阵键盘是采用定期扫描方式来确定是否有按键被按下,因此编写程序时,扫描按键的周期时间不能太长,否则会导致结果不准确。鉴于这种情况,本系统可采用外部中断方式来确定按键是否被按下。 由于本系统使用模块较多,IO口使用较为密集,因此独立键盘这部分借助IO口的扩展来进行设计。对于IO口扩展设计,本系统采用了74HC164移位寄存器。 3.5.1 74HC164移位寄存器 74HC164是一款串行输入,并行输出的移位寄存器。其引脚包括两个数据输入端Dsa,Dsb,并行输出端Q0~Q7,以及时钟脉冲CP,VCC,GND,清零引脚CR。接入电路使用时,数据输入端Dsa,Dsb中的任何一个不能悬空,即使不用的输入端也可接入高电平。当然,Dsa,Dsb可以连在一起同时接入一个IO口。对于一般系统的使用而言,只需接上VCC,GND,CP,数据输入端,输出端便可正常使用。 3.5.2 外部中断扩展设计 由于AT89S52只有两个外部中断INT0,INT1,因此还需要进行外部中断扩展的设计[6]。具体电路图如下所示: 图3-5外部中断扩展 3.5.3 输入模块的电路原理图 本系统的输入模块主要是单片机[7],74HC164,独立键盘之间的连接,设计中每个乘客都有一组按键,分别包括start1,stop1,clear1,即每个乘客对应3个按键,因此3个乘客便有9个按键。车顶LED屏需要显示拼车的状态[8](满载还是空载),本系统同样采用外部中断查询键盘的方式来进行LED的显示。具体的电路原理图如下所示: 图3-6 输入模块原理图 3.6 显示模块 显示模块包括车内液晶显示,车外LED[9]屏显示。其中车内液晶选用的12864液晶。液晶主要用来显示乘客的信息,包括时间,行驶的里程数,车费等状况。车外LED显示屏则用来显示拼车的状态(满载或是空载)。 3.6.1 12864液晶显示 12864液晶是128*64的点阵。在字符显示方面,12864液晶可显示4行8列总共32个16*16点阵的汉字,如果全部用来显示ASCII码字符则可以显示64个。使用12864时应该注意以下几点:如果显示一个中文字符时,应该先设定显示地址,再写入中文字符编码;当字符编码有2个字节时,应该先写入高位字节,再写入低位字节。本系统12864的具体电路原理图如下: 图3-7 液晶显示电路 3.6.2 车外LED显示屏 本系统的车外LED显示屏是通过按键来显示内容[10]的,即当司机按下按键full时,即表示车内已满人,LED显示屏就会显示满载信息;当司机按下按键empty时,即表示车内乘客未满,LED显示屏就会显示空载信息。本系统采用 8*8LED点阵,为了节约IO口的使用,本系统采用两片3-8线译码器74LS138。 两片译码器分别用于LED点阵的行与列,根据软件程序的编写,当程序运行到LED屏显示汉字时,字模中提取的编码会通过单片机传递给74LS138译码器,经过译码后,两片74LS138分别得到8为数据,8为数据再传递给LED点阵,驱动点阵中的二极管点亮,显示出相应的汉字。 关于74LS138的接线,两片译码器的8位输出分别接LED点阵的行与列,译码器的3位输入接入单片机的IO口,E1,E2置位端低电平有效,一般使用时再把相应的VCC,GND接入芯片,电路便可以正常工作。 对于LED显示这块应当注意字模提取编码时一定要提取准确,否则会导致显示乱码,不能正常显示等问题,现在有那种专门的字模提取软件,只需要输入要显示的汉字,便可提取出汉字对应的编码,快捷方便。具体的LED显示连接电路图如下所示: 图3-8车外LED显示屏 3.7 语音模块 本系统采用ISD系列的语音模块ISD2560[11],ISD2560是ISD系列语音模块中性价比较高的一种,该种语音模块能够在外围电路较少的情况下实现丰富的语音播报功能。总体来说,ISD2560与单片机的接线也比较简单,主要是把ISD2560的A0-A9地址端接单片机的IO口,再把相应的控制端口,外围电路连接上即可。 由于单片机的IO口资源有限,所以此模块也采用IO口的扩展,本系统采用74HC154译码器,这款译码器是4线16线译码器,通过单片机和74HC154的直接相连,然后74HC154再和ISD2560相连,可以节省很多IO口资源。语音模块工作时,ISD2560根据程序设定的地址调用语音材料,然后在控制字的设定模式下,进行语音播报,具体电路原理如下: 图3-9 语音模块电路 3.8 票据打印模块 本系统采用微型打印机,该打印机的数据端口D0-D7与单片机的P0.0-P0.7相连,由之前的显示模块可知,12864液晶也是与P0口连在一起的。因为打印机需要打印的内容与液晶显示的内容来源一致,即两者需要单片机传送的数据是相同的,因此两者可以共用同一单片机的PO口作为数据输入端。一般微型打印机还有两个特有的端口,分别是SETB管脚,BUSY管脚,这两个引脚只需接上单片机的IO口即可。 图3-10打印机连接电路 第四章 系统软件设计 系统的软件设计实现的功能包括:液晶屏上能准确的记录各个乘客的信息,包括行驶的里程数,乘车票价,行驶时间等信息;车票的计费应能根据合理的算法进行;车顶LED显示乘车的状态(空载或满载);语音模块能够正常地播放语音提示;票据打印机能够打印出乘车票价,优惠价等信息。 4.1 主程序流程图设计 系统主程序流程图主要能够体现系统总体方案的一种编程思路[12]。本系统最多容许3位乘客进行拼车,当第一位乘客上车后,系统开始记录第一位乘客的乘车信息,在第一位乘客乘车过程中,还需要判断是否有第二位乘客拼车,如果拼车则需要记录第二位乘客的信息,系统总体流程图如下: 图4-1 系统总体流程图 4.2 各个子模块流程图设计 4.2.1 掉电保护电路 出于保护实时数据的考虑,本系统增加了掉电保护电路,当外围电源出现出现故障时,掉电保护电路会启用备用电源,给单片机供电,从而保护现场数据。当外围电路正常时,常用电源会通过电容给备用电源充电,从而保证备用电源电量充足。掉电保护保护电路的编程原理是采用外部中断的方式,当外围电路电路失电时,单片机的INTO管脚会接收到低电平信号,然后单片机响应外部中断,从而进入中断程序处理。具体子程序流程图如下: 图4-2 掉电保护电路中断 4.2.2 路程测量模块中断流程 路程测距采用外部中断处理方式,霍尔元件处于磁场中,当车轮每转动一圈,霍尔元件将会输出一次低电平即完成一次数据采集。因此路程测量就可以根据外部中断接受的次数从而完成车轮圈数的测量,进而测量出租车行驶的距离。具体的流程图思路:开外部中断后,检测到霍尔元件送出的低电平信号,然后单片机响应中断,进入中断程序的处理,即进行路程的测量,中断结束后返回主程序,具体流程图如下所示: 图4-3 路程测量 4.2.3 独立键盘模块 本系统采用按键组成的独立键盘来记录,暂停,清除乘客的信息记录。盘程序的编写有查询方式和中断方式。采用查询方式时MCU[13]一直在查询有没有键被按下,不能做其他的事情,MCU采用此方法效率很低。为提高MCU的效率,本系统采用外部中断的方式(扩展的外部中断)查询按键是否被按下,独立建盘查询的结构流程图如下图所示: 图4-4 独立建盘模块 4.2.4 车内液晶显示模块 本系统采用12864液晶来显示乘客乘车信息,第一位乘客上车待车开动后,液晶便开始显示乘客A的行车路程,实时车费等信息。如果途中有第二位乘客协商拼车,协商期间的等待时间,乘客A的记录为静态显示,当乘客到达目的地,待乘客结完车费后,单片机清除乘客A的乘车信息,液晶屏上不再显示A的记录,具体的流程图如下所示: 图4-5 车内液晶显示模块 4.2.5 车顶LED显示模块 本系统的LED主要用来显示出租车满载或空载的状态,当出租车满载时,司机按下按键full,LED屏便会显示[14]满载;当出租车空载时,司机按下按键empty,LED屏便会显示空载。具体流程图如下所示: 图4-6 LED显示 4.2.6 语音模块 每当一位乘客上车,间隔一定时间,语音模块进行语音播报[15]。具体流程图如下所示: 图4-7 语音模块 4.2.7 票据打印模块 单片机将处理后的数据传给打印机,然后打印机打印出票据。票据打印机除了接受单片机传来的数据外,还有两个重要的管脚SETB,BUSY。打印机工作时,首需要查询打印机的忙信号BUSY,当查询到BUSY为0时,单片则可以向打印机输出数据,此时要将SETB置位,相当于向SETB输入一个负脉冲,则数据将会传送到打印机缓冲器,等待打印,具体流程图如下所示: 图4-8 票据打印 4.3 主要模块子程序 4.3.1路程测量程序: #include<reg52.h> #include<intrins.h> #include<math.h> #define uchar unsigned char #define uint unsigned int sbit key_check=P1^1; sbit Int0=P3^2; int 74HC164_left, 74HC164_right; int data; void INT_initial() //外部中断0初始化 { IT0=1; //跳变沿出发方式(下降沿) EX0=1; //打开INT0的中断允许 IT1=1; //跳变沿出发方式(下降沿) EX0=1; //打开INT1的中断允许 EA=1; //打开总中断 } float measure() { int count=0; float distance; INT_initial(); if(Int0==0) { count++; //累计霍尔传感器脉冲数(即车轮转过的圈数) distance=count*1.2;//假设车轮转一圈距离为1.2米 } return distance/1000; //把路程转化为公里为单位 } 4.3.2 计价程序 float price(float m) { float prc; m= measure(); if(m>&&m<=3) prc=6; //假设起步价3公里内6元 else { if(m>3&&m<=10) prc=6+5*(m-3); //超过3公里,单位距离票价5元 else { if(m>10&&m<=20) prc=41+4.5*(m-10) ; //超过10公里,单位距离票价4.5 else prc=86+4*(m-10); //超过20公里,单位距离票价4元 } } return prc; } 4.3.3 独立键盘程序(外部中断方式查询) void Delay(uint n) //延时程序 { uchar a,b; for(;n>0;n--) //n=1,延时50us { for(b=1;b>0;b--) for(a=22;a>0;a--); } } void keyboard() { INT_initial(); //外部中断初始化 int temp,key_num; temp=key_scan(); //调用按键检测程序 if(74HC164_left==1) { switch(temp) { case 0xfe:key_num=0;break; //按键0被按下 case 0xfd: key_num=1;break; case 0xfb: key_num=2;break; case 0xf7: key_num=3;break; case 0xef: key_num=4;break; case 0xdf: key_num=5;break; case 0xbf: key_num=6;break; case 0x7f: key_num=7;break; default: break; } } else if(74HC164_right==1) { switch(temp) { case 0x06:key_num=8;break; case 0x05: key_num=9;break; case 0x03: key_num=10;break; default: break; } } } int key_scan() //左侧移位寄存器的按键扫描 { uchar bit_key,j,value; value=0xff; Delay(1); if(!key_check) //扩展外部中断,用P1^1口检测信号 { bit_key=0xfe; for(j=0;j<8:j++) { send_key(0xff); Delay(10); send_key(bit_key); if(!key_check) { value=bit_key; 74HC164_left=1; break; } bit_key=_crol_(bit_key,1); } return value; } } int send_key(int n) { CLK=0; DAT=data&0x80; CLK=1; } 4.3.4 12864液晶显示程序 sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit PSB=P1^4; void Busy() { uchar busy; do { E = 0; //0为关闭使能端,1为打开使能端 RS = 0; //1为指令,0为数据 RW = 1; //1为读,0为写 Delay(20); E = 1; //0为关闭使能端,1为打开使能端 busy=P1; Delay (20); E = 0; //0为关闭使能端,1为打开使能端 } while(busy&0x80); //判断BUSY位是否工作:1为内部在工作,0为正常状态 } void write_data(int m) //写数据 { Busy(); E =1; RS=1; RW=0; data=m; //将数据m输入到data Delay(20) E =0; Delay(20); } void write_ord(int ord) //写命令 { Busy(); E=1; RS=0; RW=0; data=ord; //将命令写入data Delay (20); E=0; Delay (20); } void ini_lcd() //LCD初始化 { PSB=1; Delay (20); write_ord(0x30); //基本指令集 Delay (20); write_ord (0x02); // 地址归位 Delay (20); write_ord (0x0c); //整体显示打开,游标关闭 Delay (20); write_ord (0x06); //游标右移 Delay (20); write_ord (0x80); //设定显示的起始地址 Delay_1ms(20); write_ord (0x01); //清除显示 } void show(uchar a,uchar b,uchar i,uchar *s) { uchar address; if(y==1){address=0x80+x;} //Y判断第几行,X判断第几列,0x80为液晶行初始地址 if(y==2){address=0x90+
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服