单片机课程设计出租车计价器_第1页
单片机课程设计出租车计价器_第2页
单片机课程设计出租车计价器_第3页
单片机课程设计出租车计价器_第4页
单片机课程设计出租车计价器_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、大学课程设计说明书 初始条件:初始条件: 1运用所学的单片机原理与接口技术知识和数字电路知识; 252 单片机应用开发系统一套; 3pc 机及相关应用软件。 要求完成的主要任务要求完成的主要任务: : 以目前生活中正在使用的出租车计价器为原型进行设计,要求具有 按时间和里程综合计算车价的功能,能显示时间、里程、单价、总车价 等相关信息。 1. 完成出租车计价器的设计和调试。 2. 撰写课程设计说明书,说明书使用 a4 打印纸计算机打印,用 proteus 等绘图软件绘制电子线路图纸。 基于基于 52 单片机原理出租车计价器的设计单片机原理出租车计价器的设计 摘要摘要 本设计的是一个基于单片机

2、at89c52 的出租车自动计费设计,附有复位电路,时 钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外,为 摆脱困境,通过复位电路可以重新开始。时钟电路采用 12mhz 的晶振,作为系统 的时钟源,具有较高的准确性。 在上电时字符型液晶 1602 显示最初的起步价,里程收费,等待时间收费三 种收费,通过按键可以调整起步价,里程收费,等待时间收费。通过按键模拟 出租车的运行,暂停,停止。在 1602 液晶上可以显示运行的时间,运行时暂停 的时间,通过计算可以得出总共的费用和总的路程。在这里主要是以 at89c52 单片机为核心控制器,p0 口接 1602 液晶显示模块,p1

3、 口接按键的,通过按键 输入。 关键词关键词:单片机 at89c52;1602液晶;出租车计费器; 大学课程设计说明书 目目 录录 前前 言言.1 第一章第一章 出租车计价系统的设计要求与设计方案出租车计价系统的设计要求与设计方案 .2 1.1出租车计价器设计要求.2 1.2系统主要功能 .2 1.3方案论证与比较 .2 第二章第二章 出租车计价系统的硬件设计出租车计价系统的硬件设计.4 2.1振荡电路 .4 2.2复位电路设计 .4 2.3键盘接口电路 .5 2.4显示电路 .5 2.5路程测量部分 .6 2.6单片机各引脚功能说明.6 2.71602 液晶的简介 .8 第三章第三章 出租车

4、计价系统出租车计价系统的软件设计的软件设计.10 3.1单片机资源使用 .10 3.2中断子函数 .10 3.3判键子函数 .11 3.4显示子程序 .11 3.5总程序流程框图 .13 第四章第四章 proteus 的简介的简介.14 4.1proteus介绍.14 第五章第五章 设计体会与小结设计体会与小结.15 参考文献参考文献.15 附附 录录.16 一源程序.16 二设计总图.2 前前 言言 出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出 租车计价器技术也在不断进步和提高。国内出租车计价器已经经历了4 个阶段 大学课程设计说明书 2 的发展。从传统的全部由机械元

5、器件组成的机械式,到半电子式即用电子线路代 替部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的 出租车计价器。出租车计价器计费是否准确、出租车司机是否作弊才是乘客最 关心的问题,而计价器营运数据的管理是否方便才是出租车司机最关注的。因此 怎样设计出一种既能有效防止司机作弊又能方便司机的计价器尤为重要。因此, 本文以单片机a t89s52 为核心设计一款多功能出租车计价器,该计价器能实现 按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显 示。它比市场上的一些计价器使用更方便,功能更全,还具有有效防止司机作弊 和系统稳定性好的优点。 第一章第一章 出租车计价

