自行车里程表的设计毕业设计论文Word格式文档下载.docx
《自行车里程表的设计毕业设计论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《自行车里程表的设计毕业设计论文Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。
![自行车里程表的设计毕业设计论文Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/10/41d11e8d-f5f4-424e-af78-e79ec30be50e/41d11e8d-f5f4-424e-af78-e79ec30be50e1.gif)
本系统由信号预处理电路、单片机AT89C2051、系统化LED显示模块、串口数据存储电路和系统软件组成。
其中信号预处理电路包含信号放大、波形变换和波形整形。
对待测信号进行放大的目的是降低对待测信号的幅度要求;
波形变换和波形整形电路则用来将放大的信号转换成可与单片机相连的TTL信号;
通过单片机的设置可使内部定时器T1对脉冲输入引脚T0进行控制,这样能精确地算出加到T0引脚的单位时间内检测到的脉冲数;
设计中速度显示采用LED模块,通过速度换算得来的里程数采用I2C总线并通过E2PROM来存储,既节省了所需单片机的口线和外围器件,同时也简化了显示部分的软件编程。
设计时,应综合考虑测速精度和系统反应时间。
本设计用测量脉冲频率来计算速度,因而具有较高的测速精度。
在计算里程时取了自行车的理想状态。
实际中,误差控制在几米之内,相对于整个里程来说不是很大。
为了保证系统的实时性,系统的速度转换模块和显示数据转BCD码模块都采用快速算法。
另外,还应尽量保证其他子模块在编程时的通用性和高效性。
本设计的速度和里程值采用6位显示,并包含两个小数位。
第二章硬件设计
2.1系统组成结构框图
根据功能要求,首先要进行的是总体方案的设计于论证,构思一个符合实际要求的系统,如图2.1所示。
系统由测量模块、功能选择模块、显示模块、供电模块和单片机小系统构成。
功能选择后启动测量,大片及实时采集、处理后显示。
发电机
图2.1系统组成结构框图
2.2具体硬件电路及工作原理
具体硬件电路如图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为限速切换开关,可以根据自身需要选择不同的最大超速速度;
S5为里程单位切换开关。
P1.4输出低电平时,控制D2亮,表示此时显示的里程值为km/h,P1.5输出低电平时,控制灯D3亮,提示速度太慢;
P1.6输出低电平时,控制灯D4亮,表示此时的显示值时里程(否则为速度);
P1.7控制超速报警电路,其为高电平表示行驶速度正常,为低电平时,三极管9012导通,驱动蜂鸣器报警。
2.3AT89C2051单片机简介
2.3.1芯片概述
AT89C2051是一个低电压,高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读Flash程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大AT89C2051单片机可为您提供许多高性价比的应用场合。
AT89C2051是一个功能强大的单片机,但它只有20个引脚,15个双向输入/输出(I/O)端口,其中P1是一个完整的8位双向I/O口,两个外中断口,两个16位可编程定时计数器,两个全双向串行通信口,一个模拟比较放大器。
同时AT89C2051的时钟频率可以为零,即具备可用软件设置的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。
省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运行。
管角配置图2.3所示。
图2.32051引脚图
主要功能介绍
(1)兼容MCS51指令系统
(2)15个双向I/O口
(3)两个16位可编程定时/计数器
(4)时钟频率0-24MHz
(5)两个外部中断源
(6)可直接驱动LED
(7)低功耗睡眠功能
(8)可编程UARL通道
(9)2k可反复擦写(>
1000次)FlashROM
(10)6个中断源
(11)2.7-6.V的宽工作电压范围
(12)128x8bit内部RAM
(13)两个串行中断
(14)两级加密位
(15)内置一个模拟比较放大器
(16)软件设置睡眠和唤醒功能
可见。
2051可以为很多的嵌入式控制应用提供高度灵活而且价格低廉的方案,特别适合小系统。
本系统仅用到单片机的10个I/O口,所以选用2051单片机做主系统。
2.4其他外围硬件电路
2.4.1电源电路
如图2.4所示。
发电机发出+15V的交流电,经整流滤波后,再给镍氢电池组充电,充电采用恒流方式。
已充电的电池组经7805稳压,给霍尔传感器和单片机系统供电。
由
图2.4电源电路原理图
于充电电流可达400~500mA,且充电时间较长,所以三极管选用功率高的C8050。
5KΩ的电位器用于调节充电电流,避免电流过大烧坏元件。
当然,实验设计过程中为了简便,我们可以不用电机。
直接用4个1.5V的电池组经7805稳压后得到+5V电压给单片机系统和霍尔传感器供电。
2.4.2霍尔传感器
霍尔传感器是利用霍尔效应把磁输入信号转换成电信号的器件。
本系统采用JK8002D霍尔接近开关,他是一种非接触型无触点开关,系统通过它探测外部的磁场的强弱变化,继而控制开关输出。
磁场由外部的磁钢产生。
JK8002D霍尔接近开关的内部原理图和输入/输出特性如图(5)和图(6)所示。
JK8002D霍尔接近开关的输入量是磁感应强度B,当B值达到一定的程度(如Bl)时,霍尔开关内部的触发器翻转,其输出电平状态也随之翻转。
当探头与磁钢距离由远而近为8mm时,霍尔元件输出端输出一个无抖动的低电平(约为0.2V),当两者距离足够远时,霍尔元件输出端输出一个无抖动的高电平(约为3.7V),所以输出信号可直接到单片机的外中断0的引脚。
2.4.34位串行静态显示电路
当单片机的UART口部进行串行通信时,可设置其工作于同步移位寄存器方式0,以输出显示信息,实现n位LED的静态显示,这样做只占用了很少的I/O口线。
系统中,4各共阳极得LED数码管和4片74LS164构成4位数字显示电路,74LS164将串行输入的显示信息转换成并行输出,驱动数码管显示。
74LS164在低电平输出时允许通过的电流为8mA,故不必添加驱动电路即可获取理想亮度。
与动态扫描方式相比较,该方式无须CPU做不停的扫描,频繁地为显示服务,节省了CPU的时间,软件世界也比较简单。
显示电路如图2.5所示。
图2.54位串行静态显示电路原理图
第三章软件设计
3.1主程序设计
主程序流程图见图3.1。
开机后系统自检,正常时LED显示“——”,同时等待自行车行驶。
轮子开始转圈后,系统进行记录和计算,并根据速度/里程开关的选择显示数值。
Y
图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
总结
本设计以AT89C2051为核心,通过光电传感器来检测自行车的运转情况进而实现电动自行车的速度,里程的计算及里程的累计,存储,最后用6位的LED能直观的将速度与里程显示给用户,并且在速度高于一定的值时可自动向用户报警,从而达到智能速度里程表。
这次课程设计使我掌握了很多实践知识,在老师和同学的帮助下对单片机有了进一步的了解。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,进而提高自己的实际动手能力和独立思考的能力。
整个设计过程可以说不是很顺利,因为有很多知识已经淡忘,还有很多新的东西没有掌握,所以这次设计在不断的复习、学习中度过,使我受益匪浅,也使我对单片机的运用有了进一步的了解和掌握,也为今后的学习生活和工作打下良好的基础。
参考文献
[1]张毅坤,陈善久.单片微型计算机原理及应用.西安:
[2]张友德,赵志英,徐时亮.单片微机原理应用与实验.上海:
[3]伟福Lab2000P系列单片机仿真实验系统说明书.
附录
附录1整体电路图
附录2源程序
自行车里程表
/*各引脚用途及系统功能说明
P1.0速度和里程切换:
1显示速度,0显示里程
P1.1限速度切换:
110m/s;
08m/s
P1.2km/h和m/s的切换:
P1.4指示显示器单位为km/h
P1.5速度太慢灯闪烁警告
P1.60时灯亮,指示里程;
为以灯不亮,显示速度
P1.7超速度报警
距离最大值为9999m
6H圈、38H圈、22C圈、15B6圈
0m=<
S<
10m10m=<
100m100m=<
1000m1000m=<
10000m
周长0707H00B4H0012H0012H/0AH
//变量定义//
XIAOSHUEDU57H;
小数点位数单元
GEWEIEDU40H;
显示单元
SHIWEIEDU41H;
BAIWEIEDU42H;
QIANWEIEDU43H;
QSHU1EDU43H;
QSHU0EDU61H;
自行车圈数存储单元高位
QSHU0EDU62H;
自行车圈数存储单元低位
SJIAN0EDU6CH;
T1定时溢出存储单元高位
SJIAN1EDU6DH;
T1定时溢出存储单元低位
//主程序//
ORG000H
AJMPSTART
ORG0003H
AJMPINTEX0
ORG001BH
AJMPIT11
ORG0030H
START:
MOVSP,#75H;
设置堆栈指针
MOVSCON,#00H;
串行口工作方式
MOVGEWEI,#0AH;
开机显示
MOVSHIWEI,#0AH
MOVBAIWEI,#0AH
MOVQIANWEI,#0AH
ACALLDIS11
SETBP3.2;
外中断0为输入查询方式
JBP3.2;
等待第一个有效脉冲(下降沿)到来
ACALLCLEARRAM;
调用系统准备显示初始化子程序
STLOOP:
JNBP1.0,ST1;
p1.0=0,显示速度
ACALLDISPLAYS;
P1.0=1,显示里程
SJMPSTLOOP;
循环显示
ST1:
ACALLDISPLAYV;
第一个下降沿来后显示速度
AJMPSTLOOP;
//系统准备显示初始化子程序//
CLEARRAM:
MOVTMOD,#10H;
T1用于定时,工作于模式1
MOVTH1,#0B1H;
定时20ms初始值
SETBP1.2;
P1.2-P1.0为输入
SETBP1.1
SERBP1.0
CLRA;
相应内RAM空间清零
MOV21H,A;
速度/里程的BCD码高位清0
MOV22H,A;
速度/里程的BCD码低位清0
MOVQSHU1,A;
圈数空间清0
MOVQSHU0,A
MOV6AH,A;
T1溢出次数暂存单元高位清0
MOV6BH,A;
T1溢出次数暂存单元低位清0
MOVSJIAN0,A;
计数器空间清零
MOVSJIAN1,A
MOVXIAOSHU,#01H;
默认显示3位小数
SETBIT0;
设置外中断为边沿触发方式
SETBPT1;
T1优先级最高
SETBEA;
开总中断
SETBET1;
开T1中断
SETBEX0;
开外0中断
//外中断0服务子程序//
INTEX0:
PUSHACC;
累加器堆栈保护
PUSHPSW;
状态字堆栈保护
INCQSHU0;
圈加1
SETBP1.7;
置1不报警
清A
CJNEA,QSHU0,SUBX0;
计数没溢出转SUBX0
INCQSHU1;
溢出进位(61H加1)
SUBX0:
CLRTR1;
关计时,读轮子转一圈的时间
MOV6AH,SJIAN0;
时间暂存
MOV6BH,SJIAN1
定时器T1重付初值
MOVTL1,#0DFH
CLRA
清计时空间
MOVSJIAN1,A
SETBTR1;
重新计时
POPPSW;
状态字恢复
POPACC;
累加器恢复
RETI;
中断返回
//T1定时器溢出时中断服务子程序//
IT11:
堆栈保护
PUSHPSW
INCSJIAN1;
定时20毫秒溢出次数
MOVA,SJIAN1;
读一圈定时的次数
CJNEA,#0BBH,SUBT1;
速度太慢(<
0.5),处理
AJMPSUBT2
SUBT1:
JCSUBT2
INC69H;
(69H)为奇数,LED显示“Erro”
MOVA,69H;
再显示具体速度的值
JBACC.0ERRO;
(69H)为偶数,LED显示“Sudu”
MOVGEWEI,#05H;
MOVSHIWEI,#0BH
MOVBAIWEI,#0DH
MOVQIANWEI,#0BH
MOVXIAOSHU,#0BH
SJMPFS12
ERRO:
MOVGEWEI,#0CH
MOVSHIWEI,#OBH
MOVBAIWEI,#0BH
MOVQIANWEI,#0DH
ACALLDIS21
;
“Erro”或“sudu”和具体速度大值交替闪烁显示
FS12:
MOVR2,#01H;
CLRP1.5
ACALLDELAY2
SETBP1.5
DJNZR2,FLASH
SUBT2:
MOVTH1,#0B1H
MOVTL1,#0DFH
SETBTR1
POPPSW
POPACC
RETI
//里程显示控制子程序//
DISPLAYS:
CLRP1.6
ACALLJULI
MOVA,QSHU1
CJNEA,#02H,DIAOYONG
AJMPPANDY
DIAOYONG:
JNCPANDY1
AJMPBUDY
PANDY:
MOVA,QSHU0
CJNEA,#2CH,PANDY2
AJMPPANDY1
PANDY2:
JCBUDY
PANDY1:
MOVR6,#00h
MOVR7,#0AH
ACALLJULI2
ACALLBCDC
ACALLFENKAI
ACALLDELAY1
RET
BUDY:
MOVR7,#01h
ACALLJULI2
//速度显示控制子程序//
DISPLAYV:
SETBP1.6
ACALLSUDU
MOVXIAOSHU,#01H
//处理子程序1//
JULI:
PUSHPSW
PUSHACC
MOVR2,QSHU1
MOVR3,QSHU0
JNZGAO
CJNEA,#06H,PAN1
AJMPPAN2
PAN1:
JNCPAN2
AJMPCZ707
PAN2:
CJNEA,#38H,PAN3
AJMPGAO
PAN3:
JCCZB4
GAO:
AJMPCZ12
CZ707:
MOVR6,#07H
MOVR7,#07H
AJMPKAISHI
CZB4:
MOVR6,#00H
MOVR7,#0B4H
MOVXIAOSHU,#02H
CZ12:
MOVR7,#00H
MOVXIAOSHU,#03H
KAISHI为两字节乘两字节程序段
KAISHI:
MOVA,R3
MOVB,R7
MULAB
MOVR4,B
MOVR5,B
MOVB,R6
MULAAB
ADDA,R4
MOVR4,A
ADDCA,B
MULAB
ADDA,R4
MOVR3,A
RLCA
XCHA,R2
ADDA,R3
MOVA,R2
MOV50H,R2
MOV51H,R3
MOV52H,R4
MOV53H,R5
//处理里程子程序2//
Juli2:
MOVR2,50H
MOVR3,51H
MOVR4,52H
MOVR5,53H
DIVD11:
CLRC
SUBBA,R7
SUBBA,R6
JCDVD11
SETBOV
DVD111:
MOVB,#10H
DVD211:
MOVA,R5
MOVR5,A
MOVA,R4
MOVF0,C
MOVR1,A
ANLC,/F0
JCDVD311
MOVR2,A
MOVA,R1
INCR5
DVD311:
DJNZB,DVD211
CLROV
MOV30H,R2
MOV31H,R3
NOP
//十六进制转换乘BCD子程序//
BCDC:
MOVR6,30H
MOVR7,31H
MOVR2,#10H
HB322:
MOVA,R7
MOVR7,A
MOVA,R6
MOVR6,A
DAA
ADDCA,R4
ADDCA,R3
DJNZR2,HB322
MOV20H,R3
MOV21H,R4
MOV22H,R5