检测技术课程设计智能自行车综合测量报警系统_第1页
检测技术课程设计智能自行车综合测量报警系统_第2页
检测技术课程设计智能自行车综合测量报警系统_第3页
检测技术课程设计智能自行车综合测量报警系统_第4页
检测技术课程设计智能自行车综合测量报警系统_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 设计的背景及意义在中国,自行车数量和骑自行车人数居世界首位,是公认的头号自行车大国。在经济飞速发展、科技高度发达的今天,人民生活的物质文化水平日益提高,而自行车却一直是和人们日常生活关系最为密切的交通工具之一。近年来,科学发展观的观念日渐深入人心,汽车消费的弊端亦日益显现,如汽车产生的大量废气,带来的频繁拥堵,停车位的日趋紧张,既给车主们带来新的不便,大大提高社会成本,又对环境污染带来相当大的影响。而自行车在所有交通工具中以其低能耗、无污染的特点重新受到人们的青睐。近期由卫生部、科学技术部和国家统计局联合发布的中国居民营养健康现状显示,城市居民的慢性非传染性疾病患病率上升迅速,原因归结于日

2、常饮食结构不合理和身体锻炼缺乏。随着人民生活物质文化水平的提高,人们越来越多的关注身体健康现状。自行车在短程活动范围内,对于身体锻炼的作用日益受到重视,在欧美国家,都市白领、中产阶级骑自行车上班已成时尚,在国内,这一趋势亦逐渐明朗。然而,在大学校园中,二手自行车随处可见,二手车的安全系数也日渐被关注;在社会治安方面,自行车偷盗屡见不鲜,自行车防盗功能越来越受重视。随着自行车的使用的日益增加,随之而来的这些问题亟待解决,这都对自行车的设计和功能提出了更高的要求。基于这一现状,我们课题组设计制作了基于增强型51单片机的“智能”自行车综合测量报警系统。截止到目前为止,所制作系统共可完成6项功能,包括

3、速度测量、超速报警、防盗报警、用户锁定及解锁、用户切换、时间显示等(具体功能介绍见第三部分)。 所设计制作的“智能”自行车综合测量报警系统以外挂表箱的形式接入到自行车中,对自行车自身的性能没有特殊要求,不仅功能全面,成本也先对较低(本实验产品成本为30元),适于投放入市场进行推广。该系统的应用,能够有效地进行防盗报警,减少自行车偷盗的发生;其超速报警系统能够及时有效地提醒车主车速,减少交通事故的发生;此外,自行车的智能化将对倡导自行车的使用作出积极影响,巩固树立国民的环保意识,为国民体质的增强作出贡献。2 系统模块介绍1、干簧管简介:干簧管作为一种磁敏的特殊开关,也称干簧继电器。它通常由两个或

4、三个软磁性材料做成的簧片触点,被封装在充有惰性气体(如氮、氦等)或真空的玻璃管里,玻璃管内平行封装的簧片端部重叠,并留有一定间隙或相互接触以构成开关的常开或常闭接点。 工作原理:当永久磁铁靠近干簧管时,或者由绕在干簧管上面的线圈通电后形成磁场使簧片磁化时,簧片的接点就会感应出极性相反的磁极。由于磁极极性相反而相互吸引,当吸引的磁力超过簧片的抗力时,分开的接点便会吸合;当磁力减小到一定值时,在簧片抗力的作用下接点又恢复到初始状态。这样便完成了一个开关的作用。用途:测速、报警等优点:干簧管比一般机械开关结构简单、体积小、速度高、工作寿命长;而与电子开关相比,它又有抗负载冲击能力强等特点,工作可靠性

5、很高。 2、24c08简介:24c08是一个8K 位串行CMOS E2PROM, 内部含有1024 个8 位字节,CATALYST 公司的先进CMOS 技术实质上减少了器件的功耗. CAT24WC08 有一个16 字节页写缓冲器.该器件通过I2C 总线接口进行操作有一个专门的写保护功能.3、DS1302简介:DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。工作原理:DS1302引脚图采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM

6、数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。引脚功能:DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来

7、启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。优点:DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种

8、记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片(如左图)DS1302,则能很好地解决这个问题。4、8位共阳极数码管本次应用:为使显示更加准确清晰,本系统还采用了8位共阳极数码管用途:由于它的价格便宜 使用简单 在电器 特别是家电领域应用极为广泛,空调、热水器、冰箱等等。绝大多数热水器用的都是数码

