自行车测速仪设计报告
多功能自行车码表设计
多功能自行车测速仪目录一、产品设计背景 (2)二、产品功能简介 (2)三、系统硬件设计 (3)四、MCU软件设计 (8)五、上位机软件bike V1.0设计 (8)六、产品实物及测试 (10)6.1<测速模式> (13)6.2<数据传输> (14)6.3<其它功能> (15)6.4<退出系统> (16)七、结语 (16)附录1 电路图 (17)附录2 源程序 (18)多功能自行车测速仪使用说明书一、产品设计背景随着人们生活水平的逐渐提高,人们对于生活质量的要求也日益增加,尤其是对健身的要求。
自行车在中国普遍作为代步工具。
而在国外,自行车却是一项十分受欢迎的健身运动。
因为它无污染,价位低廉,老少皆宜。
而且在运动过程中可以充分享受到大自然,对于忙碌的现代人来说,无疑是一种较好的放松方法。
在中国这种情况也在慢慢发生变化。
因此爱好自行车运动的人十分学要一款能测速的装置,以知道自己的运动情况。
并根据外界条件,如温度,风速等进行适当的调节,已达到最佳运动的效果。
而对于自行车运动员来说,最为关心的莫过于一段时间内的训练效果。
因为教练要根据一段时间内运动员的训练效果进行评估,从而进行适当的调整已使运动员达到最佳的状态。
因此需要一种装置进行对训练中各种参数的测定记录。
本作品就是针对此而设计的。
二、产品功能简介⒈对自行车进行实时速度的测量。
显示出速度值。
⒉能针对不同的车型进行选择。
从而采用不同的模块进行测量。
⒊能测量出当前环境的温度,以供使用者决定是否适宜进行运动。
⒋显示当前日期时间,可以任意设定当前工作时间。
⒌显示行车里程,运动时间。
⒍可以自行设定采样频率⒎记录一段时间内的定时采样速度,存入制定单元。
通过与PC 机进行通讯,将数据传送到PC 机中用如见进行处理,分析。
得出运动或训练的情况。
⒏配套软件bike v1.0可以将本次运动的速度绘制成速度曲线,以供参考。
并可以将数据转存入数据库保存以备日后查询使用⒐配套软件bike v1.0 充分考虑到广大自行车爱好者对于自行车运动的热衷,因此加入了对自行车运动的介绍,当今流行车型的简介以及进行自行车运动的注意事项和自行车旅行的相关知识。
自行车里程速度计的设计
1 、引言 ................................ 错误!未定义书签。
2 、AT89C52单片机 (2)2.1 AT89C52单片机简介 (2)2.2 AT89C52的管脚及其含义 (3)3 、TC4024 (8)4、 24C01芯片 (9)4.124C01简介 (9)4.224C01的特性: (10)5 、硬件电路的设计 (11)5.1系统硬件电路 (11)5.2系统的工作原理 (12)6、软件设计 (13)6.1系统内存的规划 (13)6.2系统的主要程序设计 (13)7 、系统调试 (16)7.1硬件调试 (16)7.2软件调试 (16)参考文献 (18)1 引言传感器,英文名字为Sensor或Transducer,亦称换能器、变换器。
在科技迅速发展的今天,传感器越来倍受重视。
在日常生活、航天、航空,常规武器、交通运输,机械制造、化工、生物医学工程、自动化检测工程及计量等各项领域都被广泛应用。
目前,传感器已向新材料开发,集成化、智能化、数字化、新工艺,高精度化及高稳定、高可靠化等技术发展。
特别是霍尔传感器,鉴于它的价廉、易于使用,使它广泛运用于里程计、速度计等。
单片微型计算机简称单片机,又称微控制器,特别适用于控制领域。
通常单片机由单块集成电路构成,内部包含有计算机的基本部件:CPU(中央处理器),存储器和I/O接口电路等。
因此,单片机只需要与适当的软件及外部设备相结合,便可以成为一个单片机控制系统。
目前,场上销售的单片机有4位、8、16位、32位,并且单片机朝着高性能多种方向发展,尤其是8位单片机以经成为当前单片机的主流,主要体现在CPU功能增强、内部资源增多、引脚的功能化、低电压和低功好耗化上。
单片机因为其体积小、功能强,可靠性高,灵活方便等优点,所以可以用于各个领域,对各行各业的技术改造和产品更新换代起到重要的推动作用。
本人经过学习,用AT89C52设计了一个自行车里程/速度计。
自行车测速系统设计
2.2.1单片机介绍
单片机是一种集成在电路芯片,是在一块硅片上集成了中央处理器(CPU)、只读存储器(ROM)、随机存储器(RAM)以及定时器/计数器,各种输入/输出(I/O)接口。由于这样的一块芯片具有一台计算机的功能,因而也被称为单片微型计算机。系统所使用的是51系列单片机,它可以把可开发资源全部提供给使用者。
STC89C54RD+单片机为40 脚双列直插封装的8 位通用微处理器。片内程序存储器内含16KB的Flash程序存储器。片内数据存储器内含1280字节的RAM。具有3个可编程定时器,具有32根可编程I/O口线。 中断系统是具有8个中断源、4个级优先权的中断结构。
STC89C54RD+按其引脚功能分为四部分,即主电源引脚VCC和VSS、外接晶体引脚XTAL1和XTAL2、输入/输出(I/O)引脚P0、P1、P2、P3(共32根)、控制或与其它电源复用引脚RST、ALE、PSEN和EA/VPP。
国内外现在已经有生产销售类似的自行车测速仪里程表,有些简单的产品功能比较单一,就是单单只有测速或里程的功能,然而一些复杂的产品除了测速和里程功能外,还集成了GPS全球定位、单次行车里程、平均速度、时钟、行车时间、车轮转数。未来的发展趋势可能还将加入MP3和短信收发、新闻播报、通讯功能等,使得自行车测速仪更加的人性化、现代化、生活化。相信未来的测速仪会受到更多人的青睐,也将成为人类社会生活中的必需品。
关键词:里程/速度,时间,温度,霍尔元件,单片机,LCD
Abstract
This designmainly expounds thedesign of ameasuringinstrument based on single chip ing single chip as the core,the use ofthe Holzer sensor,DS18B20 temperature sensor\/DS1302 clock chip,realize the measurement of thebicycle mileage,speed,temperature,time and other parameters,and caneasily bespeed andmileagefor real-timedisplayof liquid crystal display,andwhenpower is offcan save themileage information.Design ofvelocimeteris mainly composed ofdesign and program designof the hardware circuitsof two parts.The design of hardwareis mainlycollectedthe number of pulsesper secondinto single chip microcomputer systemusing the Holzersensor,then bycomputingSCM systemand processing resultto theLCDdisplay.The software designuses the modularstructure,make thelogicprogram moresuccinct.Thehardware to coordinate the operationunder the software control.The simulation and experimental results show,the design of hardware circuit andsoftware programis correct,the actual hardware circuitcanmeet the design requirements.
自行车测速仪毕业设计开题报告
为了完成本课题,首先要将相关的资料仔细审查并整理一遍,在资料文献阅读之后,再结合本次设计的具体要求做个人需求分析,初步做个大致的流程图,在程序设计时尽量按照流程图设计,让思路保持清晰,同时考虑到实际需求可能有出入,所以要预留相应的接口为后期的扩展带来可能。自行车的速度里程表的设计思想、电路原理、方案论证以及元件的选择等内容都要考虑,整体上分为硬件部分设计和软件部分设计。
国内研究现状由于设计需要采用霍尔传感器国内这方面技术水平还有欠缺虽然现在已经有生产销售类似的自行车测速仪里程表但是产品功能比较单一就是单单只有测速或里程的功能国外研究现状国外除了上述功能还集成了gps全球定位单次行车里程平均速度时钟行车时车轮转数
毕业设计(论文)开题报告
题 目
自行车测速仪
学院
电气与信息工程学院
五、研究计划及预期成果:
第五周第六周 查阅相关资料,了解自行车测速仪的主要功能,进行总体方案设计,进行芯片选型,撰写开题报告。
第七周第八周第九周 完成各个模块设计,编写编程语言,并进行总体电路图的仿真调试
第十周 根据仿真结果对实物进行焊接,,完成调试。
第十一周第十二周第十三周 完成毕业设计的论文撰写,修改部分存在的问题,准备答辩材料。
三、课题研究内容及Байду номын сангаас新
本课题主要是利用霍尔元件、单片机等部件设计一个可用LCD液晶显示器实时显示里程和速度的自行车的速度里程表。本文主要介绍了自行车的速度里程表的设计思想、电路原理、方案论证以及元件的选择等内容,整体上分为硬件部分设计和软件部分设计。
本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括传感器的选择、单片机的选择、显示电路的设计;然后阐述了该自行车的速度里程表的软件设计,包括数据处理子程序的设计、显示子程序的设计;最后针对仿真过程遇到的问题进行了具体说明与分析,对本次设计进行了系统的总结。
毕业设计(论文)任务书格式--自行车速度计的设计
毕业设计(论文)任务书
学生姓名
专业班级:
设计(论文)题目自行车速度计的设计
一.设计要求
1.分析题目需完成的功能,问题描述准确.规范;
2.拟定实施方案,描述设计思路(框图);
3.详尽规划内容;
4.体现完整设计过程及交付最终作品。
二.主要内容(提纲式的内容要求)
1.利用霍尔传感器产生里程数的脉冲信号。
2.对脉冲信号进行计数。
实现:利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。
3.对数据进行处理,要求用LCD显示里程总数和即时速度。
实现:利用软件编程,对数据进行处理得到需要的数值。
最终实现目标:自行车的速度/行程测试仪里具有速度、里程测试与显示功能,采用单片机作控制,显示电路可同时显示速度和里程。
三.完成任务
1.设计思路与内容文档。
2.设计过程参考资料清单及资料文档。
3.最终作品。
指导老师(签名):
教研室主任(签名):
2014 年 4 月 28 日
1。
自行车里程速度计设计
毕业设计(论文)题目:自行车里程速度计设计学院:电子信息学院专业班级:自动化2011级4班指导教师:王敏职称:讲师学生姓名:杨龙飞学号:41103010414摘要随着自行车行业和电子技术的发展,自行车速度里程计技术也在不断进步和提高,不仅可以显示速度里程,还可以显示热量消耗、心跳等参数,在大家注重环境保护和运动健康的今天,速度里程计不仅可以使运动者运动适量,还可以达到健康运动和代步的最佳效果,因此设计了以单片机为基础的自行车速度里程计,让人们能清楚地知道当前的速度、里程等物理量,而且单片机体积小、可靠性高、价格便宜。
该设计重点阐述了系统的工作原理、硬件构成、各部分的主要功能以及软件的结构和实现。
硬件包括主控模块、数据采集模块、数据处理模块、显示模块等组成,采用STC89C52单片机为主要控制芯片,运用自行车车轮上的传感器进行计数,通过一定时间间隔对信号的采集,结合自行车本身车轮参数,送入单片机并由单片机对采集信号进行分析计算,最终在液晶显示器LCD上显示车辆行驶的里程和速度;软件部分用C语言编程,采用模块化设计思想,并在keil和proteus 中进行调试和仿真。
自行车里程速度计的设计本着安全、方便、性价比高、人性化的原则进行,可使现代生活显著提高。
关键词:单片机,LCD1602,霍尔传感器,里程计ABSTRACTAs the bicycle industry and the development of electronic technology, bicycle speed odometer technology is also in constant progress and improve, not only can display speed range, can also display parameters such as heat consumption, heart rate, in everybody pays attention to environmental protection and health/fitness today, speed odometer can not only make people exercise right amount motion, also can to achieve the desired effect of the health sports and walking, thus designed on the basis of the single chip microcomputer bike speed odometer, let people can clearly know the current speed, mileage and other physical quantities, in addition, SCM has small size, high reliability and cheaper price.The design expounds the working principle, hardware composition, main functions of each part and the software structure and implementation. Hardware includes main control module, data acquisition module, data processing module, display module and so on, Using the STC89C52 single-chip microcomputer as main control chip, using sensors on bicycle wheels to count, sending the signals collected by a certain time interval and the bike itself parameters to the single chip microcompute. Finally Using single chip microcomputer to collect signal analysis and display.Software part in C language programming Adopting the idea of modular design, and debugging and simulation in the keil and proteus. Bicycle mileage speedometer design in line with safe, convenient and cost-effective, humanized principle, can make modern life improved significantly.KEYWORDS:singlechip, LCD1602, Hall sensor, odometer目录第1章绪论 (1)1.1 课题背景 (1)1.2 系统要求 (1)1.3 课题实现方法 (2)第2章系统框图及方案介绍 (3)2.1 总体方案比较 (3)2.2 总体方案选择 (3)2.2.1 系统总体框图 (3)2.2.2 系统总体设计 (3)2.3 各模块设计与选择 (4)2.3.1 单片机的选择 (4)2.3.2 显示模块的选择 (5)2.3.3 传感器的选择 (5)2.3.4 时钟芯片的选择 (6)2.3.5 按键模块的选择 (6)第3章硬件设计 (7)3.1 单片机最小系统 (7)3.1.1 最小系统接线图 (7)3.1.2 时钟电路 (7)3.1.3 复位电路 (8)3.2 显示模块 (8)3.2.1 液晶显示电路 (8)3.2.2 显示器LCD1602的介绍 (9)3.3 传感器模块 (11)3.3.1 霍尔传感器工作原理 (11)3.3.2 霍尔传感器的特性 (12)3.3.3 测速方法 (13)3.4 时钟模块 (13)3.4.1 时钟电路 (13)3.4.2 时钟芯片介绍 (14)3.4.3 DS1302的工作原理 (14)3.4.4 DS1302的控制字节 (14)3.4.5 数据输入输出(I/O) (15)3.5 按键模块 (15)3.6 系统总设计图 (15)第4章系统软件设计与实现 (17)4.1 C语言介绍 (17)4.2 软件实现的功能 (18)4.3 主流程图 (18)4.5 显示子程序设计 (19)4.6 速度、里程处理流程设计 (20)4.6.1 处理流程图 (20)4.6.2 算法流程 (21)4.7 按键处理流程设计 (22)第5章系统调试与仿真 (23)5.1 软件调试 (23)5.1.1 Keil简介 (23)5.1.2 程序调试 (23)5.1.3调试中的问题 (23)5.2 硬件仿真 (24)5.2.1 Proteus简介 (24)5.2.2 Proteus与Keil联调 (25)5.2.3硬件仿真中的问题 (26)5.3实物实现 (27)第6章总结 (29)参考文献 (31)附录.....................................................................................错误!未定义书签。
基于单片机自行车测速仪的设计毕业设计
基于单片机自行车测速仪的设计摘要本设计主要阐述一种基于单片机与霍尔传感器等元件的测速仪设计。
以AT89C51单片机为核心,实现对自行车里程、速度、时间、温度等参数的测量,并能简单的将里程及速度用LCD实时显示。
在本文中详细介绍了测速仪的硬件电路和软件设计。
硬件部分利用霍尔传感器将每秒内的脉冲数传入单片机系统,然后经单片机系统计算处理并将过处理结果送LCD显示。
软件的设计采用模块化结构,使程序的逻辑关系更加简洁。
使硬件在软件的控制下协调运作。
仿真,所设计的硬件电路及软件程序是正确的,实际的硬件电路中也基本上能够满足设计要求。
关键词:里程/速度,时间,温度,霍尔元件,单片机,LCDAbstractThis design mainly elaborated based on MCU and Hall element of speed instrument design. Take STC MCU as the core, Hall element speed, realizes to the bicycle mileage, speed, time, temperature measurement, and a simple bicycle mileage and speed with the LCD real time display. The hardware part using the Hall element will bike per second pulse number of incoming MCU system, and then by the single chip microcomputer system calculation processing and processing result to the LCD display. Program design in order to facilitate the expansion and the change, the software design uses the modular structure, make the logic relations more concise. Make hardware tocoordinatethe operation under the software control. Simulation experiments show that the designed hardware circuit and software program are correct, practical hardware circuit also basically can satisfy the design requirement, but due to the knowledge, in practice there are still some problems in the hardware circuit.Keywords: Mileage / speed,time, temperature, Hall element, MCU,LCD毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
多功能自行车测速仪
多功能自行车测速仪目录单片机自行车测速仪设计.............. 错误!未定义书签。
目录 (1)产品设计背景 (2)中英文摘要 (3)总体设计思想 (5)硬件设计部分 (6)AT89C52 单片机 (7)温度传感器DS1820 (9)AH3503线性霍尔 (10)HC-SR04超声波 (11)太阳能 (13)软件设计部分 (14)总结 (30)参考文献 (30)产品设计背景低碳环境更美好: 一个智慧城市,除了会运用科技改善市民生活,更懂得运用科技保护现有的资源,使市民的生活环境更美好。
PM2.5的数据、绿色公交的推行、污染企业排放量、各水道水质变化监控、道路交通电子眼……以科技控制、数据交换为主的系统,正是智慧城市的基石。
不仅精细到市民的衣食住行,也可以大到环境气象的预警、区域碳排放的监测,用科技的手段让市民生活、城市环境都变得更美好。
自行车不仅有利于人们出行,也有利于缓解城市交通压力,减少环境污染,既对公众个人有利,也对社会有利。
自行车并不会给现代化进程添堵,相反,我们的道路现代化却给骑车的人和开车的人都添了堵。
让自行车道消失,从现在来看,这不是现代化,这是对现代化的误解。
而在国外,自行车却是一项十分受欢迎的健身运动。
因为它无污染,价位低廉,老少皆宜。
而且在运动过程中可以充分享受到大自然,对于忙碌的现代人来说,无疑是一种较好的放松方法。
在中国这种情况也在慢慢发生变化。
AbstractThe system consists of AT89C52 SCM, LCD liquid crystal display, Holzer element, small magnet. The system includes a bicycle speed, mileage, and is equipped with a small keyboard on the total mileage cleared, the wheel circumference setting.In 1, the bicycle speed measurement, showing speed value.2, which can measure the environment temperature, for users to decide whether or not suitable for sports.3, display mileage.In 4, after the car has no display vehicle or vehicle and the workshop of the distance.In 5, a solar charging battery, sharing the burden.Through the sensor external physical quantity to be measured, the physical signal into an electrical signal, input AT89C52 chip, AT89C52 chip on the input signal processing, the final output display, and a certain degree of alarm function, if the temperature is high will remind you,The car has a car and will alert you too close. The design used in the main part comprises a singlechip AT89C52, HC-SR04, DS18B20 temperature sensor, ultrasonic sensor, 12864 LCD AH3503 Holzer.摘要本系统由AT89C52单片机、LCD液晶显示、霍尔元件、小磁铁等组成。
基于单片机自行车测速系统设设计报告
单片机原理及系统课程设计基于单片机自行车测速系统设计1 设计目的实现自行车运行过程中对行驶里程、平均速度、运行时间、当前瞬时速度进展测量和显示,通过对速度的测量来控制自行车的运行,当速度超过限定值时发出报警提醒减速,以确保自行车平安的运行。
2设计方案及原理2.1系统总体设计思路和原理本系统实现自行车运行过程中对行驶里程、平均速度、运行时间、当前瞬时速度进展测量和显示,系统包括控制器模块、信号检测采集模块、显示模块、电源模块四局部组成。
系统工作时,传感器采集到信号〔用按键代表脉冲信号输入〕传输给单片机,单片机计数器统计脉冲个数,定时器记录相应时间长度,经过运算,将行驶里程、全程平均速度、运行总时间送给液晶显示器显示,当前〔瞬时〕速度送给数码管显示。
通过以下计算公式算出里程、平均速度、瞬时速度。
通过相应的显示机构显示出来。
里程=脉冲总数×车轮周长平均速度=里程÷运行总时间瞬时速度=每五秒的行程÷52.2自行车测速系统方案设计系统包括控制器模块、信号检测采集模块、显示模块、电源模块四局部,控制器模块由AT89C51组成,它运用于数据储存和外部设备管理,信号采集模块用的是模拟霍尔传感器,通过外部脉冲来控制圈数,显示模块用1602和数码管,1602显示里程、全程平均速度以及运行时间,数码管LED显示五秒的平均速度即当前瞬时速度,电源模块给整个系统提供电压,使系统可以正常工作。
系统框图如图1所示。
图1 自行车测速系统设计原理图3硬件设计3.1系统原理电路图系统中里程、速度等都是由霍尔元器件测量。
通过按钮输出脉冲,脉冲数目代表车轮转动圈数,自行车轮胎的周长为2.15m,输入一个脉冲,轮子转动一圈,里程为一个周长的距离,通过脉冲数可以算出总里程,通过单片机T0定时器和T1计数器记录时间,用5秒的前进距离除以时间5秒,得到5秒的平均速度即当前速度。
而总里程L除以总时间t得到平均速度。
自行车测速系统设计毕业设计论文
目录第一部分设计任务与调研 (2)第二部分设计说明 (4)第三部分设计成果 (18)第四部分结束语 (21)第五部分致谢 (22)第六部分参考文献 (23)第一部分设计任务与调研1.设计主要任务及内容本课题主要任务是利用霍尔元件、单片机等部件设计一个可用LED数码管实时显示里程和速度的自行车的速度里程表。
本文主要介绍了自行车的速度里程表的设计思想、电路原理、方案论证以及元件的选择等内容,整体上分为硬件设计和软件部分设计。
本文首先扼要对该课题的任务进行方案论证,包括硬件方案和软件方案的设计;继而具体介绍了自行车的速度里程表的硬件设计,包括传感器的选择、单片机的选择、显示电路的设计;然后阐述了该自行车的速度里程表的软件设计,包括数据处理子程序的设计、显示子程序的设计;最后对本次设计进行了系统的总结。
具体的硬件电路包括AT89C52单片机的外围电路以显示电路等。
软件设计包括:芯片的初始化程序、定时中断采样子程序、显示子程序等,软件采用汇编语言编写,软件设计的思想主要是自顶向下,模块化设计,各个子模块逐一设计。
2.设计的思路和方法本设计的任务是:以通用MCS-52单片机为处理核心,用传感器将车轮的转数转换为电脉冲,进行处理后送入单片机。
里程及速度的测量,是经过MCS-52的定时计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,其结果通过LED显示器显示出来。
本系统总体思路如下:假定轮圈的周长为假定轮圈的周长为L,在轮圈上安装m个永久磁铁,则测得的里程值最大误差为L/m,经综合分析,本设计中取m=1。
当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从引脚P3.2中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。
每次中断代表车轮转动一圈,中断数n和周长L的乘积为里程值。
计数器T1计算每转一圈所用的时间t,就可以计算出即时速度v。
当里程键按下时,里程指示灯亮,LED切换显示当前里程当速度键按下时,速度指示灯亮,LED切换显示当前速度。
自行车测速仪设计报告
电子设计竞赛设计报告题目: 自行车测速仪学 院 电子信息工程学院 学科门类 工学 专 业 电气工程及其自动化 学 号 2010448114 2010448131 姓 名 李炜 赵向辉2011年12月21日自行车测速仪装订线摘要本课题实验主要是利用STC89C52RC、12864液晶、24C02E^2PROM、霍尔传感器和加速度倾角传感器来实现自行车测速功能。
通过霍尔传感器来采集信号,经过单片机处理后,由12864液晶显示其总里程,分里程,速度,加速度;信号经过加速度倾角传感器读出坡度值,并在12864液晶中显示出来;然后由数学公式计算出消耗的卡路里值。
12864显示页面一共有三面。
按键具有调控展现的页面,清除分里程数据,保存总里程数据的功能,利用24C02实现断电不消失的功能。
发光二极管模块,利用MOS管的特性可以实现在暗处自动点亮。
关键词:自行车测速仪;霍尔传感器A3144;加速度倾角传感器MMA7455;12864LCDBicyle SpeedometerABSTRACTThis work mainly realize speed bike function by using the MCU of the STC89C52RC, 12864 LCD,24C02E^2PROM,Hall sensors and Angle acceleration sensor. The signal was collected by the Hall sensors and then it will be handled by the MCU.After that,the MCU will give commands and instructions to let the LCD display the information which contains the total mileage,part mileage,speed,accelerate,ascent and the calorie consumed.There are three pictures of the LCD,changed by a key switch.The function of the other keys were made up of clearing of the part distance and save the total distance.Also,there is another function module,called automatic light,which controlled by the LDR.Key words:Bicyle speedometer;Hall sensors;Angle acceleration sensor;12864LCD目录1设计要求................................2设计方案................................2.1 芯片的选择...............................2.2 霍尔传感器与单片机的通信..............2.3 12864液晶屏与单片机..................2.4 单片机与24C02 ........................2.5 单片机与MMA7455 ......................2.6 单片机下载程序........................3总体方案................................3.1工作原理.............................3.2总体设计.............................4系统硬件设计............................4.1STC89C52RC单片机最小系统.............4.2各部分电路电路图.....................4.3整体电路.............................5系统软件设计............................5.1主程序流程...........................参考文献....................................附录........................................1设计要求1.1 发光二极管模块在暗处自动点亮功能。
自行车计速器的设计
自行车计速器的设计一、背景自行车是一种普遍使用的交通工具,也是健身的重要器材,自行车计速器是自行车的一种十分实用的器件。
现在市面上非常的普遍,按设计原理分成基于GPS定位和基于霍尔传感器2种。
基于GPS定位的计速器1、用于户外。
根据自行车在单位时间间隔的不同位置确定自行车的速度,2、误差大。
由于民用的GPS定位精度3-15米,基于GPS定位的计速器误差一般大于1米/秒。
3、高度集成于导航仪内部。
4、智能手机通过联网也可GPS定位。
目前有很多安卓平台下的计速软件。
5、价格0-1000元左右,如果是下载安卓平台下的计速软件,成本就是0,当然由于GPS产生的流量费另计,价位高的一般也有地图显示等功能。
基于霍尔传感器的计速器1、场地不限。
根据自行车车轮在单位时间间隔转过的圈数确定自行车的速度,2、误差小。
误差主要由车轮的圆度决定,市面上成熟产品的误差在0.1米/秒内。
3、感触式设计。
将磁体器固定于车轮,感应线圈固定于车的支架。
4、结合单片机。
体积小,市面上产品一般是锂电池或者7号碱性电池供电。
5、价格10—100元左右,价位与更多的集成功能,例如同时测温、多数据保持等有关。
二、对不同人群所需的功能分析:一般非专业人员骑自行车是用于锻炼身体,对速度的要求低,误差在1米/秒左右的速度并没有多少在意,所以对这个人群很多安卓平台下的计速软件以0成本拥有极大的优势,如果基于霍尔传感器的计速器类型要在此处站稳,一定要足够的物美价廉。
专业人员或者室内锻炼骑自行车的人员,骑自行车是不仅是锻炼身体,对速度的要求高,误差在0.1米/秒甚至更低,基于霍尔传感器的计速器类型可有用武之地,但一定要足够的强大,经常要集成很多的功能。
自行车计速器功能:1、核心功能计速;2、可附加功能:测环境温度,测体重,保存测速过程数据,保存多次测速的数据,与电脑或者上位机通信;3、功耗低,让1000mAH充电锂电池满电可以使用20小时以上;4、精度高,测速范围0-100米/秒,误差在0.1米/秒甚至更低;5、工作环境广。
毕业设计自行车测速仪【范本模板】
#include 〈reg52.h>#include 〈stdio.h〉#include 〈intrins。
h>#define GDM12864ADataPort P1 //LCD数据线#define uchar unsigned charsbit DI=P2^2; // 数据\指令选择sbit RW=P2^1; // 读\写选择sbit EN=P2^0;// 读\写使能sbit cs1=P2^4;// 片选1sbit cs2=P2^3; // 片选2sbit sclk=P2^5;sbit i_o=P2^6;sbit rstb=P2^7;sbit ds18s20_dq=P3^6;sbit I2C_SCK=P3^3;sbit I2C_SDA=P3^5;uchar qq=0,pp=0;//开始/暂停按键,计算机传输过来的数据为8则上传uchar code a[]={//16*160x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,0x04,0x04,0xFE,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00, 0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0xF8,0x01,0x02,0xF6,0x10,0x12,0x12,0x12,0x12,0xFA,0x12,0x02,0xFF,0x02,0x00,0x00,0xFF,0x00,0x00,0x3F,0x11,0x11,0x11,0x11,0x11,0x3F,0x40,0x80,0x7F,0x00,0x00,0x40,0x42,0x44,0xCC,0x00,0xF4,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF6,0x04,0x00, 0x00,0x40,0x20,0x1F,0x20,0x51,0x48,0x44,0x42,0x7F,0x42,0x44,0x4C,0x61,0x20,0x00,0x00,0x00,0xFE,0x12,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0x12,0xFF,0x02,0x00,0x00,0x40,0x48,0x49,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x4D,0x68,0x40,0x00,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E,0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00,0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00,0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE,0x92,0x9A,0xD2,0x82,0xFF,0x02,0x00,0x00, 0x40,0x20,0x1F,0x00,0x00,0x7E,0x22,0x22,0x22,0x3F,0x42,0x80,0x7F,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0xA0,0x90,0x88,0x84,0x86,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x23,0x04,0x08,0x10,0x20,0x60,0x20,0x00,0x00,0x00,0x06,0x09,0x09,0xE6,0xF0,0x18,0x08,0x08,0x08,0x18,0x30,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,0x80,0x40,0x20,0xF8,0x47,0x48,0x48,0x48,0xC8,0x7F,0x48,0x48,0x4C,0x68,0x40,0x00, 0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x0B,0x12,0x62,0xD2,0x0A,0x06,0x02,0x00,0x00 };uchar code b[]={//8*160x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00, 0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x21,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x01,0x01,0x3E,0x01,0x01,0x3E,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x13,0x24,0x24,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xC0,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x3F,0x06,0x09,0x10,0x20,0x00,0x00,//17,k0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x02,0x02,0x02,0x3E,0x00,0x00//18,h};//延时程序,延时10usvoid Delay_10_uS(void){char i=10;while(i--);}//n mS delayvoid Delay_N_mS( unsigned int n_milisecond)/* n mS delay */{unsigned char i;while(n_milisecond——){i=37;while(i-—);}}//启动传送bit I2C_Start(void){Delay_10_uS();I2C_SDA =1;Delay_10_uS();I2C_SCK =1;Delay_10_uS();if (I2C_SDA == 0)return 0;if ( I2C_SCK == 0)return 0;I2C_SDA = 0;Delay_10_uS();I2C_SCK = 0;Delay_10_uS();return 1;}//停止信号void I2C_Stop(void){Delay_10_uS();I2C_SDA = 0;Delay_10_uS();I2C_SCK = 1;Delay_10_uS();I2C_SDA = 1;Delay_10_uS();}//无应答的时序,有应答时需要在第9位输出0,没有应答时,第9位为高void I2C_Nack(void){Delay_10_uS();I2C_SDA=1;Delay_10_uS();I2C_SCK=1;Delay_10_uS();I2C_SCK=0;Delay_10_uS();}//如果发送完成并且在第9个脉冲处得到ack,那么返回0,表示成功bit I2C_Send_Byte( unsigned char d){unsigned char i = 8;bit bit_ack;while( i-— ){Delay_10_uS();if (d &0x80 ) I2C_SDA =1;else I2C_SDA =0;Delay_10_uS();I2C_SCK = 1;Delay_10_uS();I2C_SCK = 0;d = d <〈1;}Delay_10_uS();I2C_SDA = 1;Delay_10_uS();I2C_SCK = 1;Delay_10_uS();bit_ack = I2C_SDA;I2C_SCK =0;Delay_10_uS();return bit_ack;}//接收一个8位数据unsigned char I2C_Receive_Byte(void){unsigned char i = 8, d;Delay_10_uS();I2C_SDA = 1;while (i--){d = d << 1;Delay_10_uS();I2C_SCK =1;if (I2C_SDA )d++;Delay_10_uS();I2C_SCK =0;}return d;}//写EEPROM操作void AT24C64_W(void *mcu_address,unsigned int A T24C64_address, unsigned int count ){while(count--){I2C_Start();I2C_Send_Byte( 0xa0 );I2C_Send_Byte( AT24C64_address/256 );I2C_Send_Byte( AT24C64_address %256 );I2C_Send_Byte(*(unsigned char*)mcu_address );I2C_Stop();Delay_N_mS(10);((unsigned char*)mcu_address)++;AT24C64_address++;}}//读EEPROM函数void AT24C64_R(void *mcu_address,unsigned int AT24C64_address,unsigned int count){while(count-—){I2C_Start();I2C_Send_Byte( 0xa0 );I2C_Send_Byte(AT24C64_address/256 );I2C_Send_Byte(AT24C64_address % 256 );I2C_Start();I2C_Send_Byte( 0xa1 );*(unsigned char*)mcu_address = I2C_Receive_Byte();I2C_Nack();I2C_Stop();((unsigned char*)mcu_address)++;AT24C64_address++;}}//单总线延时void ds18s20delay(int useconds){int s;for(s=0;s<useconds;s++);}//单总线复位uchar ds18s20reset(){uchar presencesignal;ds18s20_dq=0;ds18s20delay(30);ds18s20_dq=1;ds18s20delay(3); presencesignal=ds18s20_dq;ds18s20delay(30);return presencesignal;}//单总线位写入void ds18s20writebit(char val){ds18s20_dq=0;if(val==1)ds18s20_dq=1;elseds18s20_dq=0;ds18s20delay(5);ds18s20_dq=1;}//单总线字节写入void ds18s20writebyte(char val){uchar i;uchar temp;for(i=0;i<8;i++){temp=val〉>i;temp&=0x01;ds18s20writebit(temp);}ds18s20delay(5);}//单总线位读取uchar ds18s20readbit(void){uchar i;ds18s20_dq=0;ds18s20_dq=1;for(i=0;i<3;i++)return ds18s20_dq;}//单总线字节读取uchar ds18s20readbyte(void) {uchar i;uchar value=0;for(i=0;i〈8;i++){if(ds18s20readbit()) value|=0x01<<i;ds18s20delay(7);}return(value);}//实时时钟复位函数void resetds1302(){ds18s20delay(1);sclk=0;ds18s20delay(1);rstb=0;ds18s20delay(1);rstb=1;ds18s20delay(1);}//时钟字节读取函数uchar readbyteds1302(){uchar i;uchar rbyte;uchar tempbyte;rbyte=0x00;i_o=1;ds18s20delay(1);for(i=0;i〈8;++i){sclk=1;ds18s20delay(1);sclk=0;ds18s20delay(1);tempbyte=(uchar)i_o;tempbyte〈〈=7;rbyte〉>=1;rbyte|=tempbyte;}return rbyte;}//时钟字节写入函数void writebyteds1302(uchar w_byte){uchar i;ds18s20delay(1);for(i=0;i<8;++i){i_o=0;if(w_byte&0x01)i_o=1;sclk=0;ds18s20delay(1);sclk=1;ds18s20delay(1);w_byte>>=1;}}//时钟初始化函数void initds1302(){resetds1302();writebyteds1302(0x8e);writebyteds1302(0);resetds1302();writebyteds1302(0x90); writebyteds1302(0xab);resetds1302();writebyteds1302(0xbe);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);resetds1302();}//时钟字节写入函数void writeclkbyte(uchar adress,uchar date){adress=((adress*2)|0x80);resetds1302();writebyteds1302(adress);writebyteds1302(date);resetds1302();}//状态检查,void CheckState(){unsigned char dat;DI=0;RW=1;do{GDM12864ADataPort=0x00;EN=1;dat=GDM12864ADataPort;EN=0;dat=0x80 &dat;//仅当第7位为0时才可操作(判别busy信号) }while(!(dat==0x00));}//向LCD发送命令//command :命令void SendCommandToLCD(unsigned char command){CheckState();RW=0;GDM12864ADataPort=command;EN=1;EN=0;}//写显示数据//dat:显示数据void WriteByte(unsigned char dat){CheckState();DI=1; RW=0;GDM12864ADataPort=dat;EN=1; EN=0;}//设定行地址(页)—-X 0—7void SetLine(unsigned char line){line=line & 0x07;// 0<=line〈=7line=line|0xb8;//1011 1xxxSendCommandToLCD(line);}//设定列地址-—Y 0—63void SetColumn(unsigned char column){column=column &0x3f;// 0=<column<=63 感觉多余的,column已近小于64了。
自行车测速仪
多用途自行车测速仪甘肃广播电视大学农垦河西分校陈会香一、设计背景随着经济的发展,科学技术水平的提高,人民生活水平的日益提高。
在满足人们生存的基本需求之后,越来越多的人将目光投向了健康且活力的生活方式,于是健身,休闲的概念也越来越深入人心。
自行车,在中国是一种普及范围极广的代步工具,而在国外,却是一种广受欢迎的健身方式。
它的普及,廉价,易操作,便捷,无污染,使它成为一种老少皆宜的健身,休闲方式。
而在今日的中国,也出现了越来越多的自行车运爱好者。
对于一名自行车爱好者,他/她必然十分想知道自己的运动效果究竟如何,想要知道自己关于速度,里程的具体数字,并根据外界的条件来适当调整自己的运动健身计划。
而在平时使用自行车以代步时,本多用途测速仪还可以用来显示时钟信息,使两手扶车把的骑行者可以轻易看到当前时间。
当前的自行车市场上,仅有高档的专用于竞赛的自行车有类似装置,然而广大自行车爱好者,及有意向通过这一廉价便捷方式进行,专门购买昂贵自行车设备是不现实的,为了满足群众的愿望以及巨大的市场,此类多用途自行车测速仪必然以其的平民身份而广受青睐。
二、设计功能简介1.对自行车进行实时速度的测量,显示出速度值。
2.能针对不同的车型进行选择,从而采用不同的模块进行测量。
3.能测量出当前环境的温度,以供使用者决定是否适宜进行运动。
4.显示当前日期时间,为24小时制时钟,可以任意设定当前工作时间。
5.显示行车里程,记录范围为0~999.9Km6.根据记录的数据,速度计算卡路里消耗值。
7.所有数据都可在一块LCD屏上显示三、系统硬件设计:系统框架图:(如图1所示)工作流程如下:首先,通过传感器对外部物理量进行测量,再将物理信号通过转换为电信号,经滤波及放大电路输入单片机,单片机对所输入的电信号进行处理、分析,最终输出显示。
系统分多个模式,可以显示车速,距离,环境温度,也可显示当前时间。
整个系统采用自发电方式,通过收集自行车运动所产生的动能,转化为电能,再经整流,滤波,放大等方式最终输出为5V直流电,供给整个系统。
自行车车速里程测量仪设计
. . . . .摘要本文介绍了用89C52单片机设计自行车里程/速度计,运用单片机的运算和控制功能,并采用数码管实时显示所测速度和里程的速度里程计设计方案,用分频器TC4024实现二分频,用来探讨24C01传感器的用途,通过实用电路的设计来掌握速度及里程传感器的使用方法及一些性能参数。
本系统含了电子电路技术,以及常用的AT89C52单片机工作原理,通过本系统的设计,把它们俩者有机结合。
关键词:AT89C52 数码管TC4024 24C01传感器目录1 绪论 (3)2 AT89C52单片机 (4)2.1AT89C52单片机简介 (4)2.2AT89C52的管脚及其含义 (4)3 TC4024 (6)4 24C01芯片 (6)4.124C01简介 (6)4.224C01的特性: (7)5 硬件电路的设计 (8)5.1系统硬件电路 (8)5.2系统的工作原理 (8)6 软件设计 (9)6.1系统存的规划 (9)6.2系统的主要程序设计 (9)7 系统调试 (11)7.1硬件调试 (11)7.2软件调试 (12)8 结论 (14)1绪论传感器,英文名字为Sensor或Transducer,亦称换能器、变换器。
在科技迅速发展的今天,传感器越来倍受重视。
在日常生活、航天、航空,常规武器、交通运输,机械制造、化工、生物医学工程、自动化检测工程及计量等各项领域都被广泛应用[6]。
目前,传感器已向新材料开发,集成化、智能化、数字化、新工艺,高精度化及高稳定、高可靠化等技术发展。
特别是霍尔传感器,鉴于它的价廉、易于使用,使它广泛运用于里程计、速度计等[6]。
单片微型计算机简称单片机,又称微控制器,特别适用于控制领域。
通常单片机由单块集成电路构成,部包含有计算机的基本部件:CPU(中央处理器),存储器和I/O接口电路等。
因此,单片机只需要与适当的软件及外部设备相结合,便可以成为一个单片机控制系统[4]。
目前,场上销售的单片机有4位、8、16位、32位,并且单片机朝着高性能多种方向发展,尤其是8位单片机以经成为当前单片机的主流,主要体现在CPU 功能增强、部资源增多、引脚的功能化、低电压和低功好耗化上[4]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统设计自行车车速报警系统摘要本课题实验主要是利用STC89C52RC、12864液晶、24C02E^2PROM、霍尔传感器和加速度倾角传感器来实现自行车测速功能。
通过霍尔传感器来采集信号,经过单片机处理后,由12864液晶显示其总里程,分里程,速度,加速度;信号经过加速度倾角传感器读出坡度值,并在12864液晶中显示出来;然后由数学公式计算出消耗的卡路里值。
12864显示页面一共有三面。
按键具有调控展现的页面,清除分里程数据,保存总里程数据的功能,利用24C02实现断电不消失的功能。
发光二极管模块,利用MOS管的特性可以实现在暗处自动点亮。
关键词:自行车测速仪;霍尔传感器A3144;加速度倾角传感器MMA7455;12864LCD目录1设计要求................................2设计方案................................2.1 芯片的选择...............................2.2 霍尔传感器与单片机的通信..............2.3 12864液晶屏与单片机..................2.4 单片机与24C02 ........................2.5 单片机与MMA7455 ......................2.6 单片机下载程序........................3总体方案................................3.1工作原理.............................3.2总体设计.............................4系统硬件设计............................4.1STC89C52RC单片机最小系统.............4.2各部分电路电路图.....................4.3整体电路.............................5系统软件设计............................5.1主程序流程...........................参考文献....................................附录........................................1设计要求1.1 发光二极管模块在暗处自动点亮功能。
1.2 利用霍尔传感器采集信号,由单片机处理后控制外围设备工作。
1.3 利用单片机控制12864液晶屏显示。
1.4 将指定的数据放入24C02中,达到断电不丢失的效果。
1.5 用Keil uVision3编写C程序,利用单片机最小系统烧写程序到单片机。
1.6 利用传感器模块计算倾角(坡度),由12864液晶显示。
2设计方案2.1 芯片的选择自行车测速仪按系统功能实现要求,决定控制系统采用STC89C52RC单片机,采集信号的霍尔传感器采用A3144,保存信息的E^2PROM 24C02,计算倾角的加速度倾角传感器MMA7455,用于显示的12864液晶。
2.2 霍尔传感器与单片机之间的通信将霍尔传感器的信号输出端和单片机的某一个I/O口相连(本板子中使用P2^3),通过检测P2^3电平的下降沿和上升沿来编写程序,以达到计数的功能。
2.3 12864液晶屏与单片机将12864液晶屏按照其操作指南正确连接在电路中,编写程序,由单片机控制12864液晶显示各种数据。
2.4 单片机与24C02程序编写中,要求保存功能的按键按下时,总里程的数据写入到24C02芯片中,达到断电不丢失的功能。
将24C02按照操作手册正确连接到电路中,由单片机控制,当检查到按键按下时,执行程序:经总里程数据写入24C02中,保存起来。
2.5 单片机与MMA7455此模块是用集成工艺制作好的商品。
按照操作手册正确连接到电路中,根据芯片资料和示例程序可以使其输出角度值,然后在12864中显示出来。
2.6单片机下载程序利用单片机最小系统和串口(配合MAX232转电平芯片),借助STC下载器完成程序的烧写。
3 总体方案3.1 工作原理本实验主要是利用STC89C52RC、12864液晶、24C02E^2PROM、霍尔传感器和加速度倾角传感器来实现自行车测速功能。
通过霍尔传感器来采集信号,经过单片机处理后,由12864液晶显示其总里程,分里程,速度,加速度;信号经过加速度倾角传感器读出坡度值,并在12864液晶中显示出来;然后由数学公式计算出消耗的卡路里值。
12864显示页面一共有三面。
按键具有调控展现的页面,清除分里程数据,保存总里程数据的功能,利用24C02实现断电不消失的功能。
发光二极管模块,利用MOS管的特性可以实现在暗处自动点亮。
3.2设计总体框图4 系统硬件设计4.1 STC89C52RC单片机最小系统4.1.1最小系统包括晶体振荡电路、复位开关和电源部分。
4.2各部分电路4.2.1 主要控制部分(STC89C52RC)4.2.2 12864液晶部分4.2.3 24C02部分电路4.2.4 串口及MAX232部分4.2.5 倾角传感器MMA74554.2.6 霍尔传感器部分4.2.7 发光二极管独立显示模块4.3整体电路5 系统软件设计主程序流程图参考文献[1] 沈红卫《基于单片机结构的智能系统设计与实现》电子工业出版社[2] 黄惠媛《单片机原理与接口技术》海洋出版社[3] 周平伍云辉《单片机应用技术》电子科技大学出版社[4] 吴金戌沈金阳郭庭吉《8051单片机实践与应用》清华大学出版社[5] 黄正谨等《电子设计竞赛赛题解析》东南大学出版社附录程序:/*************河北大学电信学院***********//*******************李炜*****************//***********自行车测速仪程序**************/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/**********液晶屏相关部分*****************/#define lcd_port P0 //液晶屏指令、数据通信接口sbit rs=P2^7; //液晶屏寄存器选择接口(rs=0时选择指令寄存器,rs=1时选择数据寄存器)sbit rw=P2^6; //液晶屏读写选择接口(rw=0时选择写入,rw=1时选择读出)sbit en=P2^5; //液晶屏使能接口(en=0时通信接口中断,en=1时通信接口接通)sbit ret=P2^4; //液晶屏主复位引脚/*********子函数部分*****************/void delayms_lcd(uint ms); //延时子函数,时间为1msvoid delay_n10_us(uint n); //10微秒延时函数(n*10us)void lcd_wr_command(uchar com); //向液晶屏输入命令子函数void lcd_wr_data(uchar dat); //向液晶屏输入数据单字节子函数void lcd_int(); //LCD初始化void picture_show0(); //12864画面0void picture_show1(); //12864画面1void picture_show2(); //12864画面2void picture_select(); //12864画面选择void key_select(); //按键相关判断void interrupt_set(); //中断函数参数设定void start_24C02(); //24C02起始信号void write_one_char(uchar x); //写入一个字节void wait_ack(); //等待应答uchar read_one_char(); //读出一个字节void stop_24C02(); //24C02终止信号void read_total_distance(); //读出24C02中数据并且赋值给total_distancevoid write_total_distance(); //写入24C02中total_distance数据void write_total_distance1(); //写入24C02中total_distance数据void forbid_data(); //限制所有变量的取值/*********24C02相关部分****************/sbit SCL=P1^5; //串口时钟引脚sbit SDA=P1^4; //串口数据引脚/**********相关数组部分***********/uchar code data1[]="欢迎使用";uchar code data2[]="自行车测速仪";uchar code data3[]="制作人";uchar code data4[]="李炜";uchar code data5[]="赵向辉";uchar code data6[]="总里程";uchar code data7[]="分里程";uchar code data8[]="速度";uchar code data9[]="加速度";uchar code data10[]="坡度";uchar code data11[]="卡路里";uchar code data12[]="请注意安全";uchar code data_show[]="0123456789" ;/***********相关变量部分************/uint new_total_distance=0,old_total_distance=0; //四位数据uint new_part_distance=0,old_part_distance=0; //三位数据uint old_speed=0,new_speed=0; //两位数据uint old_acceleration=0,new_acceleration=0; //两位数据uint old_ascent=0,new_ascent=0; //三位数据uint calorie=0; //三位数据uchar old_j=0,new_j=0,part_flag=0,write_flag=0,show_flag=0,control_flag=0; static uint time=0;/*******按键相关**************/sbit key1=P1^0; //页面上翻sbit key2=P1^1; //手动保存sbit key3=P1^2; //页面下翻sbit key4=P1^3; //清除分里程数据/*********霍尔传感器相关部分**********/sbit A3145_OUT=P2^3;/***********************************/void main(){read_total_distance();lcd_int(); //LCD初始化picture_show0();delayms_lcd(2000);lcd_int();picture_show1();delayms_lcd(2000);lcd_int();picture_show2();delayms_lcd(2000);interrupt_set();A3145_OUT=1;while(1){key_select();picture_select();if(control_flag==0)new_total_distance=new_part_distance;if(show_flag==1){if(old_j==1)picture_show1();if(old_j==2)picture_show2();}if(part_flag==1){while(A3145_OUT==0) ;ET0=0;TR0=0;new_speed=250/time;new_acceleration=(new_speed-old_speed)*50/time;time=0;ET0=1;TR0=1;new_part_distance+=5;calorie=(calorie+5);part_flag=0;show_flag=1;}forbid_data();}}/************限制所有变量的取值************/void forbid_data(){if((old_total_distance+new_total_distance)>9999){new_total_distance=old_total_distance=0;}if(new_part_distance>999){new_part_distance=0;write_total_distance();read_total_distance();}if(new_speed>99)new_speed=0;if(new_acceleration>99)new_acceleration=0;if(calorie>999)calorie=0;}/***********LCD显示画面0********************/ void picture_show0(){uchar i;i=0;lcd_wr_command(0x82); //设置液晶屏的显示位置while(data1[i]!=0){lcd_wr_data(data1[i]);i++;}i=0;lcd_wr_command(0x91);while(data2[i]!=0){lcd_wr_data(data2[i]);i++;}i=0;lcd_wr_command(0x8A);while(data3[i]!=0){lcd_wr_data(data3[i]);i++;}i=0;lcd_wr_command(0x99);while(data4[i]!=0){lcd_wr_data(data4[i]);i++;}i=0;lcd_wr_command(0x9C);while(data5[i]!=0){lcd_wr_data(data5[i]);i++;}}/**************LCD画面1********************/ void picture_show1(){uchar i,flag=0;uint temp;i=0;lcd_wr_command(0x81); //设置液晶屏的显示位置while(data6[i]!=0){lcd_wr_data(data6[i]);i++;}lcd_wr_command(0x84);temp=(new_total_distance+old_total_distance);if(temp/1000==0)lcd_wr_data(' ');else{lcd_wr_data(data_show[temp/1000]); //显示数据(字符)flag=1;}temp%=1000;if((temp/100)!=0||flag==1){lcd_wr_data(data_show[temp/100]); //显示数据(字符)flag=1;}elselcd_wr_data(' ');temp%=100;if((temp/10)!=0||flag==1){lcd_wr_data(data_show[temp/10]); //显示数据(字符)flag=1;}elselcd_wr_data(' ');temp%=10;lcd_wr_data(data_show[temp]); //显示数据(字符)lcd_wr_command(0x86);lcd_wr_data('m');i=0;flag=0;lcd_wr_command(0x91);while(data7[i]!=0){lcd_wr_data(data7[i]);i++;}lcd_wr_command(0x94);temp=new_part_distance;if(temp/100==0)lcd_wr_data(' ');else{lcd_wr_data(data_show[temp/100]); //显示数据(字符)flag=1;}temp%=100;if((temp/10)!=0||flag==1){lcd_wr_data(data_show[temp/10]); //显示数据(字符)flag=1;}elselcd_wr_data(' ');temp%=10;lcd_wr_data(data_show[temp]); //显示数据(字符)lcd_wr_command(0x96);lcd_wr_data('m');i=0;flag=0;lcd_wr_command(0x89);while(data8[i]!=0){lcd_wr_data(data8[i]);i++;}lcd_wr_command(0x8B);temp=new_speed;if(temp/10==0)lcd_wr_data(' ');elselcd_wr_data(data_show[temp/10]); //显示数据(字符)temp%=10;lcd_wr_data(data_show[temp]); //显示数据(字符)lcd_wr_command(0x8C);lcd_wr_data('m');lcd_wr_data('/');lcd_wr_data('s');i=0;old_speed=new_speed;lcd_wr_command(0x99);while(data12[i]!=0){lcd_wr_data(data12[i]);i++;}}/**************LCD画面2********************/void picture_show2(){uchar i,flag=0;uint temp;i=0;lcd_wr_command(0x81);while(data9[i]!=0){lcd_wr_data(data9[i]);i++;}lcd_wr_command(0x84);temp=new_acceleration;if(temp/10==0)lcd_wr_data(' ');elselcd_wr_data(data_show[temp/10]); //显示数据(字符)temp%=10;lcd_wr_data(data_show[temp]); //显示数据(字符)lcd_wr_command(0x85);lcd_wr_data('m');lcd_wr_data('/');lcd_wr_data('s');lcd_wr_data('2');i=0;flag=0;lcd_wr_command(0x91);while(data10[i]!=0){lcd_wr_data(data10[i]);i++;}lcd_wr_command(0x93);temp=new_ascent;if(temp/100==0)lcd_wr_data(' ');else{lcd_wr_data(data_show[temp/100]); //显示数据(字符)flag=1;}temp%=100;if((temp/10)!=0||flag==1){lcd_wr_data(data_show[temp/10]); //显示数据(字符)flag=1;}elselcd_wr_data(' ');temp%=10;lcd_wr_data(data_show[temp]); //显示数据(字符)lcd_wr_command(0x95);lcd_wr_data(0x09);i=0;flag=0;lcd_wr_command(0x89);while(data11[i]!=0) {lcd_wr_data(data11[i]);i++ ;}lcd_wr_command(0x8C);temp=calorie;if(temp/100==0)lcd_wr_data(' ');else{lcd_wr_data(data_show[temp/100]);flag=1;}temp%=100;if((temp/10)!=0||flag==1){lcd_wr_data(data_show[temp/10]); //显示数据(字符)flag=1;}elselcd_wr_data(' ');temp%=10;lcd_wr_data(data_show[temp]); //显示数据(字符)lcd_wr_command(0x8E);lcd_wr_data('k');i=0;flag=0;lcd_wr_command(0x99);while(data12[i]!=0){lcd_wr_data(data12[i]);i++ ;}}/***************LCD初始化************************/void lcd_int(){ret=0; //液晶屏复位delayms_lcd(2);ret=1;delayms_lcd(2);lcd_wr_command(0x30); //启动液晶屏基本指令集并开启绘图显示功能lcd_wr_command(0x0c); //开显示,关光标,不闪烁lcd_wr_command(0x06); //字符进入模式为:字符不动,光标右移,地址加一lcd_wr_command(0x01); //清屏delayms_lcd(2); //等待清屏完成}/**********向液晶屏写入命令子函数******************/void lcd_wr_command(uchar com){en=0;//关闭通信,为设置参数做准备rs=0;//选择指令寄存器rw=0;//写入液晶en=1;//为开始通信做准备lcd_port=com;delay_n10_us(8);//大于72us的延时(根据手册)en=0;//数据送如液晶屏并关闭通信(en的下降沿液晶屏接收数据)}/********向液晶屏输入数据子函数************/void lcd_wr_data(uchar dat){en=0;//关闭通信,为设置参数做准备rs=1;//选择数据寄存器rw=0;//写入液晶en=1;//为开始通信做准备lcd_port=dat;delay_n10_us(8);//大于72us的延时(根据手册)en=0;//数据送如液晶屏并关闭通信(en的下降沿液晶屏接收数据) }/***********毫秒延时函数,延时1ms***********/void delayms_lcd(uint ms){uchar i;while(ms--){for(i=0;i<121;i++);}}/***********10微秒延时函数(n*10us)***********/void delay_n10_us(uint n){while(n--){_nop_();_nop_();}}/*************LCD显示画面选择********************/void picture_select(){if(old_j==new_j) ;else{switch(new_j){case 1 :lcd_int();picture_show1();old_j=new_j;break;case 2 :lcd_int();picture_show2();old_j=new_j;break;}}}/*************按键相关判断********************/void key_select(){if(key1==0){delayms_lcd(7);if(key1==0){new_j=2;while(key1==0);}}if(key2==0){delayms_lcd(7);if(key2==0){old_total_distance+=new_total_distance;new_total_distance=0;write_total_distance();control_flag=1;while(key2==0);}}if(key3==0){delayms_lcd(7);if(key3==0){new_j=1;while(key3==0);}}if(key4==0){delayms_lcd(7);if(key4==0){old_total_distance+=new_total_distance;new_part_distance=0;while(key4==0);}}}/*************中断函数参数设定**************/void interrupt_set(){TMOD=0x11; //0001 0001 T1、T0工作在定时方式1TH1=(65536-10000)/256; //T1定时时间为10毫秒(10000微秒)TL1=(65536-10000)%256;TH0=(65536-20000)/256;TL0=(65536-20000)%256;ET1=1; //启动T1中断允许位ET0=1;EA=1; //启动总中断允许位TR1=1; //启动T1TR0=1;}/*************T1中断函数**************/void timer1() interrupt 3 using 1{ET1=0; //关闭T1中断允许位TH1=(65536-10000)/256; //重设T1定时时间为10毫秒(10000微秒)TL1=(65536-10000)%256;if(A3145_OUT==0){part_flag=1;}ET1=1; //开启T1中断允许位}/*************T0中断函数**************/void timer2() interrupt 1 using 2{TH0=(65536-20000)/256;TL0=(65536-20000)%256;time++;}/*************写入24C02中数据************/void write_total_distance(){start_24C02();write_one_char(0xa0);wait_ack();write_one_char(0x01);wait_ack();write_one_char(old_total_distance/256);wait_ack();stop_24C02();delayms_lcd(100);start_24C02();write_one_char(0xa0);wait_ack();write_one_char(0x02);wait_ack();write_one_char(old_total_distance%256);wait_ack();stop_24C02();delayms_lcd(100);}/*************读出24C02中total_distance数据****************/ void read_total_distance(){start_24C02();write_one_char(0xa0);wait_ack();write_one_char(0x01);wait_ack();start_24C02();write_one_char(0xa1);wait_ack();old_total_distance=read_one_char()*256;stop_24C02();delayms_lcd(100);start_24C02();write_one_char(0xa0);wait_ack();write_one_char(0x02);wait_ack();start_24C02();write_one_char(0xa1);wait_ack();old_total_distance+=read_one_char();stop_24C02();delayms_lcd(100);}/*************24C02启动程序****************/void start_24C02(){SCL=0;_nop_();SDA=1;_nop_();SCL=1;_nop_();SDA=0;_nop_();SCL=0;}/***********24C02写入一个字节*************/ void write_one_char(uchar x)//写入一个字节{uchar i;for(i=0;i<8;i++){x<<=1;SCL=0;_nop_();SDA=CY;_nop_();SCL=1;_nop_();}SCL=0;_nop_();}/**********24C02等待应答***********/void wait_ack(){SCL=0;_nop_();SDA=1;//释放数据线_nop_();SCL=1;_nop_();while(SDA==1);SCL=0;_nop_();}/*************24C02读出一个字节**********/ uchar read_one_char()//读出一个字节{uchar i,temp=0;SCL=0;_nop_();SDA=1;//释放数据线_nop_();for(i=0;i<8;i++){SCL=1;_nop_();temp<<=1;temp=temp|SDA;SCL=0;_nop_();}return(temp);}/*************24C02终止程序*************/ void stop_24C02(){SCL=0;_nop_();SDA=0;_nop_();SCL=1;_nop_();SDA=1;_nop_();SCL=0;//当总线多个器件时必须SCL=1;}。