6、系统的设计要求与设计方案出租车计价系统的设计要求与设计方案 1.1 出租车计价器出租车计价器设计要求设计要求 设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间 计费三部分,用 1602 液晶 显示总金额,运行时间,暂停时间,最大值为 99.9 元,起步价为 5.0 元,3km 之内起步价计费,超过 3km,设速度为 100m/s,10s 增加 1.3 元(即 1km 增加 1.3 元),等待时间单价为每分钟 1.5 元,用液晶显 示总里程,同时用液晶显示等待时间和运行花费时间。 大学课程设计说明书 3 1.2 系统主要功能系统主要功能 本出租车自动计费,上电后显示最初的起步价,

7、里程计费单价,等待时间 计费单价,通过按键可以调节起步价,里程计费单价,等待时间计费单价。同 时具有运行,暂停,停止等状态,可以显示运行的时间,同时可以显示暂停的 时间,具有累加功能,暂停和运行时间在暂停和运行前一次的状态上计时。出 租车停止后能够显示行驶的总费用。 1.3 方案论证与比较方案论证与比较 方案一:采用数字电子技术,利用 555 定时芯片构成多谐振荡器,或采用 外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分 频,最后通过译码电路对数据进行译码,将译码所得的数据送给数码管显示, 一下是该方案的流程框图,方案一如图 1-1 所示: 图 1-1 方案一 案二:采用

8、 eda 技术,根据层次化设计理论,该设计问题自顶向下可分为 分频模块,控制模块 计量模块、译码和动态扫描显示模块,其系统框图如图 1-2 所示: 图 1-2 方案二 方案三:采用 mcu 技术,通过单片机作为主控器,利用 1602 字符液晶作为 显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案 三的系统流程图,本方案主要是必须对于数字电路比较熟悉,成本又不高。方 案图如图 1-3 所示: 大学课程设计说明书 4 图 1-3 方案三 方案总结:通过各个方案的比较,本次采用方案三,不但控制简单,而且 成本低廉,设计电路简单。 第二章第二章 出租车计价系统的硬件设计出租车计价系

9、统的硬件设计 4.14.1 振荡电路振荡电路 单片机内部有一个高增益、反相放大器,其输入端为芯片引脚 xtal1,其 输出端为引脚 xtal2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电 容(电容和一般取 33pf)。这样就构成一个稳定的自激振荡器。 振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频 产生 ale 信号,此时得到的信号时机器周期信号。振荡电路如图 2-1 所示: 图 2-1 振荡电路 4.24.2 复位电路设计复位电路设计 复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复 位具有上电复位功能外,若要复位,只要按图中的 reset 键,电

10、源 vcc 经电阻 r1、r2 分压,在 reset 端产生一个复位高电平。上电复位电路要求接通电源后, 通过外部电容充电来实现单片机自动复位操作。上电瞬间 reset 引脚获得高电 平,随着电容的充电,rerst 引脚的高电平将逐渐下降。rerst 引脚的高电平只 要能保持足够的时间(2 个机器周期) ,单片机就可以进行复位操作。按键复位 电路图如图 2-2 所示。 大学课程设计说明书 5 图2-2 at89c51引脚配置 4.34.3 键盘接口电路键盘接口电路 独立式键盘:独立式键盘中,每个按键占用一根i/o口线,每个按键电路相对独 立。i/o口通过按键与地相连,i/o口有上拉电阻,无键按

11、下时,引脚端为高电 平,有键按下时,引脚电平被拉低。i/o口内部有上拉电阻时,外部可不接上拉 电阻。 4.44.4 显示显示电路电路 对于现实电路我们可以采用数码管,也可以采用液晶显示,液晶又分字符 型和点阵型,我们使用的液晶是字符型液晶,并且带字符库的,不需要查找代 码。英文字符就可。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的 点位器,改变液晶的亮度。显示电路如图 2-4 所示: 大学课程设计说明书 6 图 2-4 数码管封装图及数据线与数码管管脚关系 4.54.5 路程测量部分路程测量部分 出租车中需要一个能准确获得车轮转动即路量信号的装置,以得到标准的脉 冲信号送入单片机的定时/

