




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于STC89C52单片机的自行车简易数字里程表项目设计方案1引言 在几百年的不断发展、不断设计的过程中,自行车经历了一个漫长的发展历程,并有了较为成熟的制造技术。与此同时,骑自行车也从一个单纯交通使用的角色转变成现在受很多人们爱好的日常休闲活动的方式。 作为使人们能够用于锻炼身体、日常休闲使用的重要方式,很多现有的功能已经无法满足人们的需求。社会的需求推动着技术产业的发展,于自行车行业也同样如此。人们生活质量的提升,要求其必须具有着较为便利的辅助功能,如在骑行的过程中需要了解到行车速度,为了方便地点距离的测量,还要求其有着可以测量行程的功能。除此之外,出于上述种种理由,本设计本着在能够满足人们平常生活中锻炼身体、休闲娱乐的目的,在这种形势之下,一台方便、实用的简单数字式自行车里程表就被设计出来了。本设计的速度里程具有速度、里程的检测功能,还可以显示时间并有着清楚、明了的显示界面。该里程表可以将当前的自行车速度及行走的路程直接在液晶屏幕上显示出来,在自行车上安装也特别方便。 为实现所需功能,单片机、霍尔感应器等其它组件组合并可用液晶显示器显示出骑车时的速度及骑行路程是本设计的主要目标。整个设计分为硬件部分的设计和软件部分的设计。除此之外,自行车速度里程表的设计想法、电路和器件的原理及选择都在本文当中有提及。课题目标对计划、软硬件设计方案的理论验证,是整个设计工作开始的重要一步。接下来需要提及的便是自行车速度里程表在符合科学设计的基础上,对于如何挑选芯片等元件的选择和怎样设计电路铺设的走向。其中,速度里程表在软件设计层面的设计思路及计划也得到了很好的阐述。对于整个设计过程而言,分析讨论模拟过程、找出存在的问题、进行系统的检查并得出结论是作为最后的关键一步。除了STC89C52单片机外部电路以及显示电路等具体的硬件电路和初始化、定时、中断等子程序的软件设计外,整个软件设计过程中,用C语言来编写软件。2 设计分析要求2.1 设计要求(1)设计一个基于单片机制作的简易自行车里程表。(2)显示速度、路程等的预期目标可以在该该设计中得以实现。(3)骑行环境达到一定的温度时,系统会提示减速休息。(4)当警报响起时,会反馈一条指令给电动机,拉紧刹车,使车缓慢减速。(5)自行车里程计的基本工作原理能够完全了解。2.2 方案分析构件简单、并有着较强实用性的本系统可以通过信号采集即由计数器计算短时间内的路程来求出平均速度,该平均速度近相似于该时刻的瞬时速度。光电对管来完成采集数据的任务,并以矩形脉冲的形式输出。在本设计当中有若干个按键,可以用来满足自行车不同车型轮子直径大小的设置、对数据进行清0、调整时间等,整个设计的计数由单片机的P3.0引脚来完成。我们在设计过程当中,为实现较好的产品体验,应该全面考虑准确的测量和缩短系统反映过程中的时间。采用通过脉冲频率来得到速度这种方法虽然能够获得较为精确的精度,我们在计算时却采用的理想状态下的数据,从而会有一定的误差产生。误差不可避免,我们要尽量的把不可避免的误差控制在一定的合理范围之内。除上述外,在编写程序代码时,确保实现功能所需程序的合理编写在整个过程当中也是非常重要的。在本设计过程当中,自行车轮胎产生的数字脉冲数据经过霍尔感应器发送给作为控制核心的单片机,单片机经过计算单位时间的数据把最终的结果显示在显示屏上即为单片方式的电路集成。容易得出结论,本设计的精确程度与霍尔元件计数的准确性有着不可分割的关系。也就是说,在自行车骑行这个复杂的环境中怎样得到正确的脉冲数是完美实现该设计的点睛之笔。对于实现在繁杂工作环境下准确的计算脉冲这个问题,采用的是使脉冲以不同高度的信号来解决该问题。在下坡等危险容易高速骑行的路段,为了保护使用者人身安全,当自行车速度达到预设的危险值时危险报警器发出警报,与此同时控制刹车的微型发动机转动使得刹车线拉紧从而缓慢降低速度。在夏季炎热的天气骑行时很容易造成中暑,为此,装有一个温度感应系统。当炎热的温度超过适合人体的极限温度时系统会发出报警提示声,并与上述原理相同缓慢降低速度。2.3 与传统常用里程表比较虽然传统使用磁电式的自行车里程表有着构造简单并有着较为低廉的成本等优点,但其无法抵抗电磁波的干扰。在现代社会中,移动电话被使用者随时随地的携带,移动电话所带来的电磁波对传统里程表的使用有着致命的影响。其次,当使用者车速过快时,由于过高的电压值会使传感器产生额外次脉冲从而严重干扰了测量的精度同时也降低了产品的使用体验。自行车工作的环境非常不理想,很强的震动、机油形成的污垢势必有一个适应性强的产品才能够满足种种艰苦的工作要求。而在整个设计过程当中使用适应性、保障性强的霍尔传感器很大程度上解决了此类问题,才使得设计的里程表具有优越的使用性能。3 系统硬件设计3.1 总设计方案 作为MCS-51系列单片机中基本的产品属于89C51增强型版本,CMOS可靠 其有着8位的处理单元、8k的存储器(ROM)等较强的硬件条件。除此之外,在低功耗模式下该单片机可以在空余与掉电模式中转换,只需要软件控制就可以。单片机只有在电源、时钟、复位等硬件条件正常条件下,才可以运行。以MCS-51单片机作为操作过程的核心,车轮的转数以电脉冲的形式由传感元件转换而成并将之解决成一个单独的芯片是本系统的主要目的。用单片机的定时和计数功能来实现路程和速度的计算,原理是每转的脉冲数都可以由定时器和计数器计算出。如果轮子的周长假设为C,装q个磁铁在轮圈上,那么就会有测的的路程误差值最大为C/q。只有一个磁铁的时候,霍尔元件检测到一个脉冲信号,也就意味着轮子转了一圈。并且,每当霍尔元件检测到脉冲信号时,相应的就会在P3.2引脚0端中断输入,与此同时,系统的数量计算也会停止一次。由上述易得,路程的测量值即为轮子的周长C*停止的次数=行程。轮子转一圈所用的时间由单片机上的计数器可计算得出,有转一圈所需的时间那么瞬时的速度很容易就会求得了。为了防止车速过快容易发生意外事故,如果正在骑行的自行车速度达到一丁点设定极限值时,以蜂鸣器当作的警报设备就会发出声响,提醒骑车的使用者。如图所示即霍尔传感器测速:图3-1 霍尔传感器测速 把有磁性的小钢块固定在没有磁性的材料制成的车轮边缘上,自行车车轮转动一次就会产生一个脉冲在霍尔感应器上,再由计数器来测算出转数。如下即为实现各指标举措:(1) 确保霍尔元件出现里程脉冲信号。(2) 用单片机的计数器计算霍尔元件产生的脉冲信号。(3) 通过软件编程来加工数据,为了路程数和瞬时速度可以在显示屏中显示。目标是可以在单片机的控制下,由这三个举措来使速度里程表有路程测量、速度测量并且显示数据的功能。图3-2 系统框图3.2 最小系统3.2.1 STC89C52单片机图3-3 单片机内部结构示意图 一般情况下,如果将单片机用于操作中连接时,往往会和相应的连接电路、设备等硬软件结合在一起,这样的话,一个单片机应用系统才会构成。图3-4 STC89C52单片机 作为可与MCS-51系列产品性能完全兼容的单片机,STC89C52有着8K的可编程Flash存储器,在性能上功能消耗非常低。同时,STC89C52作为很多应用系统非常优质的处理元件,得益于它那8位的大规模集成电路和能够在线编程的Flash。除了和其他系列的单片机功能之外,能够在节电的情况下运行两种软件。3.2.2 时钟电路的设计 振荡时钟与外部的时钟组成了时钟电路。作为协同外部的晶体产生振动电路的时钟电路,可以正常工作的前提条件是有着相同脉冲的带动,运行的时钟可以提供给单片机。单片机正常工作的前提是运行的时钟为1,除此之外,也要要求单片机工作时的频率要在所规定的单片机工作频率范围之内。时钟功能正常运转是整个单片机各种功能运行的重要基础,作为单片机的核心部分,其频率的高低和电路的品质与单片机的稳定性有着非常紧密的联系。本设计在内、外部时钟当中采用内部的时钟方式。另外,输入、输出端分别为芯片引脚XTAL1、XTAL2的反相放大器也位于单片机里面,来组成一个振荡器。一个运行平稳的自己振荡器可由可调电容及晶体振荡器与XTAL1、XTAL2这两个引脚连接而成。图3-5 时钟电路复位电路的设计有了RET复位输入引脚作为单片机实现初始的一种方法,能够让程序在程序存储当中的初始地址0000H开始运行。若使单片机初始复位,则只需要在引脚RET上接通两个周期的高电平就可以实现,若要使其不断的复位,则只需要RET维持高电平即可。否则,单片机不会从0地址开始运行,除非RET从高电平降为低电平。首先,手动型的复位和复位电源型复位方式构成了单片机系统的复位方式。由电容的电压不可以在短时间内突然改变的特点及电容的串联电阻构成的复位电路可以得出,如果给整个系统通上电源,那么高电平将会出现在RST引脚,除此之外,该电路的RC值可以决定高电平所持续的时间。且振荡器稳定后,如果有一个高水平在RST引脚和保持2个机器周期以上,中央处理器可以响应,此时也会重置系统,适当组合的RC的取值能够使复位保证足够的可能性。设计的该系统是通过按键复位的方式来进行复位操作,单片机复位的前提条件是其当RET引脚为高电平并且ALE及PSEN也为高电平输出的引脚。如图所示为复位电路:图3-6 复位电路3.3 显示电路的设计 将LCD1602显示模块用于本设计,具有较为美观的人机交互界面和直观的信息传递方式使得液晶显示器有着非常高品质的显示效果。除此之外,采用低电压扫视的LCD液晶显示器有着节能、性能稳定易于控制、低消耗、占用CPU少等优点也使得这种显示器使用范围广泛。 作为专业用于呈现字符及数字的点阵式的液晶显示模块,有多种型号。下图即为一般的1602液晶显示器实物图:图3-7 液晶显示器实物图根据有无背光1602LCD显示器分为两个类别,而且有背光功能的厚度要厚一些。如下图即为尺寸差别:图3-8 液晶显示模块图1602引脚说明表格如下:编号符号引脚说明编号符号引脚说明1Vss电源地9D2数据接口2VDD接电源正极10D3数据接口3VO调整液晶显示器对比端11D4数据接口4RS信息/指令端选择(H/L)12D5数据接口5R/W读写选择端(H/L)13D6数据接口6E使能信号14D7数据接口7D0数据口15BLA正极接背光电源8D1数据口16BLK负极接背光电源单 单片机与液晶引脚连接:第1脚:VSS为电源地。第2脚:VDD接5V电源正极。第3脚:VO调整液晶显示器对比度端口第4脚:RS依据电平高低选择寄存器。第5脚:R/W依据电平高低读写信号线。第6脚:E端为控制信号输入端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据端。第15脚:正极接电源背光源。第16脚:负极接地背光源。图3-9 LCD电路结构图 液晶显示模块由于接地或接正极会出现最高或最低的对比度,我们可以通过10K的电位器来调节避免因太高的对比度而使之产生虚影。3.4 按键电路的设计 按键作为单片机应用中的重要组成部分,最常用的有单独和矩阵两种类型。本设计采用单独型的键盘,并且每一个按键相应的连接一个单片机端口。轻度接触型开关常被用于按键,按键未受到手指的压力时其触点是断开的,只有当手指给予其一定的压力才会有触点接触使开关闭合,按键不会立即闭合或者立即断开因为触点有一定的弹性。在按键闭合、断开的过程当中由于触点具有弹性作用会发生颤动,按键自身的性能及使用者的操作会影响颤动时间的长短。整个按击键盘的过程大概包含五个时段:(1) 等候时段:手指未按下键盘,触点未接触。(2) 闭合颤动时段:手指刚刚按下键盘,触点由于弹性作用发生颤动,也必须设置颤动延时来避免误操作。(3) 稳定时段:闭合引发的颤动已经结束,起作用的按键动作已经形成。(4) 断开颤动阶段:手指慢慢松开按键时,触点由于弹性作用也会发生颤动,同理,也需设置颤动延时来防止误操作。(5) 键盘松开时段:由于机械的性能而产生的颤动已消失,触点恢复未接触。图3-10 按键电路报警电路的设计 如果固定频率的矩形的电磁波能够由单片机的口线发出高或低的电平而产生,那么安装一个喇叭就可以使频率化成声音。发出的频率也可以通过调节高低电平的维持时间来改变,进而使喇叭产生不一样的声响即使音调发生变化。 在5V的电压下,蜂鸣器正常工作,除此之外,上拉电阻也没有必要安装在P3接口处。重要的是,5V的电源要与三极管的发送端相连接,三极管的阴极与1K的电阻相接,电阻最后要接I0口,蜂鸣器正负极分别与三极管集电极和地相接。图3-11 蜂鸣器发声电路结构图蜂鸣器无法发出声响,前提是正在行驶的速度小于已设的警示速度。如果行驶的速度达到了设定的警示值,则蜂鸣器会发出报警的声响,此时控制刹车的微型发动机转动缓慢拉紧刹车线使速度降低。3.5 霍尔传感器图3-12 霍尔传感器作为使用霍尔效应制成的一种磁敏传感器,即霍尔感应器。当我们对放在磁场的半导体、导体开通电流并且磁场垂直电流,那么会有电势差在磁场和电流都垂直的方向产生,即霍尔效应。以霍尔效应为基础的霍尔元件,由于有着简单的构造、较高的灵敏度、耐高温等一系列优点,还能够测出没有转速的情况,在环境恶劣的环境中正常工作,在检测技术、处理信息的地方经常显示出它们的身影。磁通量的大小因传感器内部的转轴转动而发生变化,从而得到相应的反馈信号。由半导体制成的霍尔元件需要给以电流,并且将信号处理等系列功能聚焦于一张芯片,霍尔元件磁场变大也会导致传感器磁通量发生变化。图3-13 霍尔传感器外形霍尔传感器的使用往往与与之匹配的组件共同使用,因为不能产生较大的电势差所以会有放大器电路来进行信号放大,也要有温度补偿和稳定电压的电路给予功能上的补偿。上图所示为一种型号的霍尔传感器外观,容易看到,其体积较小。图3-14 线性霍尔传感器特性 如上图所示,当磁场的强度位于B1B2的范围内时,输出的电压和外面的磁场强度之间有着较好的线性关系。也容易发现,当磁场场强超过一定范围则电压大小维持不变,而在一般适合骑行的环境中,霍尔传感器的线性特性完全可以实现。3.6 时钟芯片图3-15 时钟电路DS1302型号的芯片作为时间芯片用于本次设计,作为有着微小电流充电功能的低消耗时钟电路,在2.5V至5.5V的工作电压下,DS1302还有着年、月、周、日、时、分、秒进行计时等的功能。 由于使用串行的数据传输方式,在其内部还置放临时性储存信息的RAM寄存器,也就意味着即使没有电,信息也不会失去。RST引脚、SCLK串行时钟引脚和I/O串行数据引脚组成了时钟芯片与STC89C52的连接线。另外,计时的脉冲也由作为备用电源的Vcc2,芯片外接晶振X2提供。3.7 温度控制 炎热的夏日街头,很容易看到全副武装的骑友们,为了防止阳光的曝晒在身上覆盖很多厚实的防护服。由于骑行过程中疲惫时精神不集中,特别容易引起中暑现象,在车辆川流不息的马路上这是异常危险的。在自行车行程速度表内安装温度感应器就可以很好避免这类问题。我们设定一个自己的身体在曝晒的情况下能够承受的最大温度值,并输入进单片机系统,也通过由蜂鸣器来警报炎热温度。比如说:当我们在骑行时,温度逐渐上升到我们的设定值时,系统通过蜂鸣器发出警报并启动控制刹车的微型电动机,微型发动机转动从而拉紧刹车线。为了防止降速过快容易发生侧翻电动机缓慢转动使得车速缓缓降低,让使用者安全的停下休息。3.8 刹车系统图3-16 微型发动机控制刹车原理图刹车原理:当收到刹车的指令时,单片机启动微型电动机,电动机转动。由于电动机与刹车线接触的圆柱形转轮直径较小,故山车线被拉紧的速度较为缓慢,从而使得速度缓慢降低,避免了降速过快引发的一些意外事故。4 设计与实现软件编程 硬件是设计的四肢,则软件是设计的大脑。单片机的优越性能就是可以由软件来操作,在此过程中,科学性、正确性是整个程序设计所要遵守的原则。以先整体再部分的设计思路每层仔细分开来,再研究各层次的关系并计划好细节。主程序,计算、延时、显示及中断等子程序组成了软件设计。4.1 主程序流程(1) 本系统的总体流程图如图所示。图4-1 主程序流程图设计方案及其步骤:1. 以系统所需和相应实现的操作为基础来进行规划模块。2. 要在确定整个设计的设计平台之后,再确定程序的设计语言及如何设计和调整各类模块的功能。3. 在设计时一定要把模块之间数据传递的原理了解清楚,为了增加各模块的自主性也要减少其之间的传递。4. 保证自身清楚的思考路线,合理调整程序调用、中止的关系。4.2 显示流程使用LCD非静态扫描来显示子程序,把单片机的P2.2口接到使能端口E是第一步,然后便将数据/命令选择端RS与单片机的P2.0口接起来,D0D7的数据端口和P0口接起来,并把显示的数字指令传递到P0口。除上述过程,使用延时的功能把P2.2口设置为0,把P2.0口设置为1。继续还要把P2.2端口置于1,把P2.0端口置于1,在数字显示之前一直持续改写数据。图4-2 显示流程图速度处理流程图4-3 速度处理流程图温度处理流程图4-4 温度处理流程图4.4 仿真电路4.4.1 软件简介除了有基本的电子设计自动化功能外,Proteus在模仿单片机以及外部零件等方面也有着非常实用并且有效的功能。在国内发展的短短时间内,其卓越的用户体验已经让它在单片机及周边行业好评如潮。 作为风靡世界的EDA工具,无论是从布置原理图、检测数据还是实际电路的模拟上,Proteus都做出了非常大的贡献。Proteus也在虚拟框架到实体的设计过程当中做出了历史性贡献,是多种优秀功能软件的结晶,并且适合于多种型号的处理支持。4.4.2 结果绘制仿真图要点:(1) 找出所需元件。(2) 以电路图为基础进行连接。运行C程序产生的HEX文件来开始仿真。图4-5 仿真图5 调试与测量分析图5-1 电路实物图图5-2 实物运行图 如果在电路中最低端的系统电路无法运转,检测电源是否有正常的电压是首先做的工作。判断电源电压的常用方法是用电压表测电源接口与接地接口的电压,看是否为5V左右。附录程序#include /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义变量范围0255#define uint unsigned int /无符号整型 宏定义变量范围065535sbit clk = P13; /ds1302时钟线定义sbit io = P14; /数据线sbit rst = P15; /复位线/秒 分 时 日 月 年 星期 uchar code write_add=0x80,0x82,0x84,0x86,0x88,0x8c,0x8a; /写地址uchar code read_add =0x81,0x83,0x85,0x87,0x89,0x8d,0x8b; /读地址uchar code init_ds =0x55,0x17,0x15,0x01,0x01,0x13,0x13; uchar miao,fen,shi,ri,yue,week,nian;uchar i;uchar t1_num,t2_num;/计时间中断的次数unsigned long speed1,juli,time2;float f_hz,speed_km,speed_m;uchar TH11,TL11;uchar flag_en; /开始计算速度使能uchar flag_stop_en; /要确定车子是否停下了uint juli_s; /每秒走的距离uint juli_z; /总路程float zhijing = 0.55; /直径 0.55Muint s_zhijing = 55;bit flag_1s = 1; /1suchar menu_1; /菜单设置变量uchar menu_2; /菜单设置变量long zong_lc; /总量程uchar flag_200ms;uint shudu; /定义速度的变量uint bj_shudu = 80; /报警速度/这三个引脚参考资料sbit rs=P10; /寄存器选择信号 H:数据寄存器 L:指令寄存器sbit rw=P11; /寄存器选择信号 H:数据寄存器 L:指令寄存器sbit e =P12; /片选信号 下降沿触发uchar code table_num=0123456789abcdefg;uchar i;sbit beep = P37; /蜂鸣器IO口定义/*1ms 延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;iq;i+)for(j=0;j120;j+);/* 名称 : delay_uint()* 功能 : 小延时。* 输入 : 无* 输出 : 无*/void delay_uint(uint q)while(q-);/* 名称 : write_com(uchar com)* 功能 : 1602命令函数* 输入 : 输入的命令值* 输出 : 无*/void write_com(uchar com)i =0;e=0;rs=0;rw=0;P0=com;delay_uint(3);e=1;delay_uint(25);e=0;/* 名称 : write_data(uchar dat)* 功能 : 1602写数据函数* 输入 : 需要写入1602的数据* 输出 : 无*/void write_data(uchar dat)i =0;e=0;rs=1;rw=0;P0=dat;delay_uint(3);e=1;delay_uint(25);e=0;/* 名称 : write_sfm2(uchar hang,uchar add,uchar date)* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示23 ,调用该函数如下 write_sfm1(1,5,23)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*/void write_sfm2(uchar hang,uchar add,uint date)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);write_data(0x30+date/10%10);write_data(0x30+date%10);/* 名称 : write_sfm4(uchar hang,uchar add,uchar date)* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示23 ,调用该函数如下 write_sfm1(1,5,23)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*/void write_sfm4(uchar hang,uchar add,uint date)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);write_data(0x30+date/10000%10);write_data(0x30+date/1000%10);write_data(.);write_data(0x30+date/100%10);write_data(0x30+date/10%10);write_data(0x30+date%10);write_data(k);write_data(m);void write_sfm7(uchar hang,uchar add,uint date)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);write_data(0x30+date/100000%10);write_data(0x30+date/100000%10);write_data(0x30+date/10000%10);write_data(0x30+date/1000%10);write_data(.);write_data(0x30+date/100%10);write_data(0x30+date/10%10);write_data(k);write_data(m);/*lcd1602上显示两位十进制数*/void write_sfm1(uchar hang,uchar add,uchar date)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);write_data(0x30+date % 10);/* 名称 : write_string(uchar hang,uchar add,uchar *p)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示ab cd ef ,调用该函数如下 write_string(1,5,ab cd ef;)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*/void write_string(uchar hang,uchar add,uchar *p)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);while(1)if(*p = 0) break;write_data(*p);p+;/*lcd1602上显示两位十进制数*/void write_sfm2_ds1302(uchar hang,uchar add,uchar date)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);write_data(table_numdate / 16);write_data(table_numdate % 16);/*控制光标函数*/void write_guanbiao(uchar hang,uchar add,uchar date)if(hang=1) write_com(0x80+add);elsewrite_com(0x80+0x40+add);if(date = 1)write_com(0x0f); /显示光标并且闪烁else write_com(0x0c); /关闭光标 /* 名称 : init_1602()* 功能 : 初始化1602液晶 * 输入 : 无* 输出 : 无*/void init_1602() /1602初始化write_com(0x38);write_com(0x0c);write_com(0x06);delay_uint(1000);write_string(1,0,sd:00km/h 00:00);write_string(2,0,lc:00.00km ); / E309R/*写一个数据到对应的地址里*/void write_ds1302(uchar add,uchar dat)rst = 1; /把复位线拿高for(i=0;i= 1; /把地址右移一位clk = 1; /时钟线拿高for(i=0;i= 1; /把数据右移一位clk = 1; /时钟线拿高rst = 0; /复位线合低clk = 0;io = 0;/*从对应的地址读一个数据出来*/uchar read_ds1302(uchar add)uchar value,i;rst = 1; /把复位线拿高for(i=0;i= 1; /把地址右移一位clk = 1; /时钟线拿高for(i=0;i= 1;if(io = 1)value |= 0x80;clk = 1; /时钟线拿高rst = 0; /复位线合低clk = 0;io = 0;return value; /返回读出来的数据/*把要的时间 年月日 都读出来*/void read_time()miao = read_ds1302(read_add0);/读秒fen = read_ds1302(read_add1);/读分shi = read_ds1302(read_add2);/读时ri = read_ds1302(read_add3);/读日yue = read_ds1302(read_add4);/读月nian = read_ds1302(read_add5);/读年week = read_ds1302(read_add6);/读星期/*把要写的时间 年月日 都写入ds1302里*/void write_time()write_ds1302(0x8e,0x00);/打开写保护write_ds1302(write_add0,miao);/写秒write_ds1302(write_add1,fen);/写分write_ds1302(write_add2,shi);/写时write_ds1302(write_add3,ri);/写日write_ds1302(write_add4,yue);/写月write_ds1302(write_add5,nian);/写星期write_ds1302(write_add6,week);/写年write_ds1302(0x8e,0x80);/关闭写保护/*把数据保存到ds1302 RAM中*0-31*/void write_ds1302ram(uchar add,uchar dat)add = 1; /地址是从第二位开始的add &= 0xfe; /把最低位清零 是写的命令add |= 0xc0; /地址最高两位为 1 write_ds1302(0x8e,0x00);write_ds1302(add,dat);write_ds1302(0x8e,0x80);/*把数据从ds1302 RAM读出来*0-31*/uchar read_ds1302ram(uchar add)add = 1; /地址是从第二位开始的add |= 0x01; /把最高位置1 是读命令add |= 0xc0; /地址最高两位为 1 return(read_ds1302(add);/*初始化ds1302时间*/void init_ds1302()uchar i;rst = 0;/第一次读写数据时要把IO品拿低clk = 0;io = 0;i = read_ds1302ram(30); if(i != 3)i = 3;write_ds1302ram(30,i);write_ds1302(0x8e,0x00); /打开写保护for(i=0;i= 3)/2秒speed_km = 0; /速度为0shudu = (uint)speed_km;value = 0;if(flag_en = 1)value = 0;flag_en = 0; /1s = 1 / 1000000us; / 1m/s=0.001km除以1/3600h=3.6km/hf_hz = (t2_num * 65536.0 + TH11 * 256 + TL11) / 1000000 ; /算出来就是秒t2_num = 0;/把
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业知识试题及答案
- 砂石料购销合同范本
- 会计学专业试题及答案
- 宾馆酒店消防安全测试题及答案解析
- 证券从业考试境外毕业及答案解析
- 证券从业资格考试加群及答案解析
- 师德师风考试题库及答案
- 银行招聘考试试题及答案
- 2025年起重机械指挥考试题库及起重机械指挥解析
- 小黑课堂模拟试题及答案
- rzelihz通快碟片式激光器培训课程
- 现代中国的对外关系课件
- HY/T 080-2005滨海湿地生态监测技术规程
- GB/T 712-2011船舶及海洋工程用结构钢
- GB/T 20969.1-2021特殊环境条件高原机械第1部分:高原对内燃动力机械的要求
- GB/T 19868.4-2005基于预生产焊接试验的工艺评定
- GB/T 19633.1-2015最终灭菌医疗器械包装第1部分:材料、无菌屏障系统和包装系统的要求
- 吸附及吸附过程课件
- 羽毛球运动基础知识简介课件
- 设计美学研究课件
- 部编版七年级上册语文《雨的四季》课件(定稿;校级公开课)
评论
0/150
提交评论