当前位置:文档之家› 电动车里程表课程设计报告书

电动车里程表课程设计报告书

目录第 1 章概述2第 2 章硬件设计22.1 系统组成框图22.2 具体硬件电路及工作原理32.3 AT89C2051单片机介绍42.3.1 芯片概述42.4 其他外围硬件电路52.4.1 电源电路52.4.2 霍尔传感器62.4.3 4位串行静态显示电路6第 3 章软件设计73.1 主程序设计73.2 外部中断0和T1时序溢出中断服务子程序设计8 3.3 速度/里程显示控制子程序设计83.4 系统完整源程序8总结10参考文献11附录12附录1 整体电路图12附录 2 源程序13第一章概述本设计中引入的速度和里程表设计基于微控制器和光电传感器。

传感器将不同车速转换成的不同频率的脉冲信号输入单片机进行控制计算,再通过LED模组进行显示,从而将电动自行车的速度和里程数据直接显示给用户。

该设计可以实时显示实测车速和累计里程,主要是通过实时测量传感器输入到单片机的脉冲信号的频率(传感器将不同的车速转换成不同频率的脉冲信号),考虑到信号衰减、干扰等影响,信号在致到单片机前应进行放大整形,然后由单片机计算速度和里程,将得到的数据存入串口端口数据记忆,测得的速度和速度由LED显示模块交替显示。

里程。

本设计中设计的里程算法是一种近似算法(假设自行车在某个时间匀速行驶,平均速度与时间的乘积就是里程)。

该系统由信号预处理电路、单片机AT 89C2051、系统LED显示模块、串行数据存储电路和系统软件组成。

其数字预处理电路包括信号放大、波形变换和波形整形。

对被测信号进行放大的目的是为了降低对被测信号的幅度要求;波形变换和波形整形电路,用于将放大后的信号转换为可连接单片机的TTL信号;控制脉冲输入引脚T0,可以准确计算单位时间内检测到的脉冲数2C。

存储,既省去了所需的单片机接口线和外围设备,又简化了显示部分的软件编程。

设计时应综合考虑测速精度和系统响应时间。

本设计采用测量脉冲频率计算速度,具有较高的速度测量精度。

计算里程时采用自行车的理想状态。

在实践中,误差控制在几米以内,相对于整个里程来说,并不是很大。

为了保证系统的实时性,系统的速度转换模块和显示数据到BCD码模块均采用快速算法。

此外,应尽可能保证其他子模块编程的通用性和效率。

此设计的速度和里程值以 6 位显示,包括两位小数。

第二章硬件设计2.1 系统组成框图根据功能需求,首先进行整体方案的设计和论证,构思出符合实际需求的系统,如图2.1所示。

该系统由测量模块、功能选择模块、显示模块、电源模块和单片机系统组成。

选择功能后,开始测量,显示大范围实时采集处理。

图 2.1 系统组成框图2.2 具体硬件电路及工作原理具体硬件电路如图2.2所示。

速度和里程由开关式霍尔传感器测量,自行车车轮周长已知(本系统使用1. 8m,设置为L ),车轮每转动一次,传感器采样一个下降沿信号并将其致到外部中断单片机的0产生中断,整书加1,由单片机定时器1(设置为T)对相邻两个下降沿信号的时间进行计时,所以计算当前速度的公式(设置为V)和里程(设置为S)是:V=1.8/T, S= 1.8m*行驶圈数S1为单片机复位开关,系统采用按钮级复位开关; S2为电源开关,由灯D1指示; S3为速度和里程开关; S4为限速开关,可根据自身需要选择。

速度; S 5 是里程单位的开关。

当 P1.4 输出低电平时,控制 D2 亮,表示显示的里程值为 km/h。

当P1.5输出低电平时,控制灯D3亮,表示速度太慢;当P1.6输出低电平时,当控制灯D4亮时,表示此时显示值的里程(否则为车速); P1.7控制超速报警电路,为高电平表示驱动速度正常,为低电平时晶体管9012导通,驱动器蜂鸣报警。

2.3 89CAT 2051 MCU简介2.3.1芯片概述AT89C2051是一款低压、高性能CMOS 8位单片机,内含2k字节可重写只读Fla sh程序存储器和128字节随机存取数据存储器(RAM)。

该设备采用ATMEL的高密度、非易失性易失性存储技术生产,兼容标准MCS-51指令系统,片上通用8位中央处理器和Flash存储单元,功能强大的AT 89C2051微控制器可为您提供许多具有成本效益的应用程序。

