电动车速度里程表付C程序课程设计报告讲解.docx

上传人:b****2 文档编号:11750989 上传时间:2023-06-02 格式:DOCX 页数:15 大小:314.65KB
下载 相关 举报
电动车速度里程表付C程序课程设计报告讲解.docx_第1页
第1页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第2页
第2页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第3页
第3页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第4页
第4页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第5页
第5页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第6页
第6页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第7页
第7页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第8页
第8页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第9页
第9页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第10页
第10页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第11页
第11页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第12页
第12页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第13页
第13页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第14页
第14页 / 共15页
电动车速度里程表付C程序课程设计报告讲解.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

电动车速度里程表付C程序课程设计报告讲解.docx

《电动车速度里程表付C程序课程设计报告讲解.docx》由会员分享,可在线阅读,更多相关《电动车速度里程表付C程序课程设计报告讲解.docx(15页珍藏版)》请在冰点文库上搜索。

电动车速度里程表付C程序课程设计报告讲解.docx

电动车速度里程表付C程序课程设计报告讲解

 

专业方向模块综合设计

 

课题:

电动车速度测量显示仪

 

班级测控1082

学生姓名马秀梅学号1081203212

指导教师张青春李洪海

 

淮阴工学院电子与电气工程学院

1、设计内容及要求

1.检测并显示电动自行车实时速度

2.检测、显示并累计电动自行车行驶里程

3.技术参数

a电动车最高速度:

50km/h

b电动车轮胎直径:

14英寸

c电动车电池电压:

24V

d检测精度:

±1%

e显示:

8位LED

4.设计要求

(1)电路图

(2)程序清单

(3)运行结果

2、方案设计与讨论

1.速度测量原理

测量一定时间间隔T内自行车转过的圈数Q。

假设车轮的周长为L,则速度V=Q*L/T

2.开关型霍尔传感器

霍尔传感器是利用霍尔效应把磁输入信号转换成电信号的器件。

把开关型霍尔传感器安装在自行车贴近车轮的支架上,磁钢安装在辐条上,当磁钢靠近霍尔传感器的时候,传感器输出一个无抖动的低电平,单片机根据此信号可计算里程、速度等。

霍尔传感器的优点是稳定和安装简易,缺点是成本较高。

本设计采用开关型霍尔传感器,但由于实验室设计所限,实际测速时并未采用,而是直接从信号发生器中产生低频脉冲代替霍尔传感器向单片机输入脉冲信号,从而显示相应的速度。

3.LED八段数码管显示

8位LED显示。

其中低3位显示速度,要求保留1位小数。

高5位显示里程,同样要求保留1位小数。

速度即时显示,最大显示位35.0,里程每走100米计数一次,最高显示9999.9。

3、系统概述及工作原理

1.本系统由信号预处理电路、单片机8051F410、系统化LED显示模块、串口数据存储电路和系统软件组成。

其中信号处理电路包含信号放大、波形变换和波形整形、对待测信号进行放大的目的是降低对待侧信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机相连的TTL信号;通过单片机的设置可使内部定时器T0对脉冲输入引脚进行控制,这样能精确地算出加到引脚的单位时间内检测到的脉冲数;设计中速度显示采用LED模块,通过速度换算得来的里程数采用I2C总线并通过E2PROM来存储,既节省了所需单片机的口线和外围器件,同时也简化了显示部分的软件编程。

流程图

系统软件包括单片机和LED显示模块的初始化模块、速度里程技术模块、速度显示数据转BCD码模块、演示模块、数据显示模块以及及时终端服务模块等。

2.该设计能实时地将所测的速度显示出来,该速度里程表能将传感器输入到单片机的脉冲信号的频率实时地测量出来,并由串口晶体管显示模块实时显示。

单片机利用系统时钟的计时中断功能,并利用定时器T0的计数脉冲,然后通过计算在晶体管上即时显示。

为了方便计算要显示数据段码,可再将其转换成压缩BCD码,然后通过查表将要显示的数据值中每一位的压缩BCD码转换成8段码送到显示缓冲区,最后经串口送至晶体管显示模块显示所测的速度或里程。

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

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

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

另外,还应尽量保证其他子模块在编程时的通用性和高效性。

