湖南理工学院毕业设计(论文)
(c)显示表时(每个子图与子图名在同一页)
(d)显示用时 4.8 实验结果图
实验结果分析如下:
(a)为显示单价;按下Key1,进入载客状态,便会显示单价;
(b)为显示单价、里程和金额。此外当掉电后,数据被送入存储单元,重新上电后再调出,仍会能显示掉电前的数据,系统很好的实现了掉电存储保护功能;
(c)为显示标准时间。按下Key2便能查看标准时间;
20
湖南理工学院毕业设计(论文)
(d)为行车用时。按下Key4便能实时查看行车用时。
通过实验结果分析可知,利用AT89C51主控、霍尔传感器进行采集,AT24C02进行掉电存储保护,配合程序,就能实现出租车智能计价系统。该系统能满足设计的预期要求,效果良好。
补充说明:
当载波发生器向编码电缆中传输对线传输载波信号的时候,传输线于空间中产生磁场的分布比较复杂,为了分析方便,建立起一个均匀磁场的模型:当接收线圈和编
圈并且磁感码电缆之间距离z较小时,近似当做传输线所产生磁力线垂直通过接收线强度均匀地分布沿x 轴方向。依照均匀磁场的模型[14],线圈产生感应信号的幅度和线
圈的有效感应面积形成正比关系。
如主线圈处于所示位置,在t4时间段,载波发生器向G0传输对线输送载波时,G0的Ⅲ区域的主线圈感应面积用(W?d0)?B来表示,此感应信号和R0信号同相,G0的Ⅱ区域的主线圈感应面积用d0?B用表示,此感应信号和R0信号反相,由于Ⅱ、Ⅲ区域同主线圈所形成的感应信号的极性相反,因此主线圈的有效感应面积:
S?(W?d0)?B?d0?B?(W?2d0)?B?2(r?d0)?B (4.1)
(公示规范:公式内容居中,公式号码(按章排序)右顶格对齐) 主线圈的最大感应面积:
S?W?B?2r?B max (4.2)
(公示规范:公式内容居中,公式号码(按章排序)右顶格对齐) 感应磁场的变化用两种情况进行讨论:
(1)主线圈中心在G0两交叉点的左半部,此处检测出的 APD位置数据g为奇数,HRPD?d1?P0?r。
(2)主线圈中心在 G0′两交叉点的左半部,此处检测出的 APD位置数据g为偶
的公式与综合位置 ADD的公数,HRPD?d1?P0?r,可以得出高分辨率位置HRPD式:
ADD?APD?HRPD (4.3)
(公示规范:公式内容居中,公式号码(按章排序)右顶格对齐)
第3章和第4章说明:
1、内容设计:系统硬件设计,包括主要器件介绍、主要模块介绍、硬件作品制作过程。
2、页码4-8页。
3、如果此部分内容较多(超过10页),则分为2章设计;如果内容较少(少于8页),此2章可以合并为一章。
21
湖南理工学院毕业设计(论文)
第5章 系统软件设计
本章首先简单介绍一下交叉编译器,它可以进行嵌入式编程及其他应用。交叉编译器之所以会作为编程软件与单片机之间的桥梁,是因为单片机不能直接执行的C语言编写的代码。所以代码在“C”中递过来然后在交叉编译器进行转换。我们常用的交叉编译器有SDCC(小型设备C编译器),KEIL等。此次设计使用的是KEIL编辑器。KEIL软件提供了最大的8051开发工具,它包含了不同的工具包,而一个工具包中包括几个应用程序,8051应用程序可以放在KEIL软件创建的项目中。C编程语言是一种通用的编程语言,它提供高效的代码,结构化编程的元素及丰富的运算符,加之其限制很小,易学易用,使得C比其他专业的语言更方便且有效的编程各种各样软件任务的解决方案,用过汇编语言后再使用C语言来开发,体会更为深刻。 Keil的 C51是标准的C语言工具[27]。 C51编译器生成8051微处理器使用的代码,但并不是适合8051目标硬件的通用C编译器。对于大多数8051应用,使用C语言这样的高级语言比汇编语言的更具优点。Keil 51生成目标代码的效率极高,大多数语句的汇编代码十分紧凑,容易理解,当用于大型软件的开发时更加能体现出高级语言的优势。
5.1 (空一格)系统主要模块
程序主要分为五个模块,介绍如下: (1)定时中断服务程序。 (2)里程计数中断服务程序。 (3)中途等待中断服务程序。 (4)显示子程序服务程序。 (5)按键服务程序。
最后运行将自动生成HEX文件,此文件就是可以烧录进AT89C51芯片中的机器代码。
系统软件实现详细步骤:
启动程序,首先实现系统的初始化,然后读取时钟芯片DS1302启动时钟并在数码管中显示出来。通过霍耳传感器,将磁感应强度转换为数字电压信号,通过I/O口传至控制器,从而记录里程。通过按键控制,进行分频显示,可分别显示标准时间,单价、金额、路程,路程所用时间。
5.1.1 系统主程序(3级标题:顶格,小4号黑体,段前空0.5行(段后不空行),行间距20磅;标号后空1格再写文字,全文统一)
在主程序模块中,需要完成参量和接口的初始化、出租车起步价和单价的设置以及中断、计算等工作。另外,主程序模块还应设置启动/清除标志寄存器、里程寄存
22
湖南理工学院毕业设计(论文)
器以及价格寄存器,并对其初始化。然后,主程序将基于寄存器中内容的完整性及明
(备注:为设计简单,前面删除部分内容)并把等待价格加到总金额里,继而将总金额、里程和单价、用时送数码管显示出来。程序主程序流程图如图5.1所示。
开始 确性,能够分别完成启动、清除、计价及计程等不同的操作。
否 仅显示起步价 Key1是否按下? 是 里程中断? 否 定时器超过1分钟? 是 中途等待时间加1 否 是 否 1公里 1000个脉冲? 是 路程大于三公里? 是 总金额=单价*(路程-3)+起步价+等待价格 否 总金额=起步价 显示 图5.1 系统主程序流程图
5.1.2 定时中断服务程序
在定时中断服务程序中,每50ms 产生一次中断,当产生20 次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,同时调用显示子程序实时显示。 5.1.3 里程计数中断服务程序
霍耳传感器每输出一低电平信号[28],单片机便中断一次,当里程计数器对里程脉冲计满1000 次时,就会有相应的程序将当前总额送至里程计数器中断服务程序中。
23
湖南理工学院毕业设计(论文)
这程序中,需要完成当前行车里程数以及总金额累加操作,并把所需结果存至里程与总额的寄存器中。
5.1.4 中途等待中断服务程序
在计数的状态下霍耳开关没有信号输出,片内T1 定时器就会启动,每次计时到达5分钟,就会对当前的金额自动地加上中途等待单价,以后每五分钟便会自动加上中途等待单价。当中途等待结束候,就会自动切换至正常计价。 5.1.5 显示子程序服务程序
由于采取分屏数据显示的方式,因此就要用到4 个显示子程序,分别是:时分秒的显示子程序、金额单价的显示子程序、路程单价的显示子程序、以及标准时间的显示子程序。 5.1.6 按键服务程序
按键采取查询模式,放至主程序中,当无按键被按下时,单片机则循环主程序,一旦按键被按下,便转向相应子程序处理,处理结束后再返回。
5.2 系统软件主要程序分析
main( )函数中主要是4个部分组成,write_1302( )函数:主要是进行时间的初始化。kscan( )函数:是键盘扫描子函数,主要是定义按键功能。display( )函数:是显示子函数,主要是把时钟信息,单价、路程、金额,路程用时在数码管显示出来。write( )函数:主要是将数据进行保存。(程序清单详见附录四)
主函数代码如下:(注意主要程序可以写入正文,注意程序格式规范——详见下文,格式一定要规范!)
void main ( ) {
init_time( );
这部分是进行程序的初始化。
read_24(0xae,4,buf,6); //调用存储数据读取6个数据 time1_miao=buf[0]; time1_fen =buf[1]; time1_shi =buf[2]; sev_val = buf[3]; sev_count_num1=buf[4]; sev_jin_e = buf[5];
24