AT 89C2051是一款功能强大的微控制器,但它只有20个引脚和15个双向输入/输出(I/O)端口,其中P1是一个完整的8位双向I/O端口,两个外部中断端口,两个16位可编程定时器计数器、两个全双向串行通信端口和一个模拟比较器放大器。

同时89C,AT2051的时钟频率可以为零,即具有可以软件设置的休眠省电功能。

系统的唤醒方式包括RAM、定时器/计数器、串口和外部中断端口。

系统唤醒后进入连续工作状态。

在省电模式下,片内 RAM 将被冻结,时钟停止振荡,所有功能停止工作,直到系统被硬件复位。

管角配置如图 2.3 所示。

图 2.3 2051 引脚图主要功能介绍(1)兼容MCS51指挥系统(2)15个双向I/O端口(3)两个 16 位可编程定时器/计数器(4)时钟频率 0-24MHz(5)两个外部中断源(6)可以直接驱动LED(7)低功耗休眠功能(8)可编程UART通道(9)2k 可重写(>1000 次)Flash ROM(10)6个中断源(11)2.7-6.V的宽工作电压范围(12)128x8 位内存(13)两个串行中断(14)两级加密位(15)设置模拟比较放大器(16)软件设置睡眠和唤醒功能可见的。

2051 可为许多嵌入式控制应用提供高度灵活且低成本的解决方案,尤其是小型系统。

本系统仅使用单片机的10个I/O口,故选择2051单片机作为主系统。

2.4 其他外围硬件电路2.4.1电源电路5V电池组经7805稳压后得到+5V电压给单片机系统和霍尔传感器供电。

2.4.2霍尔传感器霍尔传感器是一种利用霍尔效应将磁输入信号转换为电信号的设备。

系统采用JK8002D霍尔接近开关,是一种非接触式非接触式开关,系统通过它检测外部磁场强度的变化,进而控制开关量输出。

磁场由外部磁铁产生。

JK8002D霍尔接近开关的原理图和输入/输出特性如图(5)和(6)所示。

J K8002D霍尔接近开关的输入量为磁感应强度B,当B值达到一定电平(如Bl)时,霍尔开关部分的触发器翻转,其输出电平状态也翻转。

当探头与磁钢距离由远至近时,霍尔元件输出端输出低电平(约0.2V),无抖动。

当两者距离足够远时,霍尔元件的输出端输出无抖动的低电平。

8mm高电平(约3.7V),所以输出信号可以直接到单片机的外部中断0脚。

2.4.3 4位串行静态显示电路单片机的UART口进行串口通信时,可设置为工作在同步移位寄存器模式0,输出显示信息,实现n位LED的静态显示,只占用几I/ O线。

.系统中4个共阳极LED数码管和4片74LS164组成4位数码显示电路,74LS164将串行输入的显示信息转换为并行输出,驱动数码管显示。

74LS164在低电平输出时允许电流为8mA,因此无需增加驱动电路即可获得理想的亮度。

与动态扫描方式相比,这种方式不第三章软件设计3.1 主程序设计主程序流程图如图 3.1 所示。

系统开机后系统自检,正常时LED显示“——”,等待自行车运行。

车轮开始转动后,系统根据速度/里程开关的选择进行记录计算,并显示数值。

图 3.1 主程序流程图3.2 外部中断0和T1时序溢出中断服务子程序设计外部中断0服务子程序用于统计输入脉冲数,即轮子转动的次数。

每次计时,系统保存圈数和定时器的计时值,并根据功能切换键实时显示相应的数值。

T1 定时器溢出中断服务子程序用于实时计算一个计数的经过时间。

T1计时的参考时间设置为20ms,假设计数中T1中断次数为C,1.8/( 20C·)ms为自行车当前速度。

输入脉冲信号的测量采用部分定时和外部中断的方法实现,是本系统最关键的程序部分。

3.3 速度/里程显示控制子程序设计最大允许转速由限速开关S4控制,超速使单片机P1.7输出低电平报警。

如果行驶速度过慢(< 0.5m/s),灯D3连续闪烁,LED交替显示“Erro”、“Sudu”和当前速度值,以引起骑手的注意。

速度显示值的单位为km/h和每m/s,可通过功能键S5进行切换。

对于里程值,为了显示更准确,程序设置了不同里程范围内显示的小数点后位数:里程为10m~ 99m,显示2位小数;里程为100m~ 999m,显示小数点后 1 位。

3.4 系统完整源程序如附录 1总结本设计以AT 89C2051为核心,通过光电传感器检测自行车的运行情况,实现电动自行车的速度、里程的计算、里程的累加和存储,最后6位LED可以直观地向用户显示速度和里程。

