自行车里程速度计的设计_第1页
自行车里程速度计的设计_第2页
自行车里程速度计的设计_第3页
自行车里程速度计的设计_第4页
自行车里程速度计的设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 、引 言 .32 、AT89C52 单片机.42.1 AT89C52 单片机简介.42.2 AT89C52 的管脚及其含义.43 、TC4024 .84、 24C01 芯片.94.1 24C01 简介 .94.2 24C01 的特性: .105 、硬件电路的设计 .115.1 系统硬件电路.115.2 系统的工作原理. 126、软件设计 .136.1 系统内存的规划.136.2 系统的主要程序设计.137 、系统调试 .167.1 硬件调试.167.2 软件调试.16参考文献.18 1 引 言 传感器,英文名字为 Sensor 或 Transducer,亦称换能器、变换器。在科技迅速发展的

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

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

4、车、汽车等机动车仪表上。2 AT89C52 单片机2.12.1 AT89C52 单片机简介本设计选用 AT89C52 单片机,AT89C52 是一种低功耗、高性能CMOS 8 位微控制器。使用 Atmel 公司高密度非易失性存储器技术制造,可与工业 AT89C51 产品指令和引脚完全兼容。2.22.2 AT89C52 的管脚及其含义AT89C52 的管脚及各管脚含义如下:图 2.289C52 管脚图各引脚功能说明:VCC电源电压;GND接地; P0 口P0 口是一组 8 位漏极开路型双向 I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动 8 个TTL 逻辑门电路,

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

6、1.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”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会

7、输出一个电流; 在访问外部程序存储器或 16 位地址的外部数据存储器时,P2 口送出高 8 位地址数据。在访问 8 位地址的外部数据存储器时,P2 口输出 P2 锁存器的内容; FLASH 编程或校验时,P2 亦接收高位地址和一些控制信号; P3 口P3 口是一组带有内部上拉电阻的 8 位双向 I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对 P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的 P3 口将用上拉电阻输出电流; P3 口除了作为一般的 I/O 口线外,更重要的用途是它的第二功能:P3.0 RXD(串行输入口) P3.

8、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(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输

9、出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲; 对 FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG); EA 端为高电平(接 Vcc端),CPU 则执行内部程序存储器的指令。3 TC4024 本程序采用 TC4024 芯片,它是一个 7 位的计数器,计数器具有分频的作用,它包含有 14 个管脚,其 7 脚接地,14 脚接+5V,1 脚接 AT89C52 的 INT0,即 12 脚,在系统中此芯片起到了二分频的作用。4 24C01 芯片4.14.1 24C01 简介 24C01 是一个 1K 位串行 CMOS EEPROM,内部含有 128

10、个 8 位字节,CATALYST 的先进 CMOS 技术实际上减少了器件的功耗,24C01 是一个 8 位字节页写缓冲器,该器件通过 I2C 总线接口进行操作,即此芯片采用 I2C 协议进行读写数据。有一个专门的写保护功能。24C01 是 I2C 接口的,但标准 51 是不带 I2C 接口的,串口方式0 是不行的,需要用 IO 模拟,所以随便接两个 IO 都可以,而且都要接上拉电阻,大概几 K 就行了,因为不是总线方式,所以不能用MOV 指令,也不能用 SBUF,要判断是否为满,可以在程序里设个变量。在这里要注意 E2P 芯片的寿命(一般是读写 100 万次,足够了) 。 存储数据的时候,可以

11、对操作数和存储的数据进行比较,不相等则存储,这样可以增加使用寿命,比有些每隔 1 秒钟进行存储的会好多了。以下是 24C01 的管脚图:图 4.1 管脚图表 4.1 24C01 的管脚描述管脚名称A0、A1、A2功能器件地址选择SDASCLWPVCCVSS串行数据/地址串行时钟写保护+1.8V6.0V 工作电压接地4.24.2 24C01 的特性:24C01 芯片具有以下特性:1. 与 400KHZ 的 I2C 总线兼容;2. +1.8-6.0V 工作电压范围;3. 低功耗 CMOS 技术;4. 写保护功能:当 WP 为高电平时进入写保护状态;5. 页写缓冲器;6. 自定时擦写周期;7. 1,