12、 计数器 t1 即 p3. 5 引脚,利用单片机的 t1 的计数 功能完成 100 次的计数后产生一中断来完成路程的测量。(设车轮周长为 1 m , 则霍尔传感器每产生 100 个脉冲便表示车已行程 0. 1 km ,根据际情况在程序 中进行设置) 。汽车联轴器按圆周间隔嵌入磁钢,用霍传感器集成芯片 a44e 测 并输出脉冲,其工作原理如图 4 所示,霍尔传感器集成芯片 a44e 有信号转换、 电压放大、等功能,为增加其抗干扰的能力,经过 74l s14 对信号整形后再通过 光偶送入 p3. 5 引脚。 大学课程设计说明书 7 图 2-5 路程测量电路 4.64.6 单片机各引脚功能说明单片机

13、各引脚功能说明 at89s52电路图如图 2-6 所示: vcc:供电电压。gnd:接地。p0 口:p0 口为一个 8 位漏级开路双向 i/o 口,每 脚可吸收 8ttl 门流。当 p1 口的管脚第一次写 1 时,被定义为高阻输入。p0 能 够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 fiash 编 程时,p0 口作为原码输入口,当 fiash 进行 图 2-6 校验时,p0 输出原码,此时 p0 外部必须被拉高。 图 2-6 at89s52 p1 口:p1 口是一个内部提供上拉电阻的 8 位双向 i/o 口,p1 口缓冲器能接 收输出 4ttl 门电流。 p1 口管脚写入

14、 1 后,被内部上拉为高,可 用作输入,p1 口被外部下拉为低电平时,将输 出电流,这是由于内部上拉的缘故。在 flash 编程和校验时,p1 口作为第八位地址接收。 p2 口:p2 口为一个内部上拉电阻的 8 位双 向 i/o 口,p2 口缓冲器可接收,输出 4 个 ttl 门电流,当 p2 口被写“1”时,其管脚被内部 上拉电阻拉高,且作为输入。并因此作为输入 时,p2 口的管脚被外部拉低,将输出电流。这 是由于内部上拉的缘故。p2 口当用于外部程序 存储器或 16 位地址外部数据存储器进行存取时,p2 口输出地址的高八位。在 给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储

15、器进行读 写时,p2 口输出其特殊功能寄存器的内容。p2 口在 flash 编程和校验时接收高 八位地址信号和控制信号。 p3 口:p3 口管脚是 8 个带内部上拉电阻的双向 i/o 口,可接收输出 4 个 ttl 门电流。当 p3 口写入“1”后,它们被内部上拉为高电平,并用作输入。 作为输入,由于外部下拉为低电平,p3 口将输出电流(ill)这是由于上拉的 缘故。p3 口也可作为 at89s52 的一些特殊功能口,p3 口同时为闪烁编程和编程 校验接收一些控制信号。 rst:复位输入。当振荡器复位器件时,要保持 rst 脚两个机器周期的高电 平时间。 大学课程设计说明书 8 ale/pro

16、g:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址 的地位字节。在 flash 编程期间,此引脚用于输入编程脉冲。在平时,ale 端 以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用 作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存 储器时,将跳过一个 ale 脉冲。如想禁止 ale 的输出可在 sfr8eh 地址上置 0。 此时, ale 只有在执行 movx,movc 指令是 ale 才起作用。另外,该引脚被略 微拉高。如果微处理器在外部执行状态 ale 禁止,置位无效。 /psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,

17、每个 机器周期两次/psen 有效。但在访问外部数据存储器时,这两次有效的/psen 信 号将不出现。 /ea/vpp:当/ea 保持低电平时,则在此期间外部程序存储器(0000h- ffffh) ,不管是否有内部程序存储器。注意加密方式 1 时,/ea 将内部锁定为 reset;当/ea 端保持高电平时,此间内部程序存储器。在 flash 编程期间,此 引脚也用于施加 12v 编程电源(vpp) 。 xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 xtal2:来自反向振荡器的输出。 第三章第三章 出租车计价系统出租车计价系统的软件设计的软件设计 4.14.1 单片机资源使用单片机