9、管,其他家电也用液晶屏与荧光屏。5、蜂鸣器(如下图)三、功能一览该智能自行车综合系统实现了集测量防盗报警等一系列的功能如下:1, 数据测量:该系统可以实现平均速度、瞬时速度的输出,以及行驶总里程的输出2, 超速报警:系统设置有超速报警功能,为用户安全提供可靠性保障,该超速报警的速度值可人工调节大小。3, 防盗报警:为安全行考虑,系统设有防盗功能,在系统锁定之后,若移动自行车并且未能输入正确的解锁密码,则启动报警功能。4, 用户锁定及解锁:该智能系统设有用户使用权,可以对该系统进行锁定,并通过按键实现解锁功能。5, 用户切换:为人性化考虑,系统可支持多用户操作,每个用户可设置其密码,并可以通过按

10、键实现用户切换,密码可自行设置。6, 时间显示:系统配有时间显示模块,可以显示自行车的行驶时间,还可以输出当前的时间。STC12C5A60S2时间显示用户切换锁定解锁防盗报警超速报警数据测量四、程序代码#include#includetypedef unsigned char uchar; typedef unsigned int uint;#defineAN_CJ_DL 100 /长按键时间#define KEY0 0 /* 无按键代码 */ #define KEY1 0x01 /* 按键1编码 */ #define KEY2 0x02 /* 按键2编码 */ #define KEY3 0x

11、03 /* 按键3编码 */ #define KEY4 0x04 /* 按键4编码 */ #define KEY5 0x05 /* 按键5编码 */ #define KEY6 0x06 /* 按键6编码 */ #define KEY7 0x07 /* 按键7编码 */ #define KEY8 0x08 /* 按键8编码 */ #define KEY1L 0x11 /* 长按键1编码 */ #define KEY2L 0x12 /* 长按键2编码 */ #define KEY3L 0x13 /* 长按键3编码 */ #define KEY4L 0x14 /* 长按键4编码 */ #define

12、 KEY5L 0x15 /* 长按键5编码 */ #define KEY6L 0x16 /* 长按键6编码 */ #define KEY7L 0x17 /* 长按键7编码 */ #define KEY8L 0x18 /* 长按键8编码 */ #define KEY_NO KEY0 /* 无按键 */ #define KEY_CYCLETIME 10 /* 按键采样周期 毫秒 */ #define KEY_PRESS_TIME 1500 /* 长按时间,毫秒 */ #define KEY_SHORTPRESS_TIME 40 /短按时间 毫秒#define key_spd1 KEY1#defin

13、e key_evespd KEY2#define key_t_sum KEY3#define key_s_sum KEY4#define key_1302 KEY5#define key_plus KEY6#define key_minus KEY7#define key_lock KEY1L#define key_unlock KEY2L#defineOP_READ0xa1/ 器件地址以及读取操作,0xa1即为1010 0001B#defineOP_WRITE 0xa0/ 器件地址以及写入操作,0xa1即为1010 0000B#define light_step 10volatile uns

14、igned char B_keymark; /* 有按键标志 */ volatile unsigned char keypress; /* 当前按键 */volatile unsigned char keypress_old; /* 当前按键 */ volatile unsigned int keycontinue; /* 长按键计数 */ volatile unsigned char getkey,key_buff; volatile unsigned char keyreact;volatile unsigned long int spd_alarm=1000;/报警速度10m/ssbit

15、 SDA=P16; /将串行数据总线SDA位定义在为P3.5引脚sbit SCL=P15; /将串行时钟总线SDA位定义在为P3.4引脚sbit SCLK=P10; /位定义1302芯片的接口,时钟输出端口定义在P1.0引脚sbit DATA=P11; /位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit RST=P12; /位定义1302芯片的接口,复位端口定义在P1.2引脚sbit sound=P17; /将sound位定义为P17引脚sbit light=P13;/数码管亮度uchar code BCD_7=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82

16、,0xf8,0x80,0x90,0xbf,0xff;/定义共阳极字型码0123456789-空uint dis_ptr6=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/0xfe,0xfd,0xfb,0xf7,0xef,0xdf, 0xdf,0xef,0xf7,0xfb,0xfd,0xfeuchar d6;uchar second,minute,hour,second1,minute1,hour1,day1,month1,year1;/骑行时间 1302时间uint quan; /圈数uint t1,t2;/单圈时间uint m,n1,n,p;/计时辅助n1表示经过单圈时间 单位