12、000,000 编程擦除/周期;8. 可保存数据 100 年;9. 8 脚 DIP、SOIC、TSSOP 封装;10 温度范围:商业级、工业级和汽车级。5 硬件电路的设计5.15.1 系统硬件电路 自行车里程/速度计能自动显示自行车行驶的总里程数及行车速度,具有超速信响提醒功能,里程数据自动记忆,也可应用于电动自行车、摩托车、汽车等机动车仪表上。其硬件电路原理图如下图。图 5.1 系统原理图5.25.2 系统的工作原理本设计能实时地将所测的速度与累计里程数显示出来,主要是将24C01 传感器输入到单片机的脉冲信号,将频率实时地测量出来,然后通过单片机计算出速度和里程,再将所得的数据存储到 TC

13、4024芯片中,通过 AT89C52 单片机计算出来的速度和里程的数据,必须通过 BCD 码的转换才能输出给数码管。最后由共阴数码管显示所测速度与里程。 自行车里程/速度计采用 AT89C52 单片机作控制,速度及里程传感器采用霍尔元件,其电器原理图如上图所示。P0 口和 P2 口用于七段LED 显示器的段码及扫描输出,在显示里程时,第三位小数点用 17脚 P3.7 口控制点亮。P1.0 和 P1.1 口分别用于显示里程状态和速度状态。P1.2、 P1.3、 P1.6 和 P1.7 口分别用于设置轮圈的大小。P3.0 口的开关用于确定显示的方式,当开关闭合时,显示速度;打开时显示里程。第 12

14、 脚外中断 0 用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个地电平脉冲。第 13 脚外中断 1 用于控制定时器 T1 的启停,当输入为 0 时关闭定时器。此控制信号是将轮子圈数的计数脉冲经二分频后形成,这样,每次定时器 T1 的开启时间刚好为转一圈的时间。根据轮子的周长就可以计算出自行车的速度。P1.4 和 P1.5 口用于 EEPROM 存储器 24C01 的存取控制。11 脚输出用于速度超速时的报警。6 软件设计6.16.1 系统内存的规划 由于本系统处理功能较多,因而一部分内存单元用于特定的用处。其主要内存单元用处如下:50H:EEPROM 器件寻址字节存放单元;51H:E

15、EPROM 传送字节数存放单元;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:存放自行车每圈时间数;70 H、71 H、72 H、73 H:显示 BCD 码数据存放用;11 H15 H:存放被除数;16 H19 H:存放除数。 6.26.2 系统的主要程序设计 1

16、. 初始化程序在本系统初始化程序中,主要完成以下工作:将 T1 设为外部控制定时器方式;外中断 0 及外中断 1 设为边沿触发方式;将部分内存单元清零;设置轮子 周长值;开中断及定时器;将EEPROM 中的数据调入内存等。 2. 轮圈设置出错处理程序 P1.2、 P1.3、 P1.6、P1.7 端口的开关用于设定轮子的周长,当没有设定时(至少让一个开关闭合) ,能从 P3.1 口输出一个周期为 0.5S 的方波信号,用作发光管闪烁及信响器提醒。3.里程计数程序(外中断 0 服务程序) 外中断 0 服务程序用于对 12 脚输入的圈脉冲进行计数,为十六进制计数器。60H 为低位,62H 为高位。每

