基于单片机的自行车测速系统设计与实现论文 - 图文(5)

2019-08-30 19:27

桂林电子科技大学毕业设计(论文)报告用纸 第18 页

第三部分是供电。15脚GND接地、16脚VCC接+5V。

本设计选用RE-232作为串行通信是因为其串行通信简单易控制,且I/O口少,成本低。符合本设计的各项要求。

4 软件设计

4.1 Keil uVision 4软件介绍

Keil C51是美国Keil software公司(ARM公司)出品的51系列兼容单片机C语言软件开发系统,C语言在功能、结构性、可读性、可维护性上比汇编语言更具有优势,因为易学易用,适合每个阶段的开发人员,不管专业的应用工程师,还是在校学习软件开发的学生。

Keil C51软件包含了丰富的库函数和功能强大的集成开发调试工具。C51工具包的整体结构,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可以将编辑好的C或汇编源文件分别有C51及A51编译器生成目标文件(.OBJ)。目标文件再由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中[11]。

另外,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

Keil uVision4是2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本,其编译器、调试工具实现与ARM器件的最完美匹配。 4.2 程序设计思想与开发环境

在本设计中,软件系统采用模块化的编程方式,把整体程序分成若干部模块,每个模块具有相对的独立性,也可通过函数调用的发式相互关联。模块化的编程发式利于程序的调试、修改和维护,其思路清晰有条理,便于阅读,被各类开发人员广泛的使用。

本系统软件设计采用C语言编程,开发环境: PC操作系统Windows 7,单片机开发平台keil uVision 4,程序下载软件为STC_ISP_V483。

18

桂林电子科技大学毕业设计(论文)报告用纸 第19 页

4.3 主程序设计

在本设计中,软件根据设计的要求进行编写,要求将红外对管传感器、DS18B20温度传感器、DS1302时钟芯片所测得数据送进STC89C52单片中,再由其将速度、路程、温度、时间等参数送至LCD12864中显示。主程序工作流程如图4-1所示。

图4-1主程序流程图

4.4 各个模块程序设计

4.4.1 红外对管测速模块程序设计

当单片机获取从红外对管测速模块中产生的脉冲个数时,无法马上得出当前车轮的速度和里程,要经过单片机定时器的计算才能得出结果,本系统默认车轮的周长为1米,使用者可以自己设置车轮的大小。本系统通过单片机计算单位时间内接收脉冲的个数来得出速度,再将单位时间内的速度相加得到其路程数,系统计算时间为0.5秒计算一次。在Proteus仿真的结果与计算结果一致。下图4-2为测速子程序设计的流程图。

19

桂林电子科技大学毕业设计(论文)报告用纸 第20 页

图4-2 测速流程图

程序核心代码如下: if(flag)

{

flag = 0; TR0 = 0; EX0 = 0; Couter = 0;

//关闭定时器0 //关闭外部中断

//500ms显示一次速度

Speed = Couter/2; //一个脉冲等于25cm

//清零

bai=Speed/100; shi=Speed0/10; ge=Speed0; Write_Address(2,5); Write_Data(d[bai]); Write_Data(d[shi]); Write_Data(d[ge]);

20

桂林电子科技大学毕业设计(论文)报告用纸 第21 页

{

TR0=1; //打开定时器0

//打开外部中断

EX0 = 1;

}

if((Speed == 0)&(flag1 == 1)) //路程显示

void timer0(void) interrupt 1 //定时器0中断服务程序 TH0=(65536-50000)/256; TL0=(65536-50000)%6; num++; if(num==10) { }

void int0(void) interrupt 0 //外部中断0服务程序 {

Couter++; //计算速度 Couter1++; //计算路程

4.4.2 DS18B20温度测量模块程序设计

本设计采用DS1820温度传感器进行温度测量,并将其测得数据在LCD12864上显示,因为DS18B20只有一条数据输出线,所以一定要采用一位读取,读取到的温度值分别存入高/低八位寄存器中,显示时要将十六位进制数值转换成十进制。温度测量模块的程序流程如下图4-3所示。

EX0 = 0; num = 0; TR0 = 0; flag =1;

//清零计数

//关闭定时器0 //打开标志位

//定时500ms 显示一次速度

}

21

桂林电子科技大学毕业设计(论文)报告用纸 第22 页

图4-3温度测量模块程序流程图

温度测量模块程序核心代码如下:

bit Init_DS18B20(void) //函数功能:将DS18B20传感器初始化,读取应答信号 出口参数:flag

{

bit flag; DQ = 1;

for(time=0;time<2;time++) ; DQ = 0;

for(time=0;time<200;time++) ; DQ = 1;

for(time=0;time<10;time++) ; flag=DQ; for(time=0;time<200;time++) ; return (flag); }

unsigned char ReadOneChar(void) 节数据 出口参数:dat

{

//函数功能:从DS18B20读取一个字

22


基于单片机的自行车测速系统设计与实现论文 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:欧陆591C系列数字直流式调速器的扩容 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: