自行车里程及速度计课程设计

上传人:仙*** 文档编号:37450220 上传时间:2021-11-03 格式:DOC 页数:31 大小:311KB
收藏 版权申诉 举报 下载
自行车里程及速度计课程设计_第1页
第1页 / 共31页
自行车里程及速度计课程设计_第2页
第2页 / 共31页
自行车里程及速度计课程设计_第3页
第3页 / 共31页
资源描述:

《自行车里程及速度计课程设计》由会员分享,可在线阅读,更多相关《自行车里程及速度计课程设计(31页珍藏版)》请在装配图网上搜索。

1、学 号 08700109单机原理及接口技术设计说明书 自行车里程/速度计的设计起止日期: 2011 年 8 月 29 日 至 2011 年 9 月 2 日电子与信息工程系电子与信息工程系2011 年年 9 月月 2 日日学生姓名班级成绩指导教师 (签字 )自行车里程自行车里程/ /速度计的设计速度计的设计摘要摘要:本文介绍了用 89C52 单片机设计自行车里程/速度计,运用单片机的运算和控制功能,并采用数码管实时显示所测速度和里程的速度里程计设计方案,用分频器 TC4024 实现二分频,用来探讨 24C01 传感器的用途,通过实用电路的设计来掌握速度及里程传感器的使用方法及一些性能参数。本系统

2、含了电子电路技术,以及常用的 AT89C52 单片机工作原理,通过本系统的设计,把它们俩者有机结合。关键词关键词:AT89C52 数码管 TC4024 分频器 24C01 传感器 目目 录录第一章第一章 绪绪 论论.1 1第二章第二章 芯片介绍芯片介绍.2 22.12.1 AT89C52 单片机 .22.1.1 AT89C52 单片机简介 .22.1.2 AT89C52 的管脚及其含义 .22.22.2 TC4024 分频器 .32.32.3 24C01 芯片 .32.3.1 24C01 简介 .32.3.2 24C01 的特性: .4第三章第三章 硬件电路的设计硬件电路的设计.6 63.13

3、.1 系统结构框图 .63.23.2 系统硬件电路 .63.33.3 系统的工作原理 .7第四章第四章 软件设计软件设计.8 84.14.1 系统内存的规划 .84.24.2 系统的主要程序设计 .8第五章第五章 系统调试系统调试.10105.15.1 硬件调试 .105.25.2 软件调试 .10第六章第六章 心得体会心得体会.1212附录附录 1 1:元件清单:元件清单 .1414附录附录 2:2: 系统完整源程序系统完整源程序 .1515第一章第一章 绪绪 论论传感器,英文名字为 Sensor 或 Transducer,亦称换能器、变换器。在科技迅速发展的今天,传感器越来倍受重视。在日常

4、生活、航天、航空,常规武器、交通运输,机械制造、化工、生物医学工程、自动化检测工程及计量等各项领域都被广泛应用6。目前,传感器已向新材料开发,集成化、智能化、数字化、新工艺,高精度化及高稳定、高可靠化等技术发展。特别是霍尔传感器,鉴于它的价廉、易于使用,使它广泛运用于里程计、速度计等6。单片微型计算机简称单片机,又称微控制器,特别适用于控制领域。通常单片机由单块集成电路构成,内部包含有计算机的基本部件:CPU(中央处理器) ,存储器和 I/O 接口电路等。因此,单片机只需要与适当的软件及外部设备相结合,便可以成为一个单片机控制系统4。目前,场上销售的单片机有 4 位、8、16 位、32 位,并

5、且单片机朝着高性能多种方向发展,尤其是8 位单片机以经成为当前单片机的主流,主要体现在 CPU 功能增强、内部资源增多、引脚的功能化、低电压和低功好耗化上4。单片机因为其体积小、功能强,可靠性高,灵活方便等优点,所以可以用于各个领域,对各行各业的技术改造和产品更新换代起到重要的推动作用。本人经过学习,用 AT89C52 设计了一个自行车里程/速度计。本设计可轮流显示自行车行使的里程和速度, 采用 TC4024 芯片作为计数器以及 2C401 存储数据,3 个单级共阴数码管作为显示系统。本系统具有超速信响提醒功能,里程数据自动记忆,也可应用于电动自行车、摩托车、汽车等机动车仪表上。.第二章第二章

6、 芯片介绍芯片介绍2.12.1 AT89C52AT89C52 单片机单片机2.1.12.1.1 AT89C52AT89C52 单片机简介单片机简介本设计选用 AT89C52 单片机,AT89C52 是一种低功耗、高性能 CMOS 8 位微控制器。使用 Atmel 公司高密度非易失性存储器技术制造,可与工业 AT89C51 产品指令和引脚完全兼容。2.1.22.1.2 AT89C52AT89C52 的管脚及其含义的管脚及其含义AT89C52 的管脚及各管脚含义如下:图 1 89C52 管脚图各引脚功能说明:VCC电源电压;GND接地; P0 口P0 口是一组 8 位漏极开路型双向 I/O 口,也