18、资源使用 在本次设计中像电路键盘用到了 p1 口,其中 p1.0 到 p1.4 口作为键盘的输 入,直流电机电路的控制线用了 p2 口线,p3.0、p3.1、p3.2 分别为 led 信号 控制脚。显示电路用到了 p0 和 p2 口,p0 口为液晶的数据口。 4.2 中断子函数中断子函数 对于中断程序,只要定时器计数满就会产生中断 50ms 中断一次,共计 20 次,秒钟加 1,秒钟计满再分钟加,当分钟加到 99 时全部清零。以下是中断子 函数的流程图如图 3-1 所示: 大学课程设计说明书 9 图 3-1 中断子程序流程图 4.3 判键子函数判键子函数 对于独立式键盘判键,首先看有键按下不,

19、如果有键按下则延时一会儿, 在判断是否真的有键按下,如果确实有键按下,在判键释放,最后执行键功能 程序。判键子函数的流程框图如图 3-2 所示: count+ 开始 second+ count=0 是否产生中断? count=20? second=60? minite+ second=0 minite=99? minite=0 结束 否 否 否 否 是 是 是 是 大学课程设计说明书 10 图 3-2 判键子程序流程图 4.4 显示子程序显示子程序 1602 液晶是字符型液晶,它的内部自带字符库,它可以写两行的字符,同 时每行可以写 40 个字符,在写显示程序的时候,我们先写命令,再设定字符显

20、 示,最后写数据,在每写一次命令或数据都需要判断液晶是否忙。液晶显示程 序流程图如图 3-3 所示: 定时器初始化 开始 液晶初始化 判断按键函数1 v=? value1+10value2+5value3+5 数据处理 显示函数 jump_in=1? 液晶清屏 判断按键函数 v1=? 运行 暂停 停止 数据处理 显示函数 jump_out=1? 液晶清屏 清零函数 结束 否 是 v=1 v=2 v=3 否 是 v1=1v1=2v1=3 是 否 否 是 大学课程设计说明书 11 图 3-3 显示子总程序流程框图 图 3-4 整体程序流程图 大学课程设计说明书 12 第四章第四章 proteus

21、的简介的简介 4.1 proteus 介绍介绍 proteus 软件是来自英国 labcenter electronics 公司的 eda 工具软件, 它组合了高级原理布图、混合模式 spice 仿真,pcb 设计以及自动布线来实现一 个完整的电子设计系统。此系统受益于 15 年来的持续开发,被电子世界在 其对 pcb 设计系统的比较文章中评为最好产品“the route to pcb cad”。 proteus 产品系列也包含了我们革命性的 vsm 技术,用户可以对基于微控制器的 设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如 led/lcd、键盘、rs232 终端等动态外设模

22、型来对设计进行交互仿真。 其功能模块:个易用而又功能强大的 isis 原理布图工具;prospice 混合 模型 spice 仿真;ares pcb 设计。prospice 仿真器的一个扩展 proteus vsm: 便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合 微控制器软件使用动态的键盘,开关,按钮,leds 甚至 lcd 显示 cpu 模型。支 持许多通用的微控制器,如 pic,avr,hc11 以及 8051。最新支持 arm。交互的 装置模型包括:led 和 lcd 显示,rs232 终端,通用键盘,i2c,spi 器件。强 大的调试工具,包括寄存器和存储器,断

23、点和单步模式。iar c-spy 和 keil uvision2 等开发工具的源层调试。应用特殊模型的 dll 界面-提供有关元件库 的全部文件。 大学课程设计说明书 13 第五章第五章 设计体会与小结设计体会与小结 出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启 动,停止,暂停等功能并能够通过 lcd 显示车费数目。本款出租车计价器包括 单价输出、单价调整、显示当前的系统时间等功能。另外,多功能出租车计价 器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程 序,使其有很高的智能化水平。 一个月来,经过自己努力,基本上完成了设计要求的内容,在系统可行性 分析