17、计数一次后,对里程数据进行一次存储操作。4.外中断 1 服务程序外中断 1 服务程序用于处理轮子转动一圈后计时数据。当标志位(00H)为 1 时,说明计数器溢出,放入最大时间值(为#0FFH);当标志位为 0 时,将计数单元(TL1、TH1、6CH、6DH)的值放入 68H6BH 单元。5.EEPROM 存取程序本系统使用归一化 I2C 串口存取子程序,使用一条数据线和时钟线,采用 ATMEL 公司的 24C01 串口存储器,应用简单方便。6.显示子程序当显示里程时,先要将圈数计数器中的数据进行运算,求出总里程。当要 显示速度时,要将轮子的这周长和转一圈的时间数相除,然后换算成 Km/h 单位

18、。最后放入 70H73H,进行数据显示7 调试7.1 硬件调试 硬件的焊接是一个比较繁琐的过程,线路较多,在焊接时要特别的细心。在插入芯片时要特别注意不能把芯片插反,否则就会把芯片烧掉;也要 注意极性电容的方向,长的脚为正,短的为负,不能把负的接+5V,正的接地;在焊接三极管时也要注意其三个管脚的排布,还有为保护三极管不被烧换,所以 3 个三极管要各自接一个限流电阻(这里为 4.7K) 。7.2 软件调试软件调试是调试的重点,同时也是出错最多的地方;在整个软件调试调试过程中我采取先部分后整体的调试方法。在整个程序的编写调试过程中我首先调试的是数码管显示系统,为此我编写了以下一段程序用于数码管显

19、示调试,要求数码管显示0、1、2。 ORG 0000H MAIN: MOV P2, #0FFH MOV P0, 0C0H MOV P2, #0FEH ACALL DELAY1 MOV P2, #0FFHMOV 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 AGAIN: MOV R7, #8FHDELAY: DJNZ R7, DELAY DJNZ R6, AGAIN RET END参考文献1 李玉峰、

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

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

22、感有限公司 山东 威海 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 ,Martin P. Bates,人民邮电出版社附录

23、 源程序:以下是控制系统完整源程序; SPEED/MILE OR IKE PROGRAM ; 60H,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

24、EQU 30H ; EEPROM 发送数据缓冲单元 MRD EQU 40H ; EEPROM 读出数据存放单元 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;

25、跳至 INTEX0 中断服务程序 ORG 000BH;定时器 T0 中断程序入口 RETI ;中断返回 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

26、;堆栈在 75H 开始 SETB PX0 ;外中断 0 优先级为 1 SETB IT0 ;外中断 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

27、MOV 6AH, A ;内存置数据#0FFH MOV 6BH, A ;内存置数据#0FFH 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 寸自行车周长值

28、 LJMP CLEAR2 ; 转 CLEAR2KEY3: JB P1.7, ERR ; 四个开关都没合上,转出错处理 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 ; 重新初始化,等待

29、轮周长设置开关合上 ; PROGRAM START ;START: LCALL CLEARMEN ; 上电初始化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 ;

30、 计数没溢出转 INTEX0OUT INC 61H ; 溢出进位(61H 加 1) CJNE 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 ; C

31、LR EX1 ; 关外中断 1 JNB 00H, INTEX11 ; 溢出标志为 0 转 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,

32、A ; CLR 00H ; 清溢出标志 POP PSW ; 堆栈恢复 POP ACC ; 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 ;

33、 计时器溢出,置溢出标志INTT11: POP PSW ; 恢复堆栈 POP ACC ; 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 ;

34、点亮 LED2(显示时速状态) CLR P3.7 ; 关小数点显示 LCALL VVV ; 每圈时间换算为公里/小时程序 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

35、 起单元VIICWRITE: ACALL WMOV9 MOV SLA, #SLAW MOV 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, #01

36、H LCALL WRNBYT MOV SLA, #SLAR MOV NUMBYT, #08H 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 RETS

37、TOP: CLR VSDA SETB VSCL NOP NOP NOP NOP SETB 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:

38、MOV R0, #08HWLP: RLC A JC WR1 AJMP WR0WLP1: DJNZ 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:

39、 MOV R3, NUMBYT LCALL STA MOV A, SLA LCALL WRBYT 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 D

40、JNZ R3, ACK LCALL MNACK LCALL STOP RETACK: LCALL 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+DP

41、TR ; MOV P0,A ; 段码输出 LCALL DL1MS ; 点亮 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,

42、 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 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 ; 被除数赋值 LC

43、ALL DIVST ; 调除法程序 LCALL BCDST ; 调二进制转 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 ; 将高四位置为 0 MOV 73H, A ; 放入 73H 单元 RET ; 子程序返回; VVV PROGRAM ; 时速处理程序,最大显示速度为 99 公里/小时(用作自行车)VVV: MOV 18H,68H

温馨提示

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

评论

0/150

提交评论