7、即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动 8 个 TTL 逻辑门电路,对端口 P0 写“1”时,可作为高阻抗输入端用; 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低 8 位)和数据总线复用,在访问期间激活内部上拉电阻; 在 FLASH 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻; P1 口P1 口是一个带内部上拉电阻的 8 位双向 I/O 口,P1 的输出缓冲级可驱动(吸收或输出电流)4个 TTL 逻辑门电路。对端口写“1” ,通过内部的上拉电阻把端口拉到高电平,此时可作输出口。作输入口使用时,因为内部存在上拉电

8、阻,某个引脚被外部信号拉低时会输出一个电流; 与 AT89C51 不同之处是,P1.0 和 P1.1 还可分别作为定时/计数器 2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX) ; FLASH 编程和程序校验期间,P1 接收低 8 位地址; P1.0 和 P1.1 的第二功能:P1.0 T2(定时/计数器 2 外部计数脉冲输入),时钟输出 ;P1.1 T2EX(定时/计数 2 捕获/重装载触发和方向控制); P2 口P2 是一个带内部上拉电阻的 8 位双向 I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口 P2 写“1”,通过内部的上拉电阻

9、把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流; 在访问外部程序存储器或 16 位地址的外部数据存储器时,P2 口送出高 8 位地址数据。在访问 8 位地址的外部数据存储器时,P2 口输出 P2 锁存器的内容; FLASH 编程或校验时,P2 亦接收高位地址和一些控制信号; P3 口P3 口是一组带有内部上拉电阻的 8 位双向 I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对 P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的 P3 口将用上拉电阻输出电流; P3

10、口除了作为一般的 I/O 口线外,更重要的用途是它的第二功能:P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断 0) P3.3 INT1(外中断 1) P3.4 TO(定时/计数器 0) P3.5 T1(定时/计数器 1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 此外,P3 口还接收一些用于 FLASH 闪存编程和程序校验的控制信号; RST复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将是单片机复位; ALE/PROG当访问外部程存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址

11、的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲; 对 FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG); EA 端为高电平(接 Vcc端),CPU 则执行内部程序存储器的指令。2.22.2 TC4024TC4024 分频器分频器 本程序采用 TC4024 芯片,它是一个 7 位的计数器,计数器具有分频的作用,它包含有 14 个管脚,其 7 脚接地,14 脚接+5V,1 脚接 AT89C52 的 INT0,即 12 脚,在系统中此芯片起到了二分频

12、的作用。2.32.3 24C0124C01 芯片芯片2.3.12.3.1 24C0124C01 简介简介 24C01 是一个 1K 位串行 CMOS EEPROM,内部含有 128 个 8 位字节,CATALYST 的先进 CMOS 技术实际上减少了器件的功耗,24C01 是一个 8 位字节页写缓冲器,该器件通过 I2C 总线接口进行操作,即此芯片采用 I2C 协议进行读写数据。有一个专门的写保护功能。24C01 是 I2C 接口的,但标准 51 是不带 I2C 接口的,串口方式 0 是不行的,需要用 IO 模拟,所以随便接两个 IO 都可以,而且都要接上拉电阻,大概几 K 就行了,因为不是总

13、线方式,所以不能用 MOV 指令,也不能用 SBUF,要判断是否为满,可以在程序里设个变量。在这里要注意 E2P 芯片的寿命(一般是读写 100 万次,足够了) 。 存储数据的时候,可以对操作数和存储的数据进行比较,不相等则存储,这样可以增加使用寿命,比有些每隔 1 秒钟进行存储的会好多了。以下是 24C01 的管脚图:图 2 管脚图表 1 24C01 的管脚描述管脚名称功能A0、A1、A2器件地址选择SDA串行数据/地址SCL串行时钟WP写保护VCC+1.8V6.0V 工作电压VSS接地2.3.22.3.2 24C0124C01 的特性:的特性:24C01 芯片具有以下特性:1. 与 400

14、KHZ 的 I2C 总线兼容;2. +1.8-6.0V 工作电压范围;3. 低功耗 CMOS 技术;4. 写保护功能:当 WP 为高电平时进入写保护状态;5. 页写缓冲器;6. 自定时擦写周期;7. 1,000,000 编程擦除/周期;8. 可保存数据 100 年;9. 8 脚 DIP、SOIC、TSSOP 封装;10 温度范围:商业级、工业级和汽车级。第三章第三章 硬件电路的设计硬件电路的设计3.13.1 系统结构框图系统结构框图89C52显示电路按键控制指示灯电路报警电路里程、速度测量电路显示电里程、速度测量电路图 3按键控制部分功能:自行车转圈的大小设置,速度、里程显示选择设置。指示灯部

15、分功能:里程状态和速度状态显示。报警部分功能:超速时采用声音报警提示。里程、速度测量电路部分功能:速度及里程传感器采用霍尔传元件,实现对自行车里程及速度的计算。显示部分功能:速度、里程用数码管动态扫描显示,由 P0 口送出段码,P2 口送出位选信号。3.23.2 系统硬件电路系统硬件电路 自行车里程/速度计能自动显示自行车行驶的总里程数及行车速度,具有超速信响提醒功能,里程数据自动记忆,也可应用于电动自行车、摩托车、汽车等机动车仪表上。其硬件电路原理图如图 4。图 4 系统原理图3.33.3 系统的工作原理系统的工作原理本设计能实时地将所测的速度与累计里程数显示出来,主要是将 24C01 传感

16、器输入到单片机的脉冲信号,将频率实时地测量出来,然后通过单片机计算出速度和里程,再将所得的数据存储到 TC4024 芯片中,通过 AT89C52 单片机计算出来的速度和里程的数据,必须通过 BCD 码的转换才能输出给数码管。最后由共阴数码管显示所测速度与里程。 自行车里程/速度计采用 AT89C52 单片机作控制,速度及里程传感器采用霍尔元件,其电器原理图如图 5.1 所示。P0 口和 P2 口用于七段 LED 显示器的段码及扫描输出,在显示里程时,第三位小数点用 17脚 P3.7 口控制点亮。P1.0 和 P1.1 口分别用于显示里程状态和速度状态。P1.2、 P1.3、 P1.6 和 P1

17、.7 口分别用于设置轮圈的大小。接口 10 口的开关用于确定显示的方式,当开关闭合时,显示速度;打开时显示里程。第 12 脚外中断 0 用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个地电平脉冲。第 13 脚外中断 1 用于控制定时器 T1 的启停,当输入为 0 时关闭定时器。此控制信号是将轮子圈数的计数脉冲经二分频后形成(见图 5.1) ,这样,每次定时器 T1 的开启时间刚好为转一圈的时间。根据轮子的周长就可以计算出自行车的速度。P1.4 和 P1.5 口用于 EEPROM 存储器 24C01 的存取控制。11 脚输出用于速度超速时的报警。第四章第四章 软件设计软件设计4.14.

18、1 系统内存的规划系统内存的规划 由于本系统处理功能较多,因而一部分内存单元用于特定的用处。其主要内存单元用处如下:50H:EEPROM 器件寻址字节存放单元;51H:EEPROM 传送字节数存放单元;30H:EEPROM 发送数据缓冲单元;40H:EEPROM 读出数据存放单元;0A0H:EEPROM 寻址字节字节写;0A1H:EEPROM 寻址字节字节读;62 H:DPTR 计数器扩展高 8 位;6C H:定时器 T1 计数器扩展高 8 位;6D H:定时器 T1 计数器扩展高 816 位;60 H、61 H、62 H:里程计数单元;68 H、69 H、6A H、6B H:存放自行车每圈时

19、间数;70 H、71 H、72 H、73 H:显示 BCD 码数据存放用;11 H15 H:存放被除数;16 H19 H:存放除数。 4.24.2 系统的主要程序设计系统的主要程序设计 1. 初始化程序在本系统初始化程序中,主要完成以下工作:将 T1 设为外部控制定时器方式;外中断 0 及外中断 1 设为边沿触发方式;将部分内存单元清零;设置轮子 周长值;开中断及定时器;将 EEPROM 中的数据调入内存等。 2. 轮圈设置出错处理程序 P1.2、 P1.3、 P1.6、P1.7 端口的开关用于设定轮子的周长,当没有设定时(至少让一个开关闭合) ,能从 P3.1 口输出一个周期为 0.5S 的