24、、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到 了一些问题,存在一些不足。经过这一个月的学习,我觉得自己不论是在理论 知识方面还是在动手能力方面都有了不小的进步,自己从中受益匪浅。这次设 计很好的把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间 有一定的差距,只有通过不断的努力学习和实践才能很好的把理论知识应用到 实践当中,也只有通过不断的实践才能对理论知识的理解。 通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料 和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。经过单元设计 和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的

25、重要 性,为以后的学习和工作提供了很多有价值的经验。通过这次设计不仅增强了 自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能 力,更重要的是学会用工程化的思想来解决问题。这在以前的学习过程中是不 曾学到的。 这次设计是我认真认识到完整、严谨、科学分析问题、解决问题的思想是 多么的重要,只有拥有了科学的态度才能设计出有用的产品。另外通过本次设 计,是我认识到自己理论知识的应用能力有很大的欠缺,需要在以后的学习中 进一步提高。 参考文献参考文献 1. 李广弟,朱月秀,冷祖祁.单片机基础m.第 3 版.北京航空航天大学出版社, 2007 2. 李华.mcs-51 系列单片机实用接

26、口技术m.北京航空航天大学出版社,1996 3. 李群芳,肖看.单片机原理接口与应用.北京:清华大学出版社,2005 4. 朱承高.电工及电子技术手册m.北京:高等教育出版社,1990 5. 高峰.单片微型应用系统设计及实用技术.北京:机械工业出版社,2004 6. 胡辉,单片机原理及应用设计21 世纪高等院校规划教材m,水利水电出 版社,2005.7 7.刘守义,单片机应用技术m,西安:西安电子科技大学出版社,1996 大学课程设计说明书 14 源程序源程序 #include #define uint unsigned int #define unch unsigned char sbit

27、lcden=p14; /lcd 使能端,高脉冲有效 sbit lcdrs=p15; /lcd 数据-指令端,低电平-写指令,高电平-写数据 sbit lcdrw=p16; /lcd 读-写指令端,低电平执行写,高电平执行读 sbit key1=p20;/复位按键,初始起步价 5 元,里程数归 0 sbit key2=p21;/+按键,手动调整白天、夜间的单价和时钟时间的调整 sbit key3=p22;/-按键,手动调整白天、夜间的单价和时钟时间的调整 sbit key4=p23;/白天夜间切换按键 sbit key5=p24;/移屏显示时钟 sbit key6=p25;/校正时间按键 unc

28、h code time26=day ,night;/白天夜间字符串数组 unch code week_table74=mon,tue,wed,thu,fri,sat,sun; /星期显示 unch code date_table=date:20;/年月日初始写入 /*变量定义为整形实际显示是浮点型,程序写入小数点 */ uint kilometer;/里程变量 unch unit_price_day,unit_price_night;/白天夜间单价变量 unch change,flag_display;/屏幕切换标志变量 unch sw,gw;/分解位变量 unch i; unch num1;

29、/定时器 1 所需变量 unch temp_second,temp_minute,temp_hour;/时钟小时、分钟、秒变量 unch year,month,day;/时钟年、月、日变量 unch week,n;/时钟星期所需变量 unch temp_add1;/时钟校正时地址暂存变量 unch row;/校正第几行变量 大学课程设计说明书 15 unch count10s;/等待 10s 变量 uint total_price_temp;/根据里程数确定的价格变量 uint total_price_wait;/等待 10s 后的价格变量 void start() temp_second=0

