#51单片机自行车测速(含实时时间,温度显示,断电保存等)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计报告

自行车测速仪

学院信息工程学院

专业信息工程

(电子信息工程方向)

年级班别 2010级(4)班

学号 3110002980

学生姓名 XXX

指导教师 XXX

申请成绩 XXX

1

)

附加功能:实时时钟,行驶里程累计

2.设计思路:

首先是选择基于51单片机来设计这个产品,这个产品主要的功能是用来测量自行车的车速,既然要测车速,那就要用到传感器,所以选择了红外光电传感器,它的检测头里也装有一个发光器和一个收光器,但前方没有反光板。正常情况下发光器发出的光收光器是找不到的。当检测物通过时挡住了光,并把光部分反射回来,收光器就收到光信号,输出一个开关信号。在没有遮挡物时,传感器输出端输出一个高电平,当有遮挡物时,输出端就会输出低电平,那样就可以利用单片机的计数功能,把传感器输出的信号输入到单片机的外部脉冲输入端,可以通过测试脉冲数来算出车速,具体实现是利用单片机的计数功能实现下降沿计数,然后在两秒内统计出自行车走过的圈数,算出自行车车轮的周长,再乘以圈数,再除以时间两秒,就得到车速,然后在lcd上面显示,还可以算出自行车的路程,也利用单片机的定时中断功能可以设置和显示实时时间,还可以利用单片机上自带的温度传感器ds18b20测出实时温度,在lcd上显示出来。

3.任务分工:XXX(100%)

4.设计步骤:

1.先完成lcd的显示代码,使单片机上的lcd能正常显示数字,字符。

2,利用单片机的定时计数功能,首先在lcd上显示实时时间能每秒加一。

3.通过对按键的扫描检测,实现对实时时间的设置。例如按下按键,使能设置时间(断开计时中断),再分别设置三个按键分别实现对小时,分钟,秒的设置(按下一次加一)

4.通过单片机的计数功能,即外部脉冲信号输入到引脚P3.5(T1),电平从1到0跳变,则计数器加一。把红外光电传感器的信号输出端接到引脚P3.5,自行车车轮的周长,再乘以圈数,再除以时间两秒,就得到车速,然后在lcd上面显示。

5.车轮的周长乘以圈数(每次累加起来),就可以得到自行车走过的路程,并在lcd上显示出来。

6.利用单片机上的温度传感器ds18b20,把得到的温度数据转化并显示在lcd上。5,.程序流程(含流程图及详细步骤解释)

流程图详细步骤解释:

1.程序开始运行,初始化。

2.判断key6=0,即键6是否被按下,按下则对路程清零,否则显示累计的路程值。

3. 利用单片机上的温度传感器ds18b20,不断得到实时温度值。

4.把TMOD=01010001,即把T1作为计数器,把T0作为定时器,利用定时功能实现实时时间的显示,即实现每秒加一,利用T1的计数功能,记录由传感器输出的脉冲数,然后可以换算成速度,还可以算出走过的路程。

5.判断key1是否为0,即key1是否被按下,若按下,则令ET0=0(停止定时中断),便于设置时间。

6.判断key2是否被按下,若按下则令小时h加一。

7.判断key3是否被按下,若按下则令分钟m加一。

8.判断key4是否被按下,若按下则令秒s加一。

9.判断key5是否被按下,若按下则令ET0=1,TR0=1允许并启动定时中断。6.操作步骤及方法:

1.电源开关,把线接好后先下载程序,再按电源开关,实现冷启动。

2.1602液晶显示模块。分别显示速度,路程,时间,温度。

3.这些是独立按键,通过这些按键可以实现设置实时时间。(第一行对应为key1,key2,key3,key4,第二行第三个对应key5,第四个为key6),key1按下,则令ET0=0(停止定时中断),便于设置时间。Key2按下则令小时h加一,key3按下则令分钟m加一,key4按下则令秒s加一,key5按下则令ET0=1,TR0=1允许并启动定时中断.。

4.红外光电传感器模块,有三个引脚,分别是接地,接电源,输出信号端接P3^5,分别用杜邦线连接。

5.温度传感器ds18b20,对传感器的输出数据进行处理,然后在lcd上显示温度值

3.1602lcd显示模块,4温度处理模块,5断电保存模块。51单片机都适用,只需修改一下对应的引脚即可。

1.主函数模块:

#include

#include

#include

#include

#include

#include

extern unsigned long int t1;

void main()

{

uchar a,i;

uchar re[4]={0};

Initlcd();

time_init();

EA=0;

re[0]=read_add_data(0x2003);

delay(5);

re[1]=read_add_data(0x2002);

delay(5);

re[2]=read_add_data(0x2001);

delay(5);

re[3]=read_add_data(0x2000);

delay(5);

EA=1;

t1=0;

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

{

t1=t1<<8;

t1=t1|re[i];

}

while(1)

{

time_set(); //调用时间设置函数

speed_display(); //调用速度显示函数

delay(5);

journey_display(); // 调用路程显示函数

delay(5);

time_display(); // 调用时间显示函数

delay(5);

tem_change();

for(a=20;a>0;a--)

相关文档
最新文档