资源描述
太原工业学院
本 科 课 程 设 计 (论 文)
自行车里程表
题 目 __________________________________
__________________________________
指引教师__________________________
辅导教师__________________________
学生姓名__________________________
学生学号__________________________
081
电子信息科学与技术
自动化与电子学院
_______________________________院(部)____________________________专业________________班
12
27
______年 ___月 ___日
自行车里程表
摘 要:本文简介速度与里程表设计以单片机最小系统和霍尔传感器为核心。传感器将不同车速转变成不同频率脉冲信号输入到单片机进行控制与计算,再采用LED模块进行显示,使得电动自行车速度与里程数据能直观显示给使用者。
本系统由霍尔传感器、RC滤波电路、单片机AT89S51、系统化LED显示模块、数据存储电路和键盘控制构成。其中霍尔传感器包括信号放大和波形整形。对待测信号进行放大目是减少对待测信号幅度规定;波形变换和波形整形电路则用来将放大信号转换成可与单片机相连TTL信号;通过单片机设立可使内部定期器T1对脉冲输入引脚T0进行控制,这样能精准地算出加到T0引脚单位时间内检测到脉冲数;设计中速度显示采用LED模块,通过速度换算得来里程数采用I2C总线并通过E2PROM来存储,既节约了所需单片机口线和外围器件,同步也简化了显示某些软件编程
本文先对里程表设计当中所需设备作了详细简介,对设计中存在问题进行了阐明;而后对硬件和软件某些设计和实现作了认真分析;然后给出了系统建模过程及相应系统模型,在此基本上进行了控制仿真,并对仿真效果进行了比较。
本里程表设计具备构造简朴,成本低廉,显示清晰,稳定可靠等长处。并且可进行扩充,加入时速表功能,更加以便理解你当前所处状况。
核心词:单片机最小系统,LED数码管,霍尔传感器,RC滤波器,EEPROM存储器
目 录
第一章 概 述 4
第二章 硬件设计 4
2.1系统构成构造框图 5
2.2详细硬件电路及工作原理 5
2.3 AT89C2051单片机简介 6
2.3.1芯片概述 6
2.4其她外围硬件电路 7
2.4.1电源电路 7
2.4.2霍尔传感器 8
2.4.3 4位串行静态显示电路 8
第三章 软件设计 9
3.1主程序设计 9
3.2 外中断0和 T1定期溢出中断服务子程序设计 10
3.3 速度/里程显示控制子程序设计 10
3.4系统完整源程序 11
参照文献 11
附录 12
附录1 整体电路图 12
附录2 源程序 13
道谢 19
总结 19
第一章 概述
本设计简介速度与里程表设计以单片机和光电传感器为核心。传感器将不同车速转变成不同频率脉冲信号输入到单片机进行控制与计算,再采用LED模块进行显示,使得电动自行车速度与里程数据能直接显示给使用者。该设计能实时地将所测速度与合计里程数显示出来,重要是将传感器输入到单片机脉冲信号频率(传感器将不同车速转变成不同频率脉冲信号)实时地测量出来,考虑到信号衰减、干扰等影响,在信号送入单片机前应对其进行放大整形,然后通过单片机计算出速度和里程,再将所得数据存储到串口数据存储器,并由LED显示模块交替显示所测速度与里程。本设计里程数算法是一种大概算法(假设在一定期间内自行车是匀速行进,平均速度与时间乘积即为里程数)。
本系统由信号预解决电路、单片机AT89C2051、系统化LED显示模块、串口数据存储电路和系统软件构成。其中信号预解决电路包括信号放大、波形变换和波形整形。对待测信号进行放大目是减少对待测信号幅度规定;波形变换和波形整形电路则用来将放大信号转换成可与单片机相连TTL信号;通过单片机设立可使内部定期器T1对脉冲输入引脚T0进行控制,这样能精准地算出加到T0引脚单位时间内检测到脉冲数;设计中速度显示采用LED模块,通过速度换算得来里程数采用I2C总线并通过E2PROM来存储,既节约了所需单片机口线和外围器件,同步也简化了显示某些软件编程。
设计时,应综合考虑测速精度和系统反映时间。本设计用测量脉冲频率来计算速度,因而具备较高测速精度。在计算里程时取了自行车抱负状态。实际中,误差控制在几米之内,相对于整个里程来说不是很大。为了保证系统实时性,系统速度转换模块和显示数据转BCD码模块都采用迅速算法。此外,还应尽量保证其她子模块在编程时通用性和高效性。本设计速度和里程值采用6位显示,并包括两个小数位。
第二章 硬件设计
2.1系统构成构造框图
依照功能规定,一方面要进行是总体方案设计于论证,构思一种符合实际规定系统,如图2.1所示。
系统由测量模块、功能选取模块、显示模块、供电模块和单片机小系统构成。功能选取后启动测量,大片及实时采集、解决后显示。
霍尔传感器
开关功能选取
显 示
功能批示灯
2051 单 片 机
稳压器
+5V电池组
充电电路
发电机
图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.3 AT89C2051单片机简介
2.3.1芯片概述
AT89C2051是一种低电压,高性能CMOS 8位单片机,片内含2k bytes可重复擦写只读Flash程序存储器和128 bytes随机存取数据存储器(RAM),器件采用ATMEL公司高密度、非易失性存储技术生产,兼容原则MCS-51指令系统,片内置通用8位中央解决器和Flash存储单元,功能强大AT89C2051单片机可为您提供许多高性价比应用场合。
AT89C2051是一种功能强大单片机,但它只有20个引脚,15个双向输入/输出(I/O)端口,其中P1是一种完整8位双向I/O口,两个外中断口,两个16位可编程定期计数器,两个全双向串行通信口,一种模仿比较放大器。同步AT89C2051时钟频率可觉得零,即具备可用软件设立睡眠省电功能,系统唤醒方式有RAM、定期/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运营。管角配备图2.3所示。
图2.3 2051引脚图
重要功能简介
(1) 兼容MCS51指令系统
(2) 15个双向I/O口
(3) 两个16位可编程定期/计数器
(4) 时钟频率0-24MHz
(5) 两个外部中断源
(6) 可直接驱动LED
(7) 低功耗睡眠功能
(8) 可编程UARL通道
(9) 2k可重复擦写(>1000次)Flash ROM
(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.3 4位串行静态显示电路
当单片机UART口部进行串行通信时,可设立其工作于同步移位寄存器方式0,以输出显示信息,实现n位LED静态显示,这样做只占用了很少I/O口线。系统中,4各共阳极得LED数码管和4片 74LS164构成4位数字显示电路,74LS164将串行输入显示信息转换成并行输出,驱动数码管显示。74LS164在低电平输出时容许通过电流为8mA,故不必添加驱动电路即可获取抱负亮度。与动态扫描方式相比较,该方式不必CPU做不断扫描,频繁地为显示服务,节约了CPU时间,软件世界也比较简朴。显示电路如图2.5所示。
图2.5 4位串行静态显示电路原理图
第三章 软件设计
3.1主程序设计
主程序流程图见图3.1。
开机后系统自检,正常时LED显示“——”,同步等待自行车行驶。轮子开始转圈后,系统进行记录和计算,并依照速度/里程开关选取显示数值。
N
系统初始化
主程序
P3.2=0?
Y
开始初始显示
P1.0=1?
N
显示里程
显示速度
Y
图3.1 主程序流程图
3.2 外中断0和 T1定期溢出中断服务子程序设计
外中断0服务子程序用于对输入脉冲个数即轮子转圈次数计数。每计数一次,系统保存圈数值同步保存定期器计时值,并依照功能开核心实时显示相应值。
T1定期溢出中断服务子程序用于实时记录记一次数经历时间。T1定期基准时间设为20ms,假设记一次数中T1中断次数为C,1.8/(20C)ms即当前自行车行驶速度。
用内部定期加外中断办法实现了对输入脉冲信号测量,这是本系统最核心程序某些。
3.3 速度/里程显示控制子程序设计
最大容许速度由限速切换开关S4控制,超速(>20千米/小时)使单片机P1.7输出低电平报警。若行驶速度太慢(<0.5m/s),灯D3不断闪烁,LED交替显示“Erro”、“Sudu”和当前速度值,以引起骑车者注意。
速度显示值单位有km/h和每m/s,由功能键S5切换。对于里程值,为了较精准地显示,程序设立了不同里程范畴时所显示小数点后数字位数:里程为10m~99m,显示2位小数;里程为100m~999m,显示1位小数。
3.4系统完整源程序
如附录2
参照文献:[1] 张毅坤,陈善久.单片微型计算机原理及应用.西安:西安电子科技大学出版社,.
[2] 张友德,赵志英,徐时亮.单片微机原理应用与实验.上海:复旦大学出版社,.
[3] 伟福LabP系列单片机仿真实验系统阐明书.
[4] 郑学坚 周斌 微型计算机原理和应用 北京:清华大学出版社
[5] 陈为 单片机原理
附录
附录1 整体电路图
附录2 源程序
自行车里程表
/* 各引脚用途及系统功能阐明
P1.0 速度和里程切换:1显示速度,0显示里程
P1.1 限速度切换:1 10m/s;0 8m/s
P1.2 km/h和 m/s切换:
P1.4 批示显示屏单位为km/h
P1.5 速度太慢灯闪烁警告
P1.6 0时灯亮,批示里程;为以灯不亮,显示速度
P1.7 超速度报警
距离最大值为9999m
6H圈、 38H圈、 22C圈、 15B6圈
0m=<S<10m 10m=<S<100m 100m=<S<1000m 1000m=<S<10000m
周长0707H 00B4H 0012H 0012H/0AH
//变量定义//
XIAOSHU EDU 57H ; 小数点位数单元
GEWEI EDU 40H ; 显示单元
SHIWEI EDU 41H ;
BAIWEI EDU 42H ;
QIANWEI EDU 43H ;
QSHU1 EDU 43H ;
QSHU0 EDU 61H ; 自行车圈数存储单元高位
QSHU0 EDU 62H ; 自行车圈数存储单元低位
SJIAN0 EDU 6CH ; T1定期溢出存储单元高位
SJIAN1 EDU 6DH ; T1定期溢出存储单元低位
//主程序//
ORG 000H
AJMP START
ORG 0003H
AJMP INTEX0
ORG 001BH
AJMP IT11
ORG 0030H
START: MOV SP,#75H ; 设立堆栈指针
MOV SCON,#00H ; 串行口工作方式
MOV GEWEI,#0AH ; 开机显示
MOV SHIWEI,#0AH
MOV BAIWEI,#0AH
MOV QIANWEI,#0AH
ACALL DIS11
SETB P3.2 ; 外中断0为输入查询方式
JB P3.2 ; 等待第一种有效脉冲(下降沿)到来
ACALL CLEARRAM ; 调用系统准备显示初始化子程序
STLOOP: JNB P1.0,ST1 ; p1.0=0,显示速度
ACALL DISPLAYS ; P1.0=1,显示里程
SJMP STLOOP ; 循环显示
ST1: ACALL DISPLAYV ; 第一种下降沿来后显示速度
AJMP STLOOP ; 循环显示
//系统准备显示初始化子程序//
CLEARRAM:MOV TMOD,#10H ; T1用于定期,工作于模式1
MOV TH1,#0B1H ; 定期20ms初始值
SETB P1.2 ; P1.2-P1.0为输入
SETB P1.1
SERB P1.0
CLR A ; 相应内RAM空间清零
MOV 21H,A ; 速度/里程BCD码高位清0
MOV 22H,A ; 速度/里程BCD码低位清0
MOV QSHU1,A ; 圈数空间清0
MOV QSHU0,A
MOV 6AH,A ; T1溢出次数暂存单元高位清0
MOV 6BH,A ; T1溢出次数暂存单元低位清0
MOV SJIAN0,A ; 计数器空间清零
MOV SJIAN1,A
MOV XIAOSHU,#01H ; 默认显示3位小数
SETB IT0 ; 设立外中断为边沿触发方式
SETB PT1 ; T1优先级最高
SETB EA ; 开总中断
SETB ET1 ; 开T1中断
SETB EX0 ; 开外0中断
//外中断0服务子程序//
INTEX0: PUSH ACC ; 累加器堆栈保护
PUSH PSW ; 状态字堆栈保护
INC QSHU0 ; 圈加1
SETB P1.7 ; 置1不报警
CLR A ; 清A
CJNE A,QSHU0,SUBX0 ; 计数没溢出转SUBX0
INC QSHU1 ; 溢出进位(61H加1)
SUBX0: CLR TR1 ; 关计时,读轮子转一圈时间
MOV 6AH,SJIAN0 ; 时间暂存
MOV 6BH,SJIAN1
MOV TH1,#0B1H ; 定期器T1重付初值
MOV TL1,#0DFH
CLR A
MOV SJIAN0,A ; 清计时空间
MOV SJIAN1,A
SETB TR1 ; 重新计时
POP PSW ; 状态字恢复
POP ACC ; 累加器恢复
RETI ; 中断返回
//T1定期器溢出时中断服务子程序//
IT11: PUSH ACC ; 堆栈保护
PUSH PSW
INC SJIAN1 ; 定期20毫秒溢出次数
MOV A,SJIAN1 ; 读一圈定期次数
CJNE A,#0BBH,SUBT1 ; 速度太慢(<0.5),解决
AJMP SUBT2
SUBT1: JC SUBT2
INC 69H ; (69H)为奇数,LED显示“Erro”
MOV A,69H ; 再显示详细速度值
JB ACC.0 ERRO ; (69H)为偶数,LED显示“Sudu”
MOV GEWEI,#05H ; 再显示详细速度值
MOV SHIWEI,#0BH
MOV BAIWEI,#0DH
MOV QIANWEI,#0BH
MOV XIAOSHU,#0BH
ACALL DIS11
SJMP FS12
ERRO: MOV GEWEI,#0CH
MOV SHIWEI,#OBH
MOV BAIWEI,#0BH
MOV QIANWEI,#0DH
ACALL DIS21
;“Erro”或“sudu”和详细速度大值交替闪烁显示
FS12: MOV R2,#01H ;
CLR P1.5
ACALL DELAY2
SETB P1.5
ACALL DELAY2
DJNZ R2,FLASH
SUBT2: MOV TH1,#0B1H
MOV TL1,#0DFH
SETB TR1
POP PSW
POP ACC
RETI
//里程显示控制子程序//
DISPLAYS:CLR P1.6
ACALL JULI
MOV A,QSHU1
CJNE A,#02H,DIAOYONG
AJMP PANDY
DIAOYONG:JNC PANDY1
AJMP BUDY
PANDY: MOV A,QSHU0
CJNE A,#2CH,PANDY2
AJMP PANDY1
PANDY2: JC BUDY
PANDY1: MOV R6,#00h
MOV R7,#0AH
ACALL JULI2
ACALL BCDC
ACALL FENKAI
ACALL DIS21
ACALL DELAY1
RET
BUDY: MOV R6,#00h
MOV R7,#01h
ACALL JULI2
ACALL BCDC
ACALL FENKAI
ACALL DIS11
ACALL DELAY1
ACALL DELAY1
RET
//速度显示控制子程序//
DISPLAYV:SETB P1.6
ACALL SUDU
ACALL BCDC
ACALL FENKAI
MOV XIAOSHU,#01H
RET
//解决子程序1//
JULI: PUSH PSW
PUSH ACC
MOV R2,QSHU1
MOV R3,QSHU0
JNZ GAO
MOV A,QSHU0
CJNE A,#06H,PAN1
AJMP PAN2
PAN1: JNC PAN2
AJMP CZ707
PAN2: MOV A,QSHU0
CJNE A,#38H,PAN3
AJMP GAO
PAN3: JC CZB4
GAO: AJMP CZ12
CZ707: MOV R6,#07H
MOV R7,#07H
MOV XIAOSHU,#01H
AJMP KAISHI
CZB4: MOV R6,#00H
MOV R7,#0B4H
MOV XIAOSHU,#02H
AJMP KAISHI
CZ12: MOV R6,#00H
MOV R7,#00H
MOV XIAOSHU,#03H
KAISHI为两字节乘两字节程序段
KAISHI: MOV A,R3
MOV B,R7
MUL AB
MOV R4,B
MOV R5,B
MOV A,R3
MOV B,R6
MUL AAB
ADD A,R4
MOV R4,A
CLR A
ADDC A,B
MOV B,R7
MUL AB
ADD A,R4
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2
MOV B,R6
MUL AB
ADD A,R3
MOV R3,A
MOV A,R2
ADDC A,B
MOV 50H,R2
MOV 51H,R3
MOV 52H,R4
MOV 53H,R5
POP PSW
POP ACC
RET
//解决里程子程序2//
Juli2: PUSH PSW
PUSH ACC
MOV R2,50H
MOV R3,51H
MOV R4,52H
MOV R5,53H
DIVD11: CLR C
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD11
SETB OV
RET
DVD111: MOV B,#10H
DVD211: CLR C
MOV A,R5
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
XCH A,R2
MOV F0,C
CLR C
SUBB A,R7
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0
JC DVD311
MOV R2,A
MOV A,R1
MOV R3,A
INC R5
DVD311: DJNZ B,DVD211
MOV A,R4
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV
MOV 30H,R2
MOV 31H,R3
POP ACC
POP PSW
NOP
RET
//十六进制转换乘BCD子程序//
BCDC: PUSH ACC
PUSH PSW
MOV R6,30H
MOV R7,31H
CLR A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H
HB322: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
DJNZ R2,HB322
MOV 20H,R3
MOV 21H,R4
MOV 22H,R5
POP PSW
POP ACC
NOP
RET
//算速度十六进制值子程序//
SUDU: PUSH PSW
PUSH ACC
JB P1.2,KM
SJMP JUBU
KM: MOV R2,#00H
MOV R3,#04H
MOV R4,#0F1H
MOV R5,#0A0H
CLR P1.4
SJMP QUANJU
JUBU: MOV R2,#00H
MOV R3,#001H
MOV R4,#05FH
MOV R5,#090H
CLR P1.4
QUANJU: MOV A,6BH
JB P1.1,XIAN10
CJNE A,#0BH,BUXIANG
SJMP JC0
XIAN10: CJNE A,#09H,BUXIANG
SJMP JC0
BUXIANG:JC JC0
SJMP BUJG
JC0: MOV A,6AH
CJNE A,#00H,BUJG
AJMP JIANGGAO
JIANGGAO:CLR P1.7
MOV GEWEI,#0CH
MOV SHIWEI,#0
展开阅读全文