17、10ms n是总时间不断累加volatile uint spd1,spd1_history;/单圈速度uint s_sum,t_sum,t_sum_1s;/本次总路程uint spd_average;volatile uint c=200; /轮子周长 cm uint disdata;/要显示的数据uint state=1,run_flag; /当前显示状态 运行标志char state_5_flag=-1,state_4_flag=-1;/状态5的分状态标志 状态4的分状态标志volatile unsigned int t_dot1ms=0; /用于控制警报声volatile unsigne

18、d char alarm_flag=0;uchar i,j;uchar unlock_wei=0,unlock_comm_wei=0;char user=0;/用户编号volatile uchar light_time=100; /数码管亮度idata uchar unlock_comm24=KEY1,KEY2,KEY3,KEY4,KEY1,KEY2,KEY3,KEY4; /正确的解锁码idata uchar unlock_comm_get24;/接收到的解锁码/*函数功能:延时若干微秒入口参数:n*/ void delaynus(unsigned int n) unsigned int i;

19、 for(i=0;in;i+);/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*/ void delaynms(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*/*函数功能:向1302写一个字节数据入口参数:x*/ void Write1302(unsigned char dat) unsigned char i; SCLK=0

20、; /拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,准备写入下一个数据位 /*函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据*/ void WriteSet1302(unsigned char Cmd,unsigned char dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 delaynus(2); /稍微等待,使硬件做好准备 Write1302(Cmd); /写入命

21、令字 Write1302(dat); /写数据 SCLK=1; /将时钟电平置于高电平状态 RST=0; /禁止数据传递 /*函数功能:从1302读一个字节数据入口参数:x*/ unsigned char Read1302(void) unsigned char i,dat;delaynus(2); /稍微等待,使硬件做好准备for(i=0;i=1; if(DATA=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 SCLK=1; /将SCLK置于高电平,为下降沿读出 delaynus(2); /稍微等待 SCLK=0; /拉低SCLK,形成脉冲下降沿 dela

22、ynus(2); /稍微等待 return dat; /将读出的数据返回 /*函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd*/ unsigned char ReadSet1302(unsigned char Cmd) unsigned char dat; RST=0; /拉低RST SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 dat=Read1302(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回/*函数功能:

23、1302进行初始化设置*/ void Init_DS1302(void) unsigned char flag; flag= ReadSet1302(0x81);if(flag&0x80) /判断时钟芯片是否关闭 WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,(55/10)4|(55%10); /根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x82,(33/10)4|(33%10); /根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,(17/10)4|(17%10); /

24、根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,(6/10)4|(6%10); /根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,(4/10)4|(4%10); /根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,(11/10)4|(11%10); /根据写年寄存器命令字,写入年的初始值WriteSet1302(0x90,0xa5); /打开充电功能 选择2K电阻充电方式WriteSet1302(0x8E,0x80); /根据写状态寄存器命令字,写入保护指令 /*以下是对AT24C02的读写操作程序*/*函数功能:开始数

25、据传送*/void start()/ 开始位SDA = 1; /SDA初始化为高电平“1”SCL = 1; /开始数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 0; /SDA的下降沿被认为是开始信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)/*函数功能:结束数据传送*/void stop()/ 停止位SDA = 0; /SDA初始化为低电

26、平“0”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SCL = 1; /结束数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期SDA = 1; /SDA的上升沿被认为是结束信号/*函数功能:从AT24Cxx读取数据出口参数:x*/unsigned char ReadData()/ 从AT24Cxx移入数据到MCUunsigned char i;unsigned char x; /储存从AT24Cxx中读出的数据for(i = 0; i 8

27、; i+)SCL = 1; /SCL置为高电平x=1; /将x中的各二进位向左移一位x|=(unsigned char)SDA; /将SDA上的数据通过按位“或“运算存入x中SCL = 0; /在SCL的下降沿读出数据return(x); /将读取的数据返回/*函数功能:向AT24Cxx的当前地址写入数据入口参数:y (储存待写入的数据)*/在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0bit WriteCurrent(unsigned char y)unsigned char i;bit ack_bit; /储存应答位for(i = 0; i 8; i+)/ 循环移入

28、8个位 SDA = (bit)(y&0x80); /通过按位“与”运算将最高位数据送到S /因为传送时高位在前,低位在后_nop_(); /等待一个机器周期 SCL = 1; /在SCL的上升沿将数据写入AT24Cxx _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 SCL = 0; /将SCL重新置为低电平,以在SC线形成传送数据所需的个脉冲y = 1; /将y中的各二进位向左移一位SDA = 1; / 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线, /以让SDA线转由接收设备(AT24Cxx)控制_nop_(); /等待一个机器周期 _no

29、p_(); /等待一个机器周期 SCL = 1; /根据上述规定,SCL应为高电平_nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 ack_bit = SDA; /接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节 /若送高电平,表示没有接收到,传送异常SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)return ack_bit;/ 返回AT24Cxx应答位/*函数功能:向AT24Cxx中的指定地址写入数据入口参数:add (储存指定的地址)

30、;dat(储存待写入的数据)*/void WriteSet(unsigned char add, unsigned char dat)/ 在指定地址addr处写入数据WriteCurrentstart(); /开始数据传递WriteCurrent(OP_WRITE); /选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(add); /写入指定地址WriteCurrent(dat); /向当前地址(上面指定的地址)写入数据stop(); /停止数据传递delaynms(4); /1个字节的写入周期为1ms, 最好延时1ms以上/*函数功能:从AT24Cxx中的当前地址

31、读取数据出口参数:x (储存读出的数据) */unsigned char ReadCurrent()unsigned char x;start(); /开始数据传递WriteCurrent(OP_READ); /选择要操作的AT24Cxx芯片,并告知要读其数据x=ReadData(); /将读取的数据存入xstop(); /停止数据传递return x; /返回读取的数据/*函数功能:从AT24Cxx中的指定地址读取数据入口参数:set_add出口参数:x */unsigned char ReadSet(unsigned char set_add)/ 在指定地址读取start(); /开始数据

32、传递WriteCurrent(OP_WRITE); /选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(set_add); /写入指定地址return(ReadCurrent(); /从指定地址读出数据并返回/*函数名:PWM初始化函数调 用:PWM_init();参 数:无返回值:无结 果:将PCA初始化为PWM模式,初始占空比为0备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可/*/void PWM_init (void)CMOD=0x08; /设置PCA定时器 CL=0x00; CH=0x00; CCAPM0=0x42; /PWM0设置PCA

33、工作方式为PWM方式(0100 0010) CCAP0L=0x00; /设置PWM0初始值与CCAP0H相同 CCAP0H=0x00; / PWM0初始时为0 /CCAPM1=0x42; /PWM1设置PCA工作方式为PWM方式(使用时删除/) /CCAP1L=0x00; /设置PWM1初始值与CCAP0H相同 /CCAP1H=0x00; / PWM1初始时为0 /CCAPM2=0x42; /PWM2设置PCA工作方式为PWM方式 /CCAP2L=0x00; /设置PWM2初始值与CCAP0H相同 /CCAP2H=0x00; / PWM2初始时为0 /CCAPM3=0x42; /PWM3设置P

34、CA工作方式为PWM方式 /CCAP3L=0x00; /设置PWM3初始值与CCAP0H相同 /CCAP3H=0x00; / PWM3初始时为0 CR=1; /启动PCA定时器/*函数名:PWM0占空比设置函数调 用:PWM0_set();参 数:0x000xFF(亦可用0255)返回值:无结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可/*/void PWM0_set (unsigned char a) CCAP0L= a; /设置值直接写入CCAP0L CCAP0H= a; /设置值直接写入

35、CCAP0Hvoid process_disbuff(uint temp) uchar i; if(state!=1&state!=2&state!=3&state!=4&state!=5&state!=6) for(i=0;i1;i+) d0=temp/100000; d1=(temp/10000)%10; d2=(temp/1000)%10; d3=(temp/100)%10; d4=(temp/10)%10; d5=temp%10; else if(state=3) for(i=0;i1;i+) d0=hour/10;d1=hour%10;d2=minute/10;d3=minute%1

36、0;d4=second/10;d5=second%10; else if(state=5) switch(state_5_flag) case 0: d0=hour1/10; d1=hour1%10; d2=minute1/10; d3=minute1%10; d4=second1/10; d5=second1%10; break; case 1: d0=year1/10; d1=year1%10; d2=month1/10; d3=month1%10; d4=day1/10; d5=day1%10;break; case 2: d0=year1/10; d1=year1%10; d2=10;

37、 d3=10; d4=10; d5=10;break; case 3: d0=10; d1=10; d2=month1/10; d3=month1%10; d4=10; d5=10;break; case 4: d0=10; d1=10; d2=10; d3=10; d4=day1/10; d5=day1%10;break; case 5: d0=hour1/10; d1=hour1%10; d2=10; d3=10; d4=10; d5=10;break; case 6: d0=10; d1=10; d2=minute1/10; d3=minute1%10; d4=10; d5=10;break; case 7: d0=10; d1=10; d2=10; d3=10; d4=second1/10; d5=second1%10;break; default: break; else if(state=1|state=2) d0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论