嵌入式系统设计题目:自行车测速报警系统设计自行车测速报警系统设计本设计以AT89C2051为核心,通过霍尔传感器来检测自行车的运转情况进而实现电动自行车的速度,最后用2位的LED能直观的将速度与里程显示给用户,并且在速度高于一定的值时可自动向用户报警,从而达到智能化。
主要研究内容:1.传感器电路模块设计光敏电阻对光特别敏感,当白天行驶时,外界光敏电阻对光特别敏感,当黑天行驶时,外界光源导致光敏电阻发出错误信号;光敏电阻对环境的要求相当高,如果光敏电阻或发光二极管被泥沙或灰尘所覆盖,光敏电阻就不能再进行测量;在雾天和雨天光敏电阻的测量的效果也不好。
而编码器必须安装在车轴上,这样安装就会给用户带来很多不便。
霍尔传感器是对磁敏感的传感元件,是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路(OC)门输出,工作电压范围宽,由霍尔元件加整形电路构成的霍尔开关系统,具有输出响应快,数字脉冲性能好,安装方便,性能可靠,不受光线、泥水等因素影响。
所以本设计采用霍尔传感器。
2.电源电路设计本系统采用的是MC34063制作的降压变换电源。
由于电动车电瓶的电源电压大多是24V,36V,48V等,所以把电瓶电源24V转换为单片机所需要的电压5V。
MC34063是一单片双极型线性集成电路,专用于直流-直流变换器控制部分.片内包含有温度补偿带隙基准源、一个占空比周期控制振荡器、驱动器和大电流输出开关,能输出1.5A的开关电流.它能使用最少的外接元件构成开关式升压变换器、降压式变换器和电源反向器。
特点:能在3.0-40V的输入电压下工作;短路电流限制;低静态电流;输出开关电流可达1.5A(无外接三极管);输出电压可调工作振荡频率从100HZ到100KHZ。
MC34063是一种开关型高效DC/DC变换集成电路。
它的内部含有具有温度补偿的基准电压源、比较器、具有限电流电路的占空比可控的振荡器、驱动器和大电流输出开关管。
3.存储器电路模块设计在本设计中用芯片AT24C02.AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。
在AT89C2051试验开发板上它们都接地,第8脚和第4脚分别为正、负电源。
第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在AT89C2051试验开发板上和单片机的P3.5连接。
第6脚SCL为串行时钟输入线,在AT89C2051试验开发板上和单片机的P3.6连接。
SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。
第7脚需要接地单片机从AT24C02内部的地址向单片机的读出单元字节读出数据,供显示所用。
4.报警电路设计语音报警电路的核心是WTV040语音芯片。
当电动车的行使速度达到或超过测速器预设速度时,测速器单片机往外发出一个低电平,直接拉低I/O口P01的电平,使WTV040语音芯片被触发,点亮报警指示进行提示并触发语音进行报警。
5.显示电路设计显示模块用74HC164驱动数码管显示,数码管,驱动电路等组成显示电路,使用共阳数码管。
P3.3-P3.4为数码管的动态扫描位驱动。
P1.6,P1.7作数码段码输出。
6、程序设计#ifndef _Max7219_H_#define _Max7219_H_#include<intrins.h>#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define DECODE_MODE 0x09 //译码方式#define INTENSITY 0x0A#define SCAN_LIMIT 0x0B#define SHUT_DOWN 0x0C#define DISPLAY_TEST 0x0D#define delay1us _nop_();#define delay2us {delay1us;delay1us;}#define delay4us {delay2us;delay2us;}#define delay5us {delay4us;delay1us;}#define delay12us {delay4us;delay4us;delay4us;}sbit din=P2^0;sbit load=P2^1;sbit clk=P2^2;void Max7219_Wr_byte(uchar wrdat);void Max7219_Wr_data(uchar addr,uchar dat); void Init_Max7219(void);void Disp_speed(uint speed);void Disp_set_speed(uint set_speed);//初始化MAX7219void Max7219_Init(void){Max7219_Wr_data(SHUT_DOWN, 0x01);Max7219_Wr_data(DISPLAY_TEST, 0x00);Max7219_Wr_data(DECODE_MODE, 0xff);Max7219_Wr_data(SCAN_LIMIT, 0x07);Max7219_Wr_data(INTENSITY, 0x0a);}void Max7219_Wr_byte(uchar wrdat){bit dat;uchar i;for (i=0;i<8;i++){clk=0;dat=(bit)(wrdat&0x80);if(dat)din=1;elsedin=0;wrdat<<=1;clk=1;}}void Max7219_Wr_data(uchar addr,uchar dat) {load=0;Max7219_Wr_byte(addr);Max7219_Wr_byte(dat);load=1;}void Disp_speed(uint speed){uchar speed_buf[4];uchar i;speed_buf[0]=speed%10;speed_buf[1]=speed/10%10|0x80;speed_buf[2]=speed/100%10;speed_buf[3]=speed/1000;if(0==speed_buf[3]){speed_buf[3]=0x0f;if(0==speed_buf[2])speed_buf[2]=0x0f;}for(i=1;i<=4;i++){Max7219_Wr_data(i,speed_buf[i-1]);}}void Disp_set_speed(uint set_speed){uchar speed_buf[4];uchar i;speed_buf[0]=set_speed%10;speed_buf[1]=set_speed/10%10|0x80;speed_buf[2]=set_speed/100%10;speed_buf[3]=set_speed/1000;if(0==speed_buf[3]){speed_buf[3]=0x0f;if(0==speed_buf[2])speed_buf[2]=0x0f;}for(i=1;i<=4;i++){Max7219_Wr_data(i+4,speed_buf[i-1]);}}#endif#include <reg51.h>sbit KEY0=P2^3;sbit KEY1=P2^4;sbit KEY2=P2^5;sbit KEY3=P2^6;sbit SPK=P2^7;sbit LED_GREEN=P1^6;sbit LED=P1^7;uint set_speed;uint speed;uchar sec_cnt;void Init_8051(void);void Delay(uchar time);uint Get_key(void);void Warn_ring(void);void main(void){Init_8051();Max7219_Init();while(1){set_speed=Get_key();Disp_speed(speed);Disp_set_speed(set_speed);Warn_ring();}}void Delay(uchar time){uchar t1,t2;for(t1=time;t1>0;t1--)for(t2=248;t2>0;t2--);}//初始化void Init_8051(void){EA=0;TCON=0x00;TMOD=0x51;TL0=0xe0; //定时20msTH0=0xb1; //T1计数13个脉冲TL1=0xf3;TH1=0xff;TR0=1;TR1=1;IE=0x8a;SPK=0;LED=0;LED_GREEN=1;}//定时器0函数,定时50*20ms=1svoid Timer0_speed(void) interrupt 1{ET0=0;TR0=0;TL0=0xe0;TH0=0xb1;TR0=1;sec_cnt++;ET0=1;}//计数中断计数10次半径d=20cm //speed=0.2*60*10/sec_cnt*36 km/h void Counter_speed(void) interrupt 3 { float a=6250;ET1=0;TR1=0;TL1=0xf3;TH1=0xff;TR1=1;speed=4.52*a/sec_cnt;sec_cnt=0;ET1=1;}//键盘处理函数uint Get_key(void){static uint key_value;if(!KEY0){Delay(40);if(!KEY0){while(KEY3){if(!KEY1){Delay(40);if(0==KEY1){while(0==KEY1){Disp_set_speed(key_value);}key_value+=10;if(key_value==9999)key_value=0;}}if(!KEY2){Delay(40);if(0==KEY2){while(0==KEY2){Disp_set_speed(key_value);}key_value-=10;if(key_value==0)key_value=9999;}}}}}return (key_value);}//报警函数void Warn_ring(void){if(speed > set_speed){LED=1;SPK=0;Delay(1);SPK=1;}elseLED=0;}7、结论本设计以AT89C2051为核心,利用单片机的运算和控制功能,并采用系统化LED 显示模块实时显示所测速度的设计方案,以及串口数据存储电路和系统软件。