30、;/秒初始值 temp_minute=0;/分钟初始值 temp_hour=0;/小时初始值 year=10;/年份初始值 month=8;/月份初始值 day=24;/日初始值 week=1;/星期初始值 temp_add1=0;/校时地址暂存变量初始值 row=1;/校时第几行初始值 /*分解位函数*/ void calculate(unch middle) sw=middle/10;/十位 gw=middle%10;/个位 /*ms 延时函数*/ void delay(uint z) uint i,j; for(i=z;i0;i-) for(j=110;j0;j-) ; /*lcd 写数

31、据*/ 大学课程设计说明书 16 void write_data(unch date) lcden=0; lcdrs=1; /写数据,高电平有效 p0=date;/先赋值, delay(5); /延时后 lcden=1;/lcden 一旦拉高,数据立马写入 delay(5); /延时后 lcden=0;/再次置低,准备下一次拉高 /*lcd 写指令*/ void write_com(unch com) lcden=0; lcdrs=0;/写指令,低电平有效 p0=com;/赋值 delay(5); /延时后 lcden=1;/lcden 拉高 delay(5); /延时后 lcden=0;/再

32、次置低 /*lcd 初始化*/ void lcd_initial() lcden=0; lcdrw=0;/表示对 lcd 进行写操作 write_com(0 x38);/lcd 显示 write_com(0 x0c);/开显示,不显示光标 write_com(0 x06);/读或写后,地址指针+1 total_price_wait=0;/等待时计费变量清 0 kilometer=0;/里程数清 0 unit_price_day=14;/白天单价初始值 1.4,程序写入小数点 unit_price_night=17; /夜间单价初始值 1.7,程序写入小数点 大学课程设计说明书 17 /*里程显

33、示函数 整形表示,程序写入小数点,精确 0.1km*/ void kilometer_display(uint temp) unch bw,sw,gw; write_com(0 x80); bw=temp/100; sw=temp%100/10; gw=temp%100%10; write_data(0+bw); write_data(0+sw); write_data(.); write_data(0+gw); write_data(k); write_data(m); /*单价显示函数(整形表示,程序写入小数点) */ void unit_price_display(unch temp)

34、unch sw,gw; sw=temp/10; gw=temp%10; write_com(0 x80+9); write_data(0+sw); write_data(.); write_data(0+gw); write_data(/); write_data(k); write_data(m); /*总价显示函数(整形表示,程序写入小数点)精确到角 */ void total_price_display(uint temp) unch qw,bw,sw; 大学课程设计说明书 18 qw=temp/1000; bw=temp%1000/100; sw=temp%1000%100/10; w

35、rite_com(0 x80+0 x40); write_data(0+qw); write_data(0+bw); write_data(.); write_data(0+sw); /*白天/夜间,j=0 表示白天,j=1 表示夜间显示函数 */ void time_display(unch j) unch n; write_com(0 x80+0 x40+9); for(n=0;timejn!=0;n+) write_data(timejn); /*外部中断 0 下降沿触发形式统计里程数*/ void extern_interrupt0_initial() ea=1;/开总中断 ex0=1

36、;/开外部中断 0 it0=1;/外部中断 0 下降沿触发 /*50ms 定时初始化用于时钟 */ void timing1_initial() tmod=0 x15; th1=(65536-45872)/256;/11.0592m 晶振 tl1=(65536-45872)%256; ea=1;/开总中断 et1=1;/开定时器 1 大学课程设计说明书 19 tr1=1;/启动定时器 1 时钟 /*采用中断的方式记录里程,下降沿触发 */ void extern_interrupt0() interrupt 0 unch mile_num; count10s=0; if(mile_num10)

37、 /每个方波代表 10 米,10 次代表 100 米即显示 0.1 公里 mile_num+; else mile_num=0; kilometer=kilometer+1; /*屏 2 日期显示函数 */ void lcd_date_display() unch i; write_com(0 x80+0 x40+24); for(i=0;date_tablei!=0;i+) write_data(date_tablei); /*屏 2 时钟显示函数 */ void lcd2_display() if(num1=20)/定时器 1 50ms 一次中断 20 次即为 1s 大学课程设计说明书 2

38、0 num1=0; temp_second+; count10s+; if(temp_second=60) temp_second=0; temp_minute+; if(temp_minute=60) temp_minute=0; temp_hour+; if(temp_hour=24) temp_hour=0; day+; week+; if(week=7) week=0; if(day=32)/未考虑某月 31 天 或 30 天以及闰年平年 day=1; month+; if(month=13) month=1; year+; calculate(temp_second);/分解秒的 各