本设计的速度和里程分别采用3位和5位数码显示。

4、系统硬件设计

1.410单片机实验板

C8051F410原理框图

C8051F410单片机实验板原理图

2.霍尔传感器速度检测电路

霍尔检测电路

3.5v降压电路

由于自行车提供的电压是24V直流电压,单片机供电电压为5v。

故需要给电路提供5v的降压电路。

本设计采用LM2576S-ADJ集成块降压电路:

LM2576降压集成块

5、系统的软件设计

系统软件框图

如图所示,本系统软件采用模块化设计方法。

整个系统由初始化模块、频率测量模块、速度,里程计算模块、数据转BCD码模块、速度显示模块、里程显示模块、数据存储,读取模块、定时器中断服务模块以及其他功能模块组成。

系统软件框图

6、心得体会

本设计以8051F410单片机为核心,通过霍尔传感器来检测电动车的运转情况进而实现电动自行车的速度,里程的计算及里程的累计,存储,最后用8位的LED能直观的将速度与里程显示给用户,并且在速度高于一定的值时LED可自动关掉,从而达到智能速度里程表。

在此课程设计之前,我们都怀着一种好奇而又焦急的心情,急切的想知道做单片机课程设计是多么有意义且有用的。

所以我们每个人都积极主动地投入的设计之中,在两个周的时间内我们要完成的工作看起来很少,但是老师说不容乐观。

在组长的带领下我们认真的走好每一步。

其间的欢欣与苦楚这里我就不在此叙述了,我们真的都学到了很多东西,知道了知识的重要性,为什么高科技才具有价值,因为付出的很多很多。

我在此首先要感谢张亚华老师,是他在我们一筹莫展的时候给了我们提醒,致使我们顺利地完成了本课程设计。

同时感谢设计过程中组员们的相互配合及鼓励,使我们坚决的走下去......

7、参考文献

[1]《单片机原理及应用》夏路易主编电子工业出版社

[2]C8051F410/1/2/3混合信号ISPFLASH微控制器

●网站:

8、附录

1.速度里程表显示C程序

#include"C8051F410.h"

voidInit_Device(void);

voiddelayms(unsignedchari);

voiddelayus(void);

voidtoch452(unsignedintcmda);

voiddisplay(void);//显示函数

voidFlash_PageErase(unsignedintaddr);//Flash字节擦除函数

voidFlash_ByteWrite(unsignedintaddr,charbyte);//Flash字节写函数

unsignedcharFlash_ByteRead(unsignedintaddr);//Flash字节读函数

unsignedchari,dispbuff[8]={0,0,0,0,0,0,0,0};//显示缓冲全零

sbitCH452_SCL=P1^3;

sbitCH452_SDA=P1^4;

sbitCH452_KEY=P1^5;

unsignedintCMD,DAT,DAT1;

bitflag,mark;

unsignedintn,ss;//定时器0溢出中断次数

unsignedlongv,mile,count;

unsignedcharcodehex[21]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,//0123456789

0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1,0xFF,0xF7,0x00};//0.1.2.3.4.5.6.7.8.9.

main()

{floatSP;

Init_Device();//初始化

delayms(100);

P1=P1&0x7f;

CMD=0x9103;//设置CH452系统参数

toch452(CMD);

CMD=0x9500;//设置CH452显示参数

toch452(CMD);

display();

for(i=0;i<8;i++)

{dispbuff[i]=20;

}

display();

while

(1)

{

if(flag==1)

{

flag=0;

if(n>38)

{

SP=340.28/n;

v=SP*4032;

dispbuff[2]=v/10000;

dispbuff[1]=v%10000/1000+10;

dispbuff[0]=v%1000/100;

display();

}

else

{

for(i=0;i<3;i++)

{

dispbuff[i]=20;}

display();

}

}

if(mark==1)

{mark=0;

Flash_PageErase(0x1b00);//Flash字节擦除函数

Flash_ByteWrite(0x1b00,count);//Flash字节写函数

mile=Flash_ByteRead(0x1b00);//Flash字节读函数

dispbuff[7]=mile/10000;

dispbuff[6]=mile%10000/1000;

dispbuff[5]=mile%1000/100;

dispbuff[4]=mile%100/10+10;

dispbuff[3]=mile%10;

display();

}

}

}