,并能在车速高于一定值时自动向用户报警,从而实现智能车速里程表。

本次课程设计让我掌握了很多实用知识,并且在老师和同学的帮助下,对单片机有了进一步的了解。

通过本次课程设计,我了解到理论联系实际非常重要。

只有理论知识是远远不够的。

只有将所学的理论知识与实践相结合,才能从理论中得出结论,进而提高自己的实践能力和独立思考能力。

整个设计过程可以说不是很顺利,因为很多知识都忘记了,很多新东西没有掌握,所以这个设计花在了不断的复习和学习中,让我受益匪浅,而且它也让我熟悉了微控制器。

随着对应用的进一步了解和掌握,也为以后的学习、生活和工作打下良好的基础。

[1] 易琨,善久.单片机原理与应用:电子科技大学,2002。

[2] 尤德,志英,许世良.单片机原理应用与实验:复旦大学,2000。

[3]威孚Lab2000P系列单片机仿真实验系统手册。

附录1 整体电路图附录 2 源程序自行车里程表/* 各管脚用途及系统功能说明P1.0 速度和里程切换:1表示速度,0表示里程P1.1限速开关:1个10m/s; 0 8m/sP1.2 km/h和 m/s:P1.4表示显示单位为km/hP1.5 速度过慢灯闪烁警告P1.6 0时,灯亮,指示里程;灯灭时显示车速P1.7 超速报警最大距离为9999m6H圈,38H圈,22C圈,15B6圈0m=<S< 10m10m=<S< 100m100m=<S< 1000m1000m=<S<10000m 周长 0707H 00B4H 0012H 0012H/0AH//变量定义//小书教育57H;小数点单位格威教育40H;显示单元室威教育 41H;百威教育42H;前卫教育43H;QSHU1 教育 43H;QSHU0 教育 61H;自行车膝上存储单元高QSHU0 教育 62H;自行车膝上存储单元低SJIAN0 EDU 6CH; T1时序溢出存储单元高SJIAN1 EDU 6DH; T1时序溢出存储单元低位// 主程序 //组织机构 000HAJMP 开始组织机构 0003HAJMP 国际展览中心0ORG 001BHAJMP IT11组织机构 0030H开始:移动 SP,#75H;设置堆栈指针MOV SCON,#00H ;串口工作模式MOV格伟,#0AH;开机显示MOV SHIWEI,#0AHMOV百威,#0AHMOV前卫,#0AH呼叫 DIS11SETB P3.2;外部中断0为输入查询模式P3.2;等待第一个有效脉冲的到来(下降沿)呼叫清除内存;调用系统准备显示初始化子程序STLOOP:JNB P1.0,ST1; p1.0=0,显示速度呼叫显示; P1.0=1,显示里程SJMP 循环;循环显示ST1:呼叫显示V;第一个下降沿后的显示速度AJMP 溢出;循环显示//系统准备显示初始化子程序 //CLEARRAM:MOV TMOD,#10H; T1用于计时,工作在模式1 移动 TH1, #0B1H ;定时 20ms 初始值SETB P1.2; P1.2-P1.0 为输入SETB P1.1塞尔维亚P1.0CLR 一个;相应的RAM空间被清除移动 21H,A ;速度/里程BCD码高位清0移动 22H,A ;速度/里程BCD码低位清0MOV QSHU1,A ;将圈空间清零MOV QSHU0,A移动 6AH,A ; T1溢出次数暂存单元高位清0移动 6BH,A ; T1溢出次数暂存单元低位清0MOV SJIAN0,A ;清理柜台空间MOV SJIAN1,AMOV小舒,#01H ;默认显示 3 位小数SETB IT0 ;将外部中断设置为边沿触发SETB PT1; T1 具有最高优先级SETB EA;打开总中断SETB ET1;打开 T1 中断SETB EX0;打开外部0中断//外部中断0服务子程序//INTEX0:推加速;蓄电池组保护推 PSW;状态字堆栈保护INC QSHU0 ;圈加1SETB P1.7;设置1不报警CLR 一个;清除 ACJNE A,QSHU0,SUBX0;如果计数没有溢出则转到 SUBX0公司QSHU1;溢出进位(61H 加 1)SUBX0:CLR TR1;关闭计时,读取车轮转动一次的时间MOV 6AH, SJIAN0 ;时间暂存MOV 6BH, SJIAN1移动 TH1, #0B1H ;定时器 T1 还清初始值MOV TL1,#0DFHCLR AMOV SJIAN0,A ;清晰的时间空间MOV SJIAN1,ASETB TR1;重定时POP PSW;状态字恢复流行音乐节;蓄能器回收视网膜病变;从中断返回//当T1定时器溢出时中断服务程序//IT11:推加速;堆栈保护推送 PSWINC SJIAN1 ;定时20ms溢出次数MOV A,SJIAN1 ;读取一圈计时的次数CJNE A,#0BBH,SUBT1;速度太慢(<0.5 ),处理AJMP SUBT2SUBT1:JC SUBT2公司 69H; (69H) 为奇数,LED 显示“Erro ”MOV A,69H ;再次显示特定速度的值ACC.0 错误; (69H) 偶数,LED显示“速渡”MOV 格伟,#05H ;再次显示具体速度值MOV SHIWEI,#0BHMOV百味,#0DHMOV前卫,#0BHMOV小舒,#0BH呼叫 DIS11SJMP FS12错误:MOV GEWEI,#0CHMOV施伟,#OBHMOV百威,#0BHMOV前卫,#0DH呼叫 DIS21; “Erro ”或“sudu ”与具体速度值交替闪烁显示FS12:MOV R2,#01H;CLR P1.5呼叫延迟2SETB P1.5呼叫延迟2DJNZ R2,闪光灯SUBT2: 移动 TH1,#0B1HMOV TL1,#0DFHSETB TR1POP PSW流行音乐节视网膜病变//里程显示控制子程序//显示:CLR P1.6呼叫朱莉MOV A,QSHU1CJNE A,#02H,DIAYONG AJMP 潘迪DIAYONG:JNC PANDY1 AJMP 好友潘迪:MOV A,QSHU0 CJNE A,#2CH,PANDY2 AJMP PANDY1PANDY2:JC 好友PANDY1: MOV R6,#00h MOV R7,#0AH呼叫朱利2呼叫 BCDC呼叫分开呼叫 DIS21呼叫延迟1RET好友:MOV R6,#00h MOV R7,#01h呼叫朱利2呼叫 BCDC呼叫分开呼叫 DIS11呼叫延迟1呼叫延迟1RET//速度显示控制子程序// 显示V:SETB P1.6呼唤速都呼叫 BCDC呼叫分开MOV小舒,#01HRET//处理子程序1//朱莉:推 PSW推加速MOV R2,QSHU1MOV R3,QSHU0郑州高MOV A,QSHU0CJNE A,#06H,PAN1 AJMP PAN2PAN1:JNC PAN2AJMP CZ707PAN2:MOV A,QSHU0CJNE A,#38H,PAN3AJMP高PAN3:JC CZB4高:AJMP CZ12CZ707: MOV R6,#07HMOV R7,#07HMOV小舒,#01HAJMP开石CZB4: MOV R6,#00HMOV R7,#0B4HMOV小舒,#02HAJMP开石CZ12: MOV R6,#00HMOV R7,#00HMOV小舒,#03HKAISHI 是一个两字节乘两字节的程序段凯士:MOV A,R3MOV B, R7穆尔 ABMOV R4,BMOV R5,BMOV A,R3MOV B,R6穆尔AAB添加 A,R4MOV R4,ACLR AADDC A,BMOV B,R7穆尔 AB添加 A,R4MOV R4,AMOV A,R3ADDC A,BMOV R3,ACLR ARLC AXCH A,R2MOV B,R6穆尔 AB添加 A,R3MOV R3,AMOV A,R2ADDC A,BMOV 50H,R2MOV 51H,R3MOV 52H,R4MOV 53H,R5POP PSW流行音乐节RET//处理里程子程序2// 朱利2:推PSW推加速MOV R2,50HMOV R3,51HMOV R4,52HMOV R5,53HDIVD11:CLR CMOV A,R3SUBB A, R7MOV A,R2SUBB A,R6JC DVD11SETB OVRETDVD111: MOV B,#10H DVD211:CLR CMOV A,R5MOV R5,AMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AXCH A,R2XCH A,R2MOV F0,CCLR CSUBB A,R7MOV R1,AMOV A,R2SUBB A,R6ANL C,/F0JC DVD311MOV R2,AMOV A,R1INC R5DVD311:DJNZ B,DVD211 MOV A, R4MOV R2,AMOV A,R5MOV R3,ACLR OVMOV 30H,R2MOV 31H,R3流行音乐节POP PSW无RET//十六进制转换乘BCD子程序// BCDC:推加速推送 PSWMOV R6,30HMOV R7,31HCLR AMOV R3,AMOV R4,AMOV R5,AMOV R2,#10HHB322: MOV A,R7RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5大甲MOV R5,AMOV A,R4ADDC A,R4大甲MOV R4,AMOV A,R3ADDC A,R3DJNZ R2,HB322MOV 20H,R3MOV 21H, R4MOV 22H, R5POP PSW无RET//计算速度十六进制值子程序// SUDU:推 PSW推加速P1.2,公里SJMP JUBU公里: MOV R2,#00HMOV R3,#04HMOV R4,# 0F1HMOV R5,# 0A0HCLR P1.4SJMP QUANJUJUBU: MOV R2,#00HMOV R3,#001HMOV R4,#05FHMOV R5,#090HCLR P1.4QUANJU: MOV A, 6BHP1.1,XIAN10CJNE A,#0BH,BUXIANGSJMP JC0XIAN10: CJNE A,#09H,BUXIANG SJMP JC0BUXIANG: JC JC0SJMP BUJGJC0: MOV A, 6AHCJNE A,#00H,BUJGAJMP JIANGAOJIANGAO: CLR P1.7MOV GEWEI,#0CHMOV SHIWEI,#0BHMOV BAIWEI,#0BHMOV QIANWEI,#0DHACALL DIS21ACALL DELAY1MOV GEWEI,#0EHMOV SHIIWEI, #0EHMOV BAIWEI,#0EHMOV QIANWEI, #0EHACALL DIS21ACALL DELAY1SJMP QUANJUBUJU: MOV A, 6BHCJNE A,#0AFH,LING0AJMP LING1LING0: JC LING1AJMP BUJINGLING1: MOV A, 6AHCJNE A,#00J,BULING0AJMP BULING1BULING0: JC BULING1BULING: MOV SJIAN0,#00HMOV SJIAN1,#00HRET//4 bytes divided by 2 bytes division subroutine // BULING1:MOV R6,6AHMOV R7,6BH分区:CLR CMOV A,R3SUBB A, R7MOV A,R2SUBB A, R6JC DVD1SETB OVRETDVD1:MOV B,#10HDVD2:CLR CMOV A,R5RLC AMOV R5,AMOV A, A4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AXCH A,R2XCH A,R2MOV F0,CCLR CSUBB A,R7MOV R1,AMOV A,R2SUBB A,R6ANL C,/F0JC DVD3MOV R2,AMOV A,R1MOV R3,AINC R5DVD3: DJNZ B,DVD2MOV A,R4MOV R2,AMOV A,R5MOV R3,ACLR OVMOV 30H,R2MOV 31H,R3流行音乐节POP PSWSETB P1.7无RET//压缩BCD码到非压缩BCD码子程序// 奋开:MOV R7,#02HMOV R0,#格伟MOV R1,#21HFENKAI1: MOV A, R1ANL A,# 0F0H交换一个MOV R0,AINC R0MOV A,R1ANL A,#0FHMOV R0,AINC R0INC R1DJNZ R7,分开1RET//延迟子程序//DELAY1: MOV R6,#0FFHDEL: MOV R7,#0FFHDJNZ R7,$DJNZ R6,德国;RET延迟 2:MOV R6,#02FHMOV R7,#0FFHDJNZ R7,$DJNZ R6, DEL2RET//4位串行静态显示子程序//DIS21:MOV R7,#04HMOV R0,#格伟LED1_21:MOV A,R0MOV DPTR,#DATA_7SEG22LED1_221:MOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIINC R0DJNZ R7,LED1_21RETDATA_7SEG22D B081H,0EDH,043H,049H,02DH,019H,011H,0CDH,001H,009H,07FH,077H,013H,071, 0FFH;0 1 2 3 4 5 6 7 8 9 - ro E 空显;===========================DIS11: MOV R7,#04HMOV R6,小树MOV R0,#格伟LED1_11:MOV A,R0DJNZ R6,LED6MOV DPTR,#DATA_7SEG3SJMP LED1_31LED6: MOV DPTR,#DATA_7SEG2LED1_31:MOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIINC R0DJNZ R7,LED1_11RETDATA_7SEG2DB 081H,0EDH,043H,049H,02DH,019,011H,0CDH,001H,009H,07FH, 0A1H,0R9H,0 61H; 0 1 2 3 4 5 6 7 8 9 - UJ dDATA_7SEG3DB 080H,0ECH,042H,048H,02CH,018H,010H,0CCH,000H,008H,07FH; 0. 1. 2. 3. 4. 5. 6 7. 8. 9. -导师:年月日。

相关主题