1. 急用!!!!!!基于单片机控制的车速里程表
图2所示是一种汽车转速里程表的电路原理图。这是一个典型的单片机最小应用系统。单片机AT89C2051以其低价、低功耗、可靠性高和易于编程等特点着称,X25045则是MCS-51系列单片机电路的一个辅助芯片,主要担当复位、电压检测、看门狗和EEPROM功能,该芯片的采用大大提高了系统的可靠性,减少了外围芯片数,可实现里程累计的掉电存储。LCM1010为十位八段式带背光液晶显示模块,采用三线串行接口,它具有功耗低和编程方便的特点。该显示共分两行显示,第一行6位显示累计里程,第二行4位(1位小数)用于显示小计里程。图中K1为小计里程清零键,R4用于调节液晶显示器的视角对比度。芯片X25045是Xicor公司推出的带有可编程μP 监控器的CMOS串行EEPROM,带有4096位,按512×8来组织。它具有4字节页写方式和10万次使用周期,数据可保存100年。为了保证累计里程单元的个位或小计单元的小数位可靠刷新,当这些单元接近极限使用周期时,可采取换页的办法来使这些数据移动到新单元以继续计数。图2 霍尔传感器发出的脉冲信号经过整形可分成两路,一路送到单片机的INT1端用于累计里程计数,另一路送到LM1819驱动器的转速信号输入端(10脚),然后由驱动电路根据输入信号的频率在2脚和12脚输出相应的正弦和余弦驱动信号,十字线圈产生的磁场共同作用于磁铁可使转轴组件偏转相应的角度。但调整时要注意,电容C3的大小会改变表针偏转的平滑性,C3越大,平滑性越好,但同时时间迟滞也会加大,而C3过小会使表针抖动;C4可用于调整电路的线性和滞后误差;R4的值可以改变表针的指示刻度点。5 结论 本设计以单片机AT89C2051来实现里程累计、小计、清零及存储,并以LM1819集成电路驱动十字线圈表头,从而实现了车速的指示。该设计方案成本低廉、指针稳定性好、响应速度快、抗震性强、可靠性和性价比都很高。经实际使用证明,该里程表完全可以取代传统的以软轴驱动的车速里程表。当然,这只是一种实现方案,也可以由单片机通过软件来驱动十字线圈表头,即由单片机分别控制表头的正弦线圈和余弦线圈而省去LM1819集成电路。对此,此处不再赘述。
2. 汽车里程表传感器模拟器电路图
汽车里程表传感器模拟器电路图如下参考:
3. 利用51单片机动态显示0-60秒表
#include<reg52.h>
unsigned int s;
unsigned char key;
sbit d1=P3^7;
void delay() //动态显示延时
{
int k;
for(k=0;k<100;k++);
}
void delay1() //去抖动延时
{
unsigned char code table[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
P2=table[s%10]; P3=0xf8; delay(); P3=0xf0;
P2=table[s/10%10]; P3=0xf4; delay(); P3=0xf0;
P2=table[s/100%10]; P3=0xf2; delay(); P3=0xf0;
P2=table[s/1000]; P3=0xf1; delay(); P3=0xf0;
}
void main()
{
TMOD = 0x01;
TH0 = (65536 - 10000) / 256;//初值,每10ms中断一次
TL0 = (65536 - 10000) % 256;
ET0=1;
EA=1;
while(1) {
delay1();
if(!d1) {
delay1();
if(!d1) { //去抖动
while(!d1) delay1();//等待释放
key++;
if(key == 4) key = 1;
}
}
if(key == 1) TR0 = 1;//开始计时
else if(key == 2) TR0 = 0;//停止
else s = 0;
}
}
void time0() interrupt 1 //内部中断
{
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256;
s++;
if(s == 10000) s = 0;
}
4. 51单片机自行车测速里程表上加一个燃烧卡路里功能可以实现吗用LCD1602液晶显示器,能把时间速度都显示
普通测速表,起测60码,规定距离为1公里。经过第一个参照物按下计时按钮,经过第二个参照物的时候按下暂停按钮,指针指到外圈的读数即为速度。
详细注解:
手表测速是手表外圈刻有500/400/350等依次减小的数字的计时表,这些代表的物理量为速度,单位为公里/小时;这个表圈称为TACHYMETER(测速计)。
手表测速的使用方法:
使用方法以在高速公路上行驶的车辆为例,因为高速公路上一般竖有距离指示标杆;当经过起始点时启动秒表,秒表针从12点开始计时,当移动1公里时候,停止计时,此刻针所指的数字就是前一公里的平均速度。
譬如在12点位置有60,因为一分钟走了1公里,那么速度就是60公里/小时。
表圈上数字对应的位置是怎么推算出来的呢?其实很简单。要知道500这个数字应该刻在那个位置?那么需要做个简单的除法;即演算在500公里/小时的速度下行驶1公里需要多少时间,单位为秒。
1小时=3600秒 ,那么500公里需要3600秒完成,根据等比原则,1公里需要的时间就是3600/500=7.2秒,所以500一定是刻在表盘的7.2秒处。同理,400应该刻在3600/400=9秒的地方,而100则刻在36秒的地方。
当时速低于60公里/小时的时候,测速计就不能直接使用了,除非增加低速度的刻度值
5. 基于单片机的速度里程表设计的速度里程数据处理编程,急急急
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCM_Data P0
#define Busy 0x80 //用于检测LCM状态字中的Busy标识
sbit LCM_RS = P1^0;
sbit LCM_RW = P1^1;//定义引脚
sbit LCM_E = P1^2;
uchar aa; /* 电机当前速度值 */
uint count,speed,distance;
void Disp_line1(void); //显示屏幕第一行
void Disp_line2(void); //显示屏幕第二行
void WriteDataLCM(uchar WDLCM);
void WriteCommandLCM(uchar WCLCM,BuysC);
uchar ReadStatusLCM(void);
void LCMInit(void);
void DisplayOneChar(uchar X, uchar Y, uchar DData);
void DisplayListChar(uchar X, uchar Y, uchar code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
void runtime();
void ScanKey();
void LedDisplay();
void main(void)
{
Delay400Ms(); //启动等待,等LCM讲入工作状态
LCMInit(); //LCM初始化
Delay5Ms(); //延时片刻(可不要)
EA=1; /* 开中断 */
ET1=1;
TR1=1;
EX0=1;//开外部中断0
IT0=1;//下降沿触发方式
while(1)
{
DisplayListChar(0,0,"DISTANCE:");
DisplayOneChar(9,0,distance/10000+0x30);
DisplayOneChar(10,0,distance/1000%10+0x30);
DisplayOneChar(11,0,distance/100%10+0x30);
DisplayOneChar(12,0,distance/10%10+0x30);
DisplayOneChar(13,0,distance%10+0x30);
DisplayOneChar(15,0,'M');
DisplayListChar(0,1,"SPEED:");
DisplayOneChar(6,1,speed/1000+0x30);
DisplayOneChar(7,1,speed/100%10+0x30);
DisplayOneChar(8,1,speed/10%10+0x30);
DisplayOneChar(9,1,speed%10+0x30);
DisplayListChar(11,1,"M/S");
}
}
6. 急!基于单片机的车速检测程序
电子车速里程表的单片机实现方案
本设计以单片机AT89C2051来实现里程累计、小计、清零及存储,并以LM1819集成电路驱动十字线圈表头,从而实现了车速的指示.该设计方案成本低廉、指针稳定性好、响应速度快、抗震性强、可靠性和性价比都很高.经实际使用证明,该里程表完全可以取代传统的以软轴驱动的车速里程表.当然,这只是一种实现方案,也可以由单片机通过软件来驱动十字线圈表头,即由单片机分别控制表头的正弦线圈和余弦线圈而省去LM1819集成电路.对此,此处不再赘述.
http://tech.ddvip.com/2008/07/121637529047261_2.html
7. 智能速度里程表的程序怎么写
摘要:给出了以AT89C2051为核心,利用单片机的运算和控制功能,并采用串口液晶显示模块实时显示所测速度和里程的速度里程表设计方案。该方案由于使用了串口液晶显示模块和E2PROM,以及高效快速算法,因而可在节约系统资源和简化程序设计的基础上保证测量精度和系统实时性。
1 系统概述
1.1 系统组成
本速度里程表由信号预处理电路、AT89C2051单片机、串口液晶显示电路、串口数据存储电路和系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。系统硬件框图如图1所示。信号预处理电路中的放大器用于对待测信号进行放大,以降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机接口的TTL信号;通过单片机的设置可使INT0引脚能够对内部定时器T0的工作进行控制,这样能精确地测出加到INT0引脚的正脉冲宽度(即测出脉冲信号的周期);速度显示部分采用串口液晶显示模块,所得的数据采用I2C总线�并通过E2PROM来存储,因而节省了所需单片机的口线
和外围器件,同时也简化了显示部分的软件编程系统软件包括单片机和液晶模块的初始化模块、液晶模块的写数据/命令子模块、周期测量模块、速度里程计算模块、数据存储模块、速度和里程显示数据转BCD码模块、显示数据消多余零模块、数据显示模块以及实时中断服务模块等。
1.2 系统工作原理
该设计能实时地将所测的速度显示出来,同时也能够累计显示总里程数。该速度里程表能将传感器输入到单片机的脉冲信号的宽度(传感器将车速转变成相应宽度的脉冲信号)实时地测量出来,然后通过单片机计算出速度和里程,再将所得的数据存储到串口数据存储器,并由串口液晶显示模块实时显示出所测速度。本设计用两个按键来控制显示速度或里程。考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形,然后再输入到单片机进行测速。单片机利用定时器T0的控制功能测出输入信号的周期后,再利用单片机的算术运算功能将周期转换成速度,同时每秒钟进行一次里程累计,从而计算出总里程。最后将得出的速度、里程值存储在E2PROM中,并根据两个按键的选择情况来显示速度或里程。为了方便计算要显示数据值的段码,可再将其转换成压缩的BCD码,然后通过查表将要显示的数据值中每一位的压缩BCD码转换成8段码送到显示缓冲区,最后经串口送至液晶显示模块以显示所测的速度或里程。
设计时,应综合考虑测速精度和系统反应时间。本设计用测量脉冲频率来计算速度,因而具有较高的测速精度。为了保证系统的实时性,系统的速度转换模块和显示数据转BCD码模块都采用快速算法。另外,还应尽量保证其它子模块在编程时的通用性和高效性。本设计的速度和里程值采用8位显示,并包含两个小数位。
2 系统硬件设计
2.1 信号预处理电路
它由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应。当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5V的正弦波和脉冲信号进行测量。预处理电路的第二级采用带施密特触发器的反相器CT74LS14来把放大器生成的单相脉冲转换成与COMS电平相兼容的方波信号�同时将输出信号加到单片机的P3.2口上。
2.2 单片机的选择
速度里程测量电路选用AT89C2051作为频率计的信号处理核心。AT89C2051包含2kB闪存、128B的RAM、15根I/O口线、2个16位定时计数器、5个向量二级中断结构和1个全双工的串行口,同时还具有加密阵列的二级程序存储器加锁功能。设计中用到了AT89C2051的T0、T1 定时器和INT0引脚,以及P1端口的6个口线。由于该单片机与89C51相兼容,因此在硬件电路设计和软件编程方面更加方便。考虑到AT89C2051本身固有的特点,设计时需注意以下几点:首先,它的程序存储器空间为2kB,因此所有的跳转和分支转移指令都要限制在这个范围内。其次,它没有MOVX指令,也就是说,它不支持外部存储器操作,这一点设计时一定要考虑到。此外,AT89C2051自身还有一些其它特点,譬如可以使用命令使其工作在低功耗模式等。单片机利用T0定时器和INT0引脚来测量输入方波信号的周期,而使用外部中断0来控制定时器T0是否开始定时。当定时器T0的运行控制位复位时,不管P3.2引脚是何值,定时器都不工作。只有当定时器T0的运行控制位置位后,才能根据P3.2引脚状态来决定定时器是否工作。当P3.2引脚出现高电平时,定时器T0开始定时;而在其出现低电平时,定时器T0停止工作,并将测量信号的周期保存在定时器的16位寄存器中。系统初始化时,可通过设置使T0 和T1定时器工作在模式1方式。T1定时器主要用于形成1秒钟定时信号,用以为测量里程提供时间条件。
2.3 液晶显示电路和数据存储电路
本设计的显示部分采用液晶显示模块LCM0825�该模块与单片机的接口电路如图3所示。LCM0825是8位段码式液晶显示模块,它内部集成有LCD控制器、LCD驱动器和RAM,因而可方便显示数据的编程。液晶显示模块采用3~4线串行数据输入,可直接与单片机接口。由于串行接口方式节省了所需的口线和系统资源,因而使系统具有较高的资源利用率。该模块可在2.7V~5.2V电压下工作,其低功耗及背光可调特性使得设计更具有经济性和通用性。LCM0825能够显示8位数据,每一个数据均以8段码的形式放在其内部显示RAM区,并用模块内RAM的两个存储地址来放置一个数据的8段码。8位数据共占用内部16个地址。每一个数据位的8段码存放形式及高低地址存放段码的顺序都和表1所列的第8位数据的8段码存放格式一样,只是段码的存放地址不同。所以,编程时一定要考虑数据的存放地址和形式。在使用该液晶显示模块时,VCC与VLCD之间可用一个50kΩ的电位器来调整背光。3 系统软件设计
3.1 数据处理过程
待测信号经预处理电路后加至单片机的P3.2(INT0)引脚可为单片机测量信号周期提供有效的输入信号。单片机通过检测P3.2引脚电平来决定是否启动测量周期程序。当该引脚为高电平时�系统处于等待状态,要一直到该引脚出现低电平时才开始测周期。测量时�首先将零赋给THO、TL0两个寄存器,以将定时器T0的运行控制位TR0置位,同时也将ET0置位以允许定时器T0中断。然后再判断P3.2引脚是否还为低电平,如为低电平则等待,直到出现高电平再开始判断P3.2引脚是否为低电平,当其不是低电平时再等待。一旦出现低电平,则立即复位TR0以终止定时器,以结束测周期程序。测周期过程中可能会发生定时器T0的中断,每发生一次中断则将R0寄存器加一,因此R0实际上是周期值的高字节。测出的周期值存储在R0、TH0、TL0三个寄存器中,然后将其转换成速度。速度是用车轮的周长除以脉冲周期得到的。由于所测周期的单位是μs,因此在相除转换时应将被除数扩大106倍,以保证得出正确的速度。每秒进行一次里程数累加时,可用当前的速度值加上一秒前的里程数得出当前的总里程数,得出的速度和总里程值放到E2PROM中。通过k1、k2键可显示速度或里程值,k1键为速度键,k2键为里程键,两个键可以随时设置。要显示的速度或里程放到R1、R2、R3三个寄存器后即可调用转换BCD代码模块,以将数据值转换成压缩的BCD代码并显示处理。考虑到对响应时间的要求,BCD代码模块采用快速算法。数据转变成相应的压缩BCD代码后,可调用显示消多余零和显示数据存储模块,并将要显示的数据值通过查表转换成相应数据的8段码放到显示缓冲区以备显示。当然,编程时要把十进制数据的相应8段码放在表格中,这样才能进行查表以得到相应数值的段码。此过程的另一个重要目的是消除最高有效位前面的多余零,以使多余零的段码处于不显示状态,从而保证数据以正常的格式显示出来。最后,将显示缓冲区的8位8段码经串口送至液晶显示模块进行显示。
本系统软件采用模块化设计方法。整个系统由初始化模块、周期测量模块、速度转换模块、里程计算和存储模块、数据转BCD码模块、显示数据处理模块、数据显示模块、定时器中断服务模块以及其它功能模块组成,图4给出了其软件框图。上电后,首先进入系统初始化模块,此后系统软件将开始运行,以实时地将所测数值显示在液晶模块上。
3.3 液晶显示模块的初始化
LCM0825是串行8位8段液晶显示模块。使用时,要在上电后对该模块进行初始化。在初始化之前,应延时200ms以上再送命令。它的初始化工作过程如下:首先定义液晶模块(当其命令代码为:00101001),其次定义振荡器方式(当其命令代码为00011000时,将模块定义为内部RC振荡方式,命令代码为00010100时,定义为外部晶体振荡方式)。然后分别用命令代码00000001和00000011开振荡器和开显示器。以上命令送入后,便可以在需要显示数据时将相应的段码直接送入模块内部的显示RAM中。在送显示数据的段码数据时,要考虑到显示RAM 的高和低地址所对应的数据段码的存放形式。其第8位数据的段码与LCM0825内部的RAM地址的对应关系见表1。以后随地址的增加依次存放第7位至第1位数据段码。为了正确地显示数据,应使要显示的8位字符在显示屏幕中为左起第一位,右止第8位。
图5
另外,写命令和写数据程序应分别编写,因为它们的命令格式及时序不同,见图5。
由时序图可见,编写传输子程序时,所传数据的高位先移入模块,否则模块不能正常工作或显示。同样,为了能正确读/写命令或数据,必须在时序中加入相应的延时;此外,为保证系统的低功耗,每次读/写命令或数据之后,都应将CS、RD、WR、DATA 置高电平。
4 结束语
本文介绍了一种基于单片机AT89C2051的速度里程表的设计方法。由于该方案中使用了串口段码液晶显示模块E2PROM储存器,因而节省了硬件资源,提高了系统性价比。同时,也有益于在此电路基础上利用单片机的资源扩展其它功能。