/*命令、数据送CH452*/

voidtoch452(unsignedintcmda)

{

unsignedcharj;

CH452_SDA=0;

delayus();

CH452_SCL=0;

delayus();

CH452_SCL=1;

delayus();

CH452_SCL=0;

for(j=0;j<16;j++)

{

if(cmda>=0x8000)

CH452_SDA=1;

else

CH452_SDA=0;

CH452_SCL=1;

delayus();

CH452_SCL=0;

cmda=cmda<<1;

};

CH452_SDA=1;

delayus();

CH452_SCL=1;

}

/*mS延时*/

voiddelayms(unsignedchari)

{unsignedintj;

do{for(j=0;j!

=1000;j++)

{;}

}while(--i);

}

/*uS延时*/

voiddelayus(void)

{unsignedk;

for(k=0;k<10;k++)

{;}

}

//Initializationfunctionfordevice,

//CallInit_Device()fromyourmainprogram

voidInit_Device(void)

{

PCA0MD&=~0x40;//禁止看门狗

PCA0MD=0x00;

OSCICN=0x84;//系统时钟内部振荡器8分频(24.5M)

TMOD=0x02;//工作方式2

TL0=0x06;//定时器初始化

TH0=0x06;

TR0=1;//置1允许定时器工作

IT0=1;//外部中断0边沿触发

CKCON=0x00;//定时器时钟选择系统时钟12分频

P0SKIP=0x02;

P1MDIN=0xFE;

P1SKIP=0x01;//对应的P1.n被交叉开关跳过

XBR1=0x40;//使能交叉开关

IE=0x83;//允许定时器INT0中断

}

voidint0()interrupt0//外部中断0处理函数

{

staticunsignedm;

m++;

if(m==270)

{m=0;

count++;

mark=1;

if(count>99999)count=0;

}

n=ss;//ss送给全局变量n

flag=1;

ss=0;

}

voidtimer0()interrupt1//定时中断(T0)服务

{

if(ss<65535)

ss++;

}

voiddisplay(void)//显示程序

{

unsignedchari;

DAT1=0xA100;

for(i=0;i<8;i++)

{

bitEA_SAVE=EA;//保存EA

charxdata*datapwrite;//Flash写指针

EA=0;//禁止中断

VDM0CN=0x80;//使能VDD控制

RSTSRC=0x02;//VDD监控器作为复位源

pwrite=(charxdata*)addr;//指向地址

FLKEY=0xA5;//输入关键字

FLKEY=0xF1;//输入关键字

PSCTL|=0x03;//使能擦除与写入PSWE=1;PSEE=1

VDM0CN=0x80;//使能VDD监控器

RSTSRC=0x02;//VDD监控器作为复位源

*pwrite=0;//页擦除

PSCTL&=~0x03;//禁止擦除

EA=EA_SAVE;//恢复中断

}

voidFlash_ByteWrite(unsignedintaddr,charbyte)//Flash字节写函数

{

bitEA_SAVE=EA;//保存EA

charxdata*datapwrite;//Flash写指针

EA=0;//禁止中断

VDM0CN=0x80;//使能VDD监控器

RSTSRC=0x02;//使能VDD监控器作为复位源

pwrite=(charxdata*)addr;

FLKEY=0xA5;//写关键字

FLKEY=0xF1;//写关键字

PSCTL|=0x01;//使能写PSWE=1

VDM0CN=0x80;//使能VDD监控器

RSTSRC=0x02;//使能VDD作为复位源

*pwrite=byte;//写一个字节

PSCTL&=~0x01;//禁止写PSWE=0

EA=EA_SAVE;//恢复中断

}

unsignedcharFlash_ByteRead(unsignedintaddr)//Flash字节读函数

{

bitEA_SAVE=EA;//保存EA

charcode*datapread;//指向Flash读指针

unsignedcharbyte;

EA=0;//禁止中断

pread=(charcode*)addr;

byte=*pread;//读一个字节

EA=EA_SAVE;//恢复中断

returnbyte;

}

2.硬件电路连接图

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2