#基于单片机的电动车里程表设计
- 格式:doc
- 大小:107.00 KB
- 文档页数:19
0
《基于单片机的电动车里程表设计》
目录
引言………………………………………………………………………1
1.总体设计………………………………………………………………2
2.设计任务及要求…………………………………………………2
3.电路原理………………………………………………………2
4.硬件系统模块…………………………………………………………3
4.1芯片的选择…………………………………………………………6
4.2结构框图……………………………………………………7
5.软件系统设计………………………………………………………7
5.1控制系统源程序………………………………11
6.调试………………………………13
7.参考文献……………………………13
引言
里程表广泛使用于各类机车,传统的机械式里程表虽然稳定可靠,但功能
1
单一、易受磨损。随着电子技术的迅猛发展,电子式里程表得以广泛使用,现
在很多轿车仪表已经使用电子车速里程表,从保护环境和经济条件许可等因素
综合来看,电动自行车目前乃至今后都有着广阔的发展空间。目前市面上电动
自行车的速度表和里程表都是机械的,看起来不够直观和方便。如果能用液晶
显示屏直接显示出来里程数和速度值,就可节省用户的时间及精力处理自行车
行进过程中的突发事件。
本设计介绍一种基于单片机的智能电子里程表。该电子式里程表是一种数
字式仪表,主要由车速表和里程表两部分组成,其传感器采用无接触测量的光
电传感器。传感器将不同车速转变成的不同频率的脉冲信号输入到单片机进行
控制和计算,再采用液晶显示器模块进行显示,使得电动自行车的速度和里程
数据能直观的显示给使用者。它不仅可显示车辆行驶的总里程,还可显示当前
车速,以及实现超速报警等功能,并具有较强的再开发能力。它的实现方式是,
通过安装在汽车转轴上的测量盘,用光电式转速传感器检测转速的脉冲信息,
在脉冲状态下,将转速的变化转换成光通量的变化,再通过光电转换元件将光
通量的变化转换成电量的变化,接着通过频率测量电路将脉冲信号输入到单片
机中,然后依据电量和转速的函数关系实现转速测量,再通过计算,从而得出
里程、车速的信息,并由液晶显示器显示出来。
一、设计任务及要求
以AT89C51单片机为核心,采用霍尔传感器,实现对自行车行驶里程、速
度的测量,并能选择显示自行车行驶里程值和当前速度。可以实现对自行车车
轮大小的设置等。自行车超过一定限速时可以进行声光报警提示。
2
关键词:AT89C51单片机;光电传感器;液晶显示器;存储器
二、电路原理
T0用于对轮子圈数的计数输入,轮子每转一个间隔(即假设的每个间隔0.1
米),霍尔传感器输出一个低电平脉冲。T0就计数一次,如果计够1000次(即
0.1Km)就送液晶显示屏;T1设置为独立的计数器,当T1定时1秒到来时进入
中段程序,中断程序中关闭计数器T0,读出它记脉冲的个数n,用n乘以0.1
即此时车的速度(以为是每一秒读一次),将此时的速度送至液晶并显示出当
前的速度值,电路如图1所示。P0口用于液晶的描输出。P2.0口和P2.1口用
于控制液晶的写命令和写数据操作,P2.2和P2.3口分别用于显示当前车行驶
速度是否超过设定值(当绿灯亮时表示车速正常,当绿灯灭,红灯一闪一闪时
表示车速超过设定值),P3.4(即T0)口用于接收由基尔霍夫传感器经信号处
理电路处理后的脉冲个数。根据它每秒所计脉冲个数计算车当前速度和车行驶
的里程。
3
三、硬件系统设计
以AT89C51单片机为核心,A44E霍尔传感器测转数,实现对自行车里程、
速度的测量统计,并将自行车的里程数及速度用液晶显示屏实时显示。利用霍
尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经
过处理进行编程。
1、芯片的选择
AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes
的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储
器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容
标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功
能强大的AT89C51单片机可为您提供许多较复杂系统控制使用场合。
AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内
含2个外中断口,2个16位可编程定时计数器,1个全双工串行通信口,2
个读写口线,AT89C51可以按照常规方法进行编程,但不可以在线编程(S系
列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,
特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C51有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不
同产品的需求。
功能特性
4
AT89C51提供以下标准功能:8字节FLASH闪速存储器,256字竹内
部RAM , 32个I/O口线,2个16 位定时/计数器,一个6向量两级中断结构,
一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89c51可降至OHz
的静态逻辑操作,并支持两种软件可选的节电上作模式。空闲方式停止CPU 的
工作,但允许RAM,定时/计数器。串行通信口及中断系统继续工作。掉电方
式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一
个硬件复位。
2、结构框图
结构框图
指示灯部分功能:显示车速是否正常或超过设定值。
里程、速度测量电路部分功能:速度及里程传感器采用霍尔传元件,实现对自
行车里程及速度的计算。
显示部分功能:速度、里程用液晶显示屏动态扫描显示,由P0口送出段码和
89C51
显示电路
指示灯电路
报警电路
里程、速度
测量电路
5
位选信号。
四、软件系统设计
1、初始化程序:在本系统初始化程序中,主要完成以下工作:初始化液晶(即
写1604的驱动程序);将T0设置为计数器;将T1设置为定时器。开T0,T1。
2、主程序:主程序根据1秒钟T0所计的脉冲个数计算出车当前的速度和
里程。
3、里程计数程序(T0计数程序):T0计数器用于对输入的圈脉冲进行计
数,为十六进制计数器。60H为低位,62H为高位。每秒钟读取它所计脉冲
的个数,当它所计脉冲个数累计到1000次时,让液晶显示一次里程。
4、T1定时服务程序:T1定时为1秒进一次中断程序,中断程序中执行关
计数器T0,读T0每秒中所计脉冲的个数,根据个数算出速度,并累加里程
5、显示子程序:当显示里程时, 先要对里程累计的数据进行判断,当计
够1000次时总里程加1(km)。当要显示速率时,每秒显示一次,即每秒读
一次T0所计的脉冲个数,根据此个数乘以车轮每2个小孔的最小间距0.1
米,即得车当前的速度
五、控制系统源程序:
#include
#define uchar unsigned char
6
#define uint unsigned int
uchar code cs[]="SPEED: 00.0 m/s";
uchar code lc[]="TOTAL: 00000.0Km";
uchar code ts[]="Pleasant Journey";
sbit RS=P2^0;
sbit E=P2^1;
sbit D=P1^0;
sbit LD=P2^2;
sbit HD=P2^3;
uchar num,count,timecount,T0count,miao,fen,shi;
uint total,num1,num2,Gtotal,Ztotal,Dtotal=0,speed;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
7
for(y=110;y>0;y--);
}
void write_com(uchar _com)
{
RS=0;
P0=_com;
delay(1);
E=1;
delay(2);
E=0;
}
void write_data(uchar _data)
{
RS=1;
P0=_data;
8
delay(1);
E=1;
delay(2);
E=0;
}
void init_LCD()//16*4液晶
{
E=0;
write_com(0x38);//设置显示模式
write_com(0x0c);//开显示,不显示光标,不闪烁
write_com(0x06);//光标自动加1,整屏不移动
write_com(0x01);//清屏
write_com(0x80);//设置数据指针
for(num=0;num<16;num++)
{
9
write_data(cs[num]);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(lc[num]);
}
write_com(0x80+0x10);
for(num=0;num<16;num++)
{
write_data(ts[num]);
}
}
void display_speed(uchar add,uchar dat) //显示速度函数
{