20、方波信号,用作发光管闪烁及信响器提醒。3. 主程序主程序根据 P3.0 的开关状态选择里程或速度显示,其流程图如图 6.2 所示。图 5 主程序流程图4.里程计数程序(外中断 0 服务程序) 外中断 0 服务程序用于对 12 脚输入的圈脉冲进行计数,为十六进制计数器。60H 为低位,62H为高位。每计数一次后,对里程数据进行一次存储操作。5.外中断 1 服务程序外中断 1 服务程序用于处理轮子转动一圈后计时数据。当标志位(00H)为 1 时,说明计数器溢出,放入最大时间值(为#0FFH);当标志位为 0 时,将计数单元(TL1、TH1、6CH、6DH)的值放入68H6BH 单元。6.EEPRO

21、M 存取程序本系统使用归一化 I2C 串口存取子程序,使用一条数据线和时钟线,采用 ATMEL 公司的 24C01串口存储器,应用简单方便。7.显示子程序当显示里程时,先要将圈数计数器中的数据进行运算,求出总里程。当要 显示速度时,要将轮子的这周长和转一圈的时间数相除,然后换算成 Km/h 单位。最后放入 70H73H,进行数据显示。第五章第五章 系统调试系统调试 要完成一个产品的设计,有很多纷繁复杂的步骤和过程,其中最为重要和最为关键的就是系统调试。调试的步骤和方法有很多。本人也看过不少,在这次系统调试的中调试的过程我充分的发挥了仿真器的作用。5.15.1 硬件调试硬件调试 硬件的焊接是一个

22、比较繁琐的过程,繁琐的地方在于 3 个单联数码管的连接,线路较多,在焊接时要特别的细心,在焊接完成并烧入程序之后通电发现数码管不亮,检查了好几遍,电路无焊没有错误,于是我就怀疑可能是数码管的问题,拿去贝尔(学院的社团)测试没问题,数码管并没有烧坏。在插入芯片时要特别注意不能把芯片插反,否则就会把芯片烧掉;也要 注意极性电容的方向,长的脚为正,短的为负,不能把负的接+5V,正的接地;在焊接三极管时也要注意其三个管脚的排布,还有为保护三极管不被烧换,所以 3 个三极管要各自接一个限流电阻(这里为 4.7K) 。5.25.2 软件调试软件调试软件调试是调试的重点,同时也是出错最多的地方;在整个软件调

23、试调试过程中我采取先部分后整体的调试方法。在整个程序的编写调试过程中我首先调试的是数码管显示系统,为此我编写了以下一段程序用于数码管显示调试,要求数码管显示 0、1、2。 ORG 0000H MAIN: MOV P2, #0FFH MOV P0, 0C0H MOV P2, #0FEH ACALL DELAY1 MOV P2, #0FFH MOV P0, 0F9H MOV P2, #0FDH ACALL DELAY1 MOV P2, #0FFH MOV P0, 0A4H MOV P2, #OFBH MOV P2, #0FFH AJMP MAIN DELAY1: MOV R6, #02H AGAI

24、N: MOV R7, #8FHDELAY: DJNZ R7, DELAY DJNZ R6, AGAIN RET END结果数码管正确显示了 0、1、2 这三个数,显示系统调试成功。软件测试要注意一下几点:1.在编写 I2C 串行归一化存储子程序时本来出了点错,后经过多次调试才运行正确。2.里程/速度控制程序是系统程序的重点,所以它当然也是软件调试的重点。3.显示系统最好先调试。4.用韦幅软件进行仿真时要充分利用其逐步调试功能。第六章第六章 心得体会心得体会通过这次单片机的课程设计,我进一步熟悉和掌握了单片机的结构及工作原理,单片机的接口技术及相关外围芯片的外特性,控制方法和单片机核心的电路设计

25、的基本方法和技术,通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。这次的课程设计是很难得,其中也有很多不懂得地方,但正是这样,我才能在从中学到很多的东西!通过完成一个包括电路设计和程序开发的完整过程,了解开发一单片机应用系统的全过程,为今后从事相应打下基础。本设计能自动显示自行车行驶的总里程数及行车速度,具有超速信响报警提醒以及里程数据自动记忆的功能,也可应用于电动自行车、摩托车、汽车等机动车的仪表上。由于本系统采用的是动态扫描 LED显示且共阴数码管的驱动电流不是很大,所以数码管的显示不是特别亮。但可以通过更换小点的电阻增大其驱动电流(最大驱动电流不能超过 20 毫安)使数码管

26、变得更亮。参考文献参考文献1 李玉峰、倪虹霞. MCS-51 系列单片机原理与接口技术. 第一版. 北京:人民邮电出版社. 20042 周兴华. 手把手教你学单片机. 第一版.北京:北京航空航天大学出版社. 20053 曾一江. 单片微机原理与接口技术. 第一版.北京:科学出版社. 20064 张俊谟. 单片机中级教程原理与应用. 第二版. 北京:北京航空航天大学出版社. 2006. P1-115 张友德 、赵志英、涂时亮. 单片机微型机原理、应用与实验.第五版.上海:复旦大学出版社. 2006. P24-276 吕泉. 现代传感器原理及应用. 第一版. 北京:清华大学出版社. 2006. P

27、1-57 张毅刚、彭喜元. 单片机原理与应用设计. 第一版. 哈尔滨:哈尔滨工业大学. 8 谢自美.电子线路设计.实验.测试M.武汉:华中科技大学出版社,20009 曲家骇,王季秩 ,伺服控制系统中的传感器10 邬宽民.单片机外围器件实用手册,数据传输接口器件分册.北京.北京航空航天大学出版社.2001:189-19511 王贵悦,新编传感器实用手册.水利电力出版社.2002:67-8912 自行车电子里程表的初步设计 刁文兴 南京工业职业技术学院 后勤总公司 江苏 南京 13 数字式汽车里程表的设计 诸德宏, 潘天红, 朱湘临 江苏大学电气信息工程学院 , 江苏 镇江 14 电子车速里程表的

28、单片机实现方案王锁弘, 威海双丰电子传感有限公司 山东 威海 15 张福学。传感器使用电路 150 例.中国技术出版社M.1992 年16 Embedded Microcontrollers and Processor Design ,嵌入式微控制器与处理器设计,Greg Osborn,机械工业出版社17 Altium Designer (Protel),机械工业出版社18 Programming 8-bit PIC Microcontrollers in C with Interactive Hardware Simulation, 8 位单片机 C 语言编程:基于 PIC16 ,Marti

29、n P. Bates,人民邮电出版社附录附录 1 1:元件清单:元件清单元件型号数量元件型号数量传感器24C011 个瓷片电容30P2 个分频器TC40241 个晶振12M1 个单片机集成块AT89C521 个覆铜板BIG 1 块电阻3301 个LED 数码管PLT75361AS3 个电阻1 K2 个蜂鸣器PASSED1 个电阻4.7K9 个三极管901210137 个电阻8.2 K3 个发光二极管3 个电阻1.8K3 个自锁开关6 个电解电容10F1 个附录附录 2:2: 系统完整源程序系统完整源程序以下是控制系统完整源程序; SPEED/MILE OR IKE PROGRAM ; 60H,

30、61H,62H 作里程计数单元,6CH,6DH 作 T1 计数扩充单元,; 68H,69H,6AH,6BH 存放自行车每圈时间数,70H,71H,72H,73H; 作显示 BCD 码存放数用,11H15H 存放被除数,16H-19H 存放除数; 定义 VSDA EQU P1.5 ; EEPROM 数据传送口 VSCL EQU P1.4 ; EEPROM 时钟传送口 SLA EQU 50H ; EEPROM 器件寻址字节存放单元 NUMBYT EQU 51H ; EEPROM 传送字节数存放单元 MTD EQU 30H ; EEPROM 发送数据缓冲单元 MRD EQU 40H ; EEPROM

31、 读出数据存放单元 SLAW EQU 0A0H ; EEPROM 寻址字节写 SLAR EQU 0A1H ; EEPROM 寻址字节读 DPHH EQU 62H ; DPTR 计数扩展高 8 位 TH1H EQU 6CH ; 定时器 T1 扩展高 8 位 TH1HH EQU 6DH ; 定时器 T1 扩展高 8-16 位; PRO GRAM INPUT ; ORG 0000H;程序执行开始地址 LJMP START;跳至 START ORG 0003H;外中断 0 中断程序入口 LJMP INTEX0;跳至 INTEX0 中断服务程序 ORG 000BH;定时器 T0 中断程序入口 RETI

32、;中断返回 ORG 0013H;外中断 1 中断入口 LJMP INTEX1; 跳至 INTEX1 中断服务程序 ORG 001BH; 定时器 T1 中断程序入口 LJMP INTT1; 跳至 INTT1 中断服务程序 ORG 0023H;串口中断入口地址 RETI ;中断返回 ORG 002BH;定时器 T2 中断入口地址 RETI ;中断返回; PROGRAM CLEAR ;上电初始化程序CLEARMEN: MOV TMOD, #90H ;T1 为 16 位外部控制定时器 MOV SP, #75H ;堆栈在 75H 开始 SETB PX0 ;外中断 0 优先级为 1 SETB IT0 ;外

33、中断 0 用边沿触发 SETB IT1 ;外中断 1 用边沿触发 MOV 20H, A ;清内存中特定单元 MOV 6CH, A ; MOV 6DH, A ; MOV 70H, A ; MOV 71H, A ; MOV 72H, A ; MOV 73H, A ; MOV 60H, A ; MOV 61H, A ; MOV 62H, A ; MOV 63H, A ; 清内存中特定单元 DEC A ;A 为#0FFH MOV 68H, A ;内存置数据#0FFHMOV 69H, A ;内存置数据#0FFH MOV 6AH, A ;内存置数据#0FFH MOV 6BH, A ;内存置数据#0FFH

34、MOV P1, A ;P1 口置 1CLEAR1: JB P1.2, KEY1 ;根据 P1.2,P1.3,P1.6,P1.7 设置状态 ; 在 21 地址单元赋自行车周长 值 MOV 21H, #0FH ; 22 寸自行车周长值 LJMP CLEAR2 ; 转 CLEAR2KEY1: JB P1.3, KEY2 ; MOV 21H, #12H ; 24 寸自行车周长值 LJMP CLEAR2 ; CLEAR2KEY2: JB P1.6, KEY3 ; MOV 21H, #14H ; 26 寸自行车周长值 LJMP CLEAR2 ; 转 CLEAR2KEY3: JB P1.7, ERR ; 四

35、个开关都没合上,转出错处理 MOV 21H, #19H ; 28 寸自行车周长值CLEAR2: SETB TR1 ; 开定时器 T1 SETB EA ; 开中断允许 SETB EX0 ; 开外中断 0 SETB ET1 ; 开定时中断 T1 SETB P3.1 ; 关报警器 LCALL VIICREAD ; 将 EEPROM 中原里程数据调入内存 RET ; 子程序返回ERR: CPL P3.1 ; 轮周长设置出错,LED 灯闪提醒 ALL DL5S ; 延时 LJMP CLEAR1 ; 重新初始化,等待轮周长设置开关合上 ; PROGRAM START ;START: LCALL CLEAR

36、MEN ; 上电初始化START1: JB P3.0, DISPLAYS ; P3.0=1,显示里程 LCALL DISPLAYV ; 显示速度START2: SJMP START1 ; 转 START1 循环; INTEX0 PROGRAM ; 里程计数程序,用外中断 0 实现,计数用 60H-62H 内存单元。INTEX0: PUSH ACC ; 累加器堆栈保护 PUSH PSW ; 状态字堆栈保护 INC 60H ; 圈加 1 CLR A ; 清 A CJNE A, 60H, INTEX0OUT ; 计数没溢出转 INTEX0OUT INC 61H ; 溢出进位(61H 加 1) CJN

37、E A, 61H, INTEX0OUT ; 计数没溢出转 INTEX0OUT INC 62H ; 溢出进位(62H 加 1)INTEX0OUT: LCALL VIICWRITE ; 里程数据存入 EEPROM SETB EX1 ; 开外中断 1 POP PSW ; 状态字恢复 POP ACC ; 累加器恢复 RETI ; 中断返回; INTEX1 PROGRAM ; 每转 1 圈时间计数处理程序,每圈时间放在 68H-6BH 单元中。INTEX1: PUSH ACC ; 堆栈保护 PUSH PSW ; CLR EX1 ; 关外中断 1 JNB 00H, INTEX11 ; 溢出标志为 0 转

38、INTEX11 MOV TL1, #0FFH ; 溢出时计时单元赋#0FFH(显示速度为零) MOV TH1, #0FFH ; MOV 6CH, #0FFH ; MOV 6DH, #0FFH ;INTEX11: MOV 68H, TL1 ; 将时间计数值移入暂存单元 68H-6BH MOV 69H, TH1 ; MOV 6AH, 6CH ; MOV 6BH, 6DH ; CLR A ; 清 A MOV TL1, A ; 计时单元置 0 MOV TH1, A ; MOV 6CH, A ; MOV 6DH, A ; CLR 00H ; 清溢出标志 POP PSW ; 堆栈恢复 POP ACC ;

39、RETI ; 中断返回; INTT1 PROGRAM ; T1 计数器中断服务程序。 (计数器 T1 由外中断 1 输入控制,当为高电平时计时开始)INTT1: PUSH ACC ; 堆栈保护 PUSH PSW ; INC 6CH ; 6CH 计时单元加 1 MOV A, 6CH ; 移入 A JNZ INTT11 ; 不等于 0 转 INTT11 INC 6DH ; 进位,6DH 单元加 1 MOV A, 6DH ; 移入 A JNZ INTT11 ; 不等于 0 转 INTT11 SETB 00H ; 计时器溢出,置溢出标志INTT11: POP PSW ; 恢复堆栈 POP ACC ;

40、RETI ; 中断返回; DISPLAY S ;里程显示控制程序DISPLAYS: SETB P1.0 ; 点亮 LED1(显示里程状态) CLR P1.1 ; 关闭速度指示灯 SETB P3.7 ; 显示小数点(最小显示为 0.1 公里) LCALL SSS ; 将圈数转为公里数 LCALL DISPLAY ; 显示公里数据 LJMP START1 ; 跳回 START1; DISPLAY V ;速度显示控制程序DISPLAYV: CLR P1.0 ; 关闭 LED1(里程)灯 SETB P1.1 ; 点亮 LED2(显示时速状态) CLR P3.7 ; 关小数点显示 LCALL VVV ;

41、 每圈时间换算为公里/小时程序 MOV A, 71H ; 将十位数(BCD 码)值移入 A SUBB A, #04H ; 与预定报警值比较 JNC WARING ; 时速超过 40 时报警 SETB P3.1 ; 关报警灯V1: LCALL DISPLAY ; 显亮一次(为了改善闪烁) RET ; 子程序返回WARING: CLR P3.1 ; 报警灯 LED3 点亮(并呜叫) AJMP V1 ; 转 V1 退出; VIIC WRITE ;归一化 EEPROM 存入程序(12M 时钟) ,存入数在 50H 起单元VIICWRITE: ACALL WMOV9 MOV SLA, #SLAW MOV

42、 NUMBYT, #09H LCALL WRNBYT RETWMOV9: MOV 5FH, #50H MOV R0, #MTD MOV R1, #5FH MOV R2, #09HWMOV: MOV A, R1 MOV R0, A INC R0 INC R1 DJNZ R2, WMOV RET; VIICRE AD ; 归一化 EEPROM 读出程序(12M 时钟) ,读出数放入 60H-67H 单元VIICREAD: MOV MTD, #50H MOV SLA, #SLAW MOV NUMBYT, #01H LCALL WRNBYT MOV SLA, #SLAR MOV NUMBYT, #08

43、H LCALL RDNBYT ACALL RMOV8 RETRMOV8: MOV R0, #MRD MOV R1, #60H MOV R2, #08HRMOV: MOV A, R0 MOV R1, A INC R0 INC R1 DJNZ R2, RMOV RET; VIIC PROGRAM ; I2C 串行归一化存储子程序STA: SETB VSDA SETB VSCL NOP NOP NOP NOP CLR VSDA NOP CLR VSDA NOP NOP NOP NOP CLR VSCL RETSTOP: CLR VSDA SETB VSCL NOP NOP NOP NOP SETB

44、VSDA NOP NOP NOP NOP CLR VSDA CLR VSCL RETMACK: CLR VSDA SETB VSCL NOP NOP NOP NOP CLR VSCL SETB VSDA RETMNACK: SETB VSDA SETB VSCL NOP NOP NOP NOP CLR VSCL CLR VSDA RETCACK: SETB VSDA SETB VSCL CLR F0 MOV C, VSDA JNC CEND SETB F0CEND: CLR VSCL RETWRBYT: MOV R0, #08HWLP: RLC A JC WR1 AJMP WR0WLP1: D

45、JNZ R0, WLP RETWR1: SETB VSDA SETB VSCL NOP NOP NOP NOP CLR VSCL CLR VSDA AJMP WLP1WR0: CLR VSDA SETB VSCL NOP NOP NOP NOP CLR VSCL AJMP WLP1RDBYT: MOV R0, #08HRLP: SETB VSDA SETB VSCL MOV C, VSDA MOV A, R2 RLC A MOV R2, A CLR VSCL DJNZ R0, RLP RETWRNBYT: MOV R3, NUMBYT LCALL STA MOV A, SLA LCALL WR

46、BYT LCALL CACK JB F0, WRNBYT MOV R1, #MTDWRDA: MOV A, R1 LCALL WRBYT LCALL CACK JB F0, WRNBYT INC R1 DJNZ R3, WRDA LCALL STOP RETRDNBYT: MOV R3, NUMBYT LCALL STA MOV A, SLA LCALL WRBYT LCALL CACK JB F0, RDNBYTRDN: MOV R1, #MRDRDN1: LCALL RDBYT MOV R1, A DJNZ R3, ACK LCALL MNACK LCALL STOP RETACK: LC

47、ALL MACK INC R1 SJMP RDN1; DISPLAY PROGRAM ; 显示程序。显示 BCD 码在 70H-73H 单元内,采用共阴 LED 数码管DISPLAY: MOV R1, #70H ; 显示单元首址 MOV R2, #0FEH ; 扫描字PLAY: MOV A, R2 ; 扫描字入 A MOV P2, A ; 放到端口 MOV A, R1 ; 取显示数据 ANL A, #0FH ; 去掉高四位(为 0) MOV DPTR, #TAB ; 取段码表首址 MOVC A, A+DPTR ; 查显示数据对应段码 MOV P0,A ; 段码输出 LCALL DL1MS ;

48、点亮 1 毫秒 INC R1 ; 指向下一显示数据地址 MOV A, R2 ; 取扫描字 JNB ACC.3, ENDOUT ; 已扫描到第四位,转 ENDOUT 退出 RL A ; 循环左移 MOV R2, A ; 放回 R2 AJMP PLAY ; 转 PLAY 循环ENDOUT: SETB P2.0 ; 关扫描 SETB P2.1 ; 关扫描 SETB P2.2 ; 关扫描 SETB P2.3 ; 关扫描 RET ; 扫描结束;共阴段码表(可显示 0-F)TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7C

49、H, 39H, 5EH, 79H, 71H DB 00H; SSS PROGRAM ; 里程处理程序,将自行车圈数据换算成公里数SSS: MOV 19H, #64H ; 除数最高位赋值 MOV 18H, #00H ; 除数赋值 MOV 17H, #00H ; 除数赋值 MOV 16H, #00H ; 除数赋值 MOV 11H, #00H ; 被除数赋值 MOV 12H, #00H ; 被除数赋值 MOV 13H, 62H ; 被除数赋值 MOV 14H, 61H ; 被除数赋值 MOV 15H, 60H ; 被除数赋值 LCALL DIVST ; 调除法程序 LCALL BCDST ; 调二进

50、制转 BCD 码程序 MOV A, 25H ; 结果处理,将 25H 数移入 A ANL A, #0FH ; 将高四位置为 0 MOV 70H, A ; 放入 70H 单元 MOV A, 25H ; 25H 数移入 A SWAP A ; 高低四位交换 ANL A, #0FH ; 将高四位置为 0 MOV 71H, A ; 放入 71H 单元 MOV A, 24H ; 24H 数移入 A ANL A, #0FH ; 将高四位置为 0 MOV 72H, A ; 放入 72H 单元 MOV A, 24H ; 24H 数移入 A SWAP A ; 高低四位交换 ANL A, #0FH ; 将高四位置为

51、 0 MOV 73H, A ; 放入 73H 单元 RET ; 子程序返回; VVV PROGRAM ; 时速处理程序,最大显示速度为 99 公里/小时(用作自行车)VVV: MOV 18H,68H ; 除数赋值 MOV 17H,69H ; 除数赋值 MOV 16H,6AH ; 除数赋值 MOV 11H,#00H ; 被除数赋值 MOV 12H,#00H ; 被除数赋值 MOV 13H, #36H ; 被除数赋值 MOV 14H, #0EEH ; 被除数赋值 MOV 15H, #80H ; 被除数赋值 LCALL DIVST ; 调除法程序 MOV 14H, #00H ; 舍去一位 LCALL

52、 BCDST ;二进制转 BCD 码程序 MOV A, 25H ;以下将速度值放入显示单元 ANL A, #0FH ;高四位为 0 MOV 70H, A ;放入 70H 内 MOV A, 25H ;再取数 SWAP A ;高低四交换 ANL A, #0FH ;高四位为 0 MOV 71H, A ;放入 71H 内 MOV 72H, #00H ;72H 为 0(高二位 LED 显示 0) MOV 73H, #00H ;73H 为 0 RET ;子程序返回; DL1MS ;1 毫秒延时程序,LED 点亮用DL1MS: MOV R6, #14HDL1: MOV R7, #19HDL2: DJNZ R

53、7, DL2 DJNZ R6, DL1 RET; DL0.5S ;出错闪烁用延时(255 毫秒)DL5S: MOV R5, #0FFHDL3: LCALL DL1MS DJNZ R5, DL3 RET; 除法子程序 ;除法子程序,用作四位除法,除数在 16H-19H,被除数在 11H-15H。DIVST: CLR C ;运算开始 MOV A, 13H SUBB A, 18H MOV A, 12H SUBB A, 17H MOV A, 11H SUBB A, 16H JNC LOOP4 MOV B, #10H NDIV1: CLR C MOV A, 15H RLC A MOV 15H, A MO

54、V A, 14H RLC A MOV 14H, A MOV A, 13H RLC A MOV 13H, A MOV A, 12H RLC A MOV 12H, A MOV A, 11H RLC A MOV 11H, A MOV F0, C CLR C MOV A, 13H SUBB A, 18H MOV 1AH, A MOV A, 12H SUBB A, 17H MOV 19H, A MOV A, 11H SUBB A, 16H JB F0, NDIV2 JC NDIV3 NDIV2: MOV 11H, A MOV A, 19H MOV 12H, A MOV A, 1AH MOV 13H, A

55、 INC 15H NDIV3: DJNZ B, NDIV1 CLR F0DIVEND: RET LOOP4: SETB F0 SJMP DIVEND; BCD 码转换程序 ; ;将 14H、15H 单元内数据转换成十进制 BCD 码放在 24H、25H 单元内。 BCDST: MOV R7, #10H CLR C MOV 25H, #00H MOV 24H, #00H KKK: MOV A, 15H RLC A MOV 15H, A MOV A, 14H RLC A MOV 14H, A MOV A, 25H ADDC A, 25H DA A MOV 25H, A MOV A, 24H ADDC A, 24HDA A MOV 24H, A DJNZ R7, KKKRETEND ;程序结束

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!