电动车速度里程表付C程序课程设计报告Word格式.docx
- 文档编号:16827699
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:321.90KB
电动车速度里程表付C程序课程设计报告Word格式.docx
《电动车速度里程表付C程序课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《电动车速度里程表付C程序课程设计报告Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
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、参考文献
●《单片机原理及应用》夏路易主编电子工业出版社
●C8051F410/1/2/3混合信号ISPFLASH微控制器
数据手册
潘琢金译
Rev0.72006.02版
●网站:
8、附录
1.组员工作安排
姚利涛:
设计方案的论证;
程序的调试;
C语言编程及410单片机的初始化
王鹏飞:
C语言编程;
课程设计报告的纂写
王素贞:
许鹏飞:
相关的材料收集
2.速度里程表显示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显示参数
display();
for(i=0;
i<
8;
i++)
{dispbuff[i]=20;
}
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;
3;
{
dispbuff[i]=20;
}
if(mark==1)
{mark=0;
Flash_PageErase(0x1b00);
Flash_ByteWrite(0x1b00,count);
mile=Flash_ByteRead(0x1b00);
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;
CH452_SCL=1;
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;
/*mS延时*/
voiddelayms(unsignedchari)
{unsignedintj;
do{for(j=0;
j!
=1000;
{;
}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;
DAT=DAT1+hex[dispbuff[i]];
toch452(DAT);
DAT1=DAT1+0x0400;
voidFlash_PageErase(unsignedintaddr)//Flash字节擦除函数
{
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
//使能VDD监控器
*pwrite=0;
//页擦除
PSCTL&
=~0x03;
//禁止擦除
EA=EA_SAVE;
//恢复中断
voidFlash_ByteWrite(unsignedintaddr,charbyte)//Flash字节写函数
//禁止中断
//使能VDD监控器作为复位源
//写关键字
PSCTL|=0x01;
//使能写PSWE=1
//使能VDD作为复位源
*pwrite=byte;
//写一个字节
PSCTL&
=~0x01;
//禁止写PSWE=0
unsignedcharFlash_ByteRead(unsignedintaddr)//Flash字节读函数
charcode*datapread;
//指向Flash读指针
unsignedcharbyte;
pread=(charcode*)addr;
byte=*pread;
//读一个字节
returnbyte;
3.硬件电路连接图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电动车 速度 里程表 程序 课程设计 报告