39、位 write_com(0 x80+24+8);/确定 秒在 lcd 屏上的位置 write_data(0+sw); write_data(0+gw); 大学课程设计说明书 21 calculate(temp_minute); / 分解分的各位 write_com(0 x80+24+0 x05); /确定分钟在 lcd 屏上的位置 write_data(0+sw); write_data(0+gw); write_data(:); calculate(temp_hour);/ 分解时的各位 write_com(0 x80+24+0 x02); /确定小时在 lcd 屏上的位置 write_da

40、ta(0+sw); write_data(0+gw); write_data(:); write_com(0 x80+24+12); /确定星期在 lcd 屏上的位置 for(n=0;week_tableweekn!=0;n+) write_data(week_tableweekn); calculate(year);/分解 年的各位 write_com(0 x80+0 x40+24+7);/确定年在 lcd 屏上的位置 write_data(0+sw); write_data(0+gw); write_data(/); calculate(month);/分解月的各位 write_com(0

41、 x80+0 x40+24+10); /确定月在 lcd 屏上的位置 write_data(0+sw); write_data(0+gw); write_data(/); 大学课程设计说明书 22 calculate(day);/ 分解日的各位 write_com(0 x80+0 x40+24+13); /确定日在 lcd 屏上的位置 write_data(0+sw); write_data(0+gw); write_data(0); /*定时器 1 中断程序*/ void timing1() interrupt 3 tr1=0; th1=(65536-45872)/256; tl1=(655

42、36-45872)%256; num1+; lcd2_display();/第二屏液晶显示函数 tr1=1; /*独立键盘扫描函数*/ void key_scan() if(key1=0)/复位按键, 初始起步价 5 元,里程数归 0 delay(5); if(key1=0) while(!key1); delay(5); while(!key1); total_price_temp=0; lcd_initial();/初始化液晶第一 屏,里程数归 0,起步价 5 元 kilometer_display(kilometer);/显示复位后初始 里程数 大学课程设计说明书 23 if(i%2=1

43、)/奇数次按下 是夜间状态再复位 unit_price_display(unit_price_night);/显示夜间 单价 time_display(1);/显示夜间状态 if(i%2=0)/偶数次按下 是白天状态再复位 unit_price_display(unit_price_day);/显示白天单 价 time_display(0);/显示白天状态 total_price_display(500);/起步价 5 元,程 序写入小数点 lcd_date_display();/年月日初始 写入 if(flag_display=0)/如果是在屏 幕 1 if(key2=0) delay(5)

44、; if(key2=0) while(!key2); delay(5); while(!key2); if(i%2=0)/偶数次按下 切换键后是白天,白天单价调整增加 unit_price_day+; if(i%2=1)/奇数次按下 切换键后是夜间,夜间单价调整增加 unit_price_night+; if(key3=0) 大学课程设计说明书 24 delay(5); if(key3=0) while(!key3); delay(5); while(!key3); if(i%2=0)/偶数次按下 切换键后是白天,白天单价调整减少 unit_price_day-; if(i%2=1)/奇数次按

45、下 切换键后是夜间,夜间单价调整减少 unit_price_night-; /*如果是在屏幕 2 则校正时钟 */ if(flag_display=1) if(key6=0) delay(5); if(key6=0) temp_add1+=3;/地址变量不断更 新 while(!key6); tr1=0;/时钟停止准备校 时 switch(temp_add1) case 15: temp_add1=8; /充新赋值地址暂存变量,准备校正第 2 排 row=2; break; case 17: temp_add1=0; /第一屏校正完后 row=1; 大学课程设计说明书 25 write_com

46、(0 x0c); /光标不闪 tr1=1; /时钟启动 break; if(temp_add1=3)/采用寻地址法校正,小时加 法校正 if(key2=0) delay(5); if(key2=0) while(!key2); temp_hour+; if(temp_hour=24) temp_hour=0; write_com(0 x80+24+temp_add1-1); calculate(temp_hour); write_data(0+sw); write_data(0+gw); if(temp_add1=6)/采用寻地址法校正,分钟 加法校正 if(key2=0) delay(5);

47、 if(key2=0) while(!key2); 大学课程设计说明书 26 temp_minute+; if(temp_minute=60) temp_minute=0; write_com(0 x80+24+temp_add1-1); calculate(temp_minute); write_data(0+sw); write_data(0+gw); if(temp_add1=9)/采用寻地址法校正,秒加 法校正 if(key2=0) delay(5); if(key2=0) while(!key2); temp_second+; if(temp_second=60) temp_seco

48、nd=0; write_com(0 x80+24+temp_add1-1); calculate(temp_second); write_data(0+sw); write_data(0+gw); 大学课程设计说明书 27 if(temp_add1=12)/采用寻地址法校正, 星期加法校正 if(key2=0) delay(5); if(key2=0) while(!key2); week+; if(week=7) week=0; write_com(0 x80+24+temp_add1); for(n=0;week_tableweekn!=0;n+) write_data(week_tabl

49、eweekn); if(temp_add1=8)/采用寻地址 法校正,年加法校正 if(key2=0) delay(5); if(key2=0) while(!key2); year+; if(year=99) year=0; write_com(0 x80+0 x40+24+temp_add1-1); calculate(year); 大学课程设计说明书 28 write_data(0+sw); write_data(0+gw); if(temp_add1=11)/采用寻地址法校正, 月加法校正 if(key2=0) delay(5); if(key2=0) while(!key2); mo

50、nth+; if(month=13) month=1; write_com(0 x80+0 x40+24+temp_add1-1); calculate(month); write_data(0+sw); write_data(0+gw); if(temp_add1=14)/采用 寻地址法校正,日加法校正 if(key2=0) delay(5); if(key2=0) while(!key2); 大学课程设计说明书 29 day+; if(day=32) day=1; write_com(0 x80+0 x40+24+temp_add1-1); calculate(day); write_da

51、ta(0+sw); write_data(0+gw); if(temp_add1=3)/采用寻地址 法校正,小时减法校正 if(key3=0) delay(5); if(key3=0) while(!key3); temp_hour-; if(temp_hour=255) temp_hour=23; write_com(0 x80+24+temp_add1-1); calculate(temp_hour); write_data(0+sw); write_data(0+gw); 大学课程设计说明书 30 if(temp_add1=6)/采用寻地 址法校正,分钟减法校正 if(key3=0) d

52、elay(5); if(key3=0) while(!key3); temp_minute-; if(temp_minute=255) temp_minute=59; write_com(0 x80+24+temp_add1-1); calculate(temp_minute); write_data(0+sw); write_data(0+gw); if(temp_add1=9)/采用 寻地址法校正,秒减法校正 if(key3=0) delay(5); if(key3=0) while(!key3); temp_second-; if(temp_second=255) temp_second

53、=59; 大学课程设计说明书 31 write_com(0 x80+24+temp_add1-1); calculate(temp_second); write_data(0+sw); write_data(0+gw); if(temp_add1=12)/采用寻地址法校正, 星期减法校正 if(key3=0) delay(5); if(key3=0) while(!key3); week-; if(week=255) week=6; write_com(0 x80+24+temp_add1); for(n=0;week_tableweekn!=0;n+) write_data(week_tab

54、leweekn); if(temp_add1=8)/采用寻地址法校 正,年减法校正 if(key3=0) delay(5); if(key3=0) 大学课程设计说明书 32 while(!key3); year-; if(year=255) year=99; write_com(0 x80+0 x40+24+temp_add1-1); calculate(year); write_data(0+sw); write_data(0+gw); if(temp_add1=11)/采用寻地址法校 正,月减法校正 if(key3=0) delay(5); if(key3=0) while(!key3); month-; if(month=0) month=12; write_com(0 x80+0 x40+2

温馨提示

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

评论

0/150

提交评论