图片预览:
作品简介:
智能里程速度防盗报警器是传统机械式里程速度表的一种替代。它利用数字电子技术准确的测出车所行驶的即时速度和所行驶的里程。由于传统机械式里程速度表是通过金属软轴连通车轮和机械里程表的,软轴反复扭转易断裂损坏,导致里程表不能工作。而智能测速里程防盗报警器不仅仅具有传统机械式里程速度表的所有功能,它还具备一下功能:
★智能语音播报
仪器可以智能检测车所行驶的速度,每到10km/h的整倍数时,系统会语音提示驾驶者现在的速度(主要服务于疲劳驾车和酒后驾车人员),它不仅仅能播报速度,还有其它一系列的人性化的语音。
★防盗报警
当车被移动的时候,防盗报警系统首先会发出语音提示不明身份者,与车保持适当距离,如果车仍被移动防盗报警系统就会发出警报声,同时还可以智能拨出车主手机,在第一时间通知车的主人。
(由于大赛时间紧迫,如果时间充裕的话计划在车主接通车所拨打的电话时,车主可以通过电话向车通话,装设在车上的扬声器把车主的话语传达给不明身份者。)
★电子密码锁
用户可以自己设定/修改密码锁的密码。
用户可以设置三种锁定模式:
? 用户可以直接用钥匙就能打开车,同时取消报警。
? 用户可以设置为密码锁和钥匙同时打开时,车才能打开同时取消报警。
? 用户可以用密码和钥匙,其中的一种方式就打开车同时取消报警。
三种模式设置如下:
ü 当密码最后一位定为 1 时,启用第一种模式;
ü 当密码最后一位定为 2 时,启用第二种模式;
ü 当密码最后一位定为 3时,启用第三种模式。
★区间计程/计时功能
能测量从a地到b地距离和所用的时间。
★数字时钟显示
显示一天中的时刻。(由于时间紧,时间语音的设计暂时取消。)
图一(内部构造图)
原理简介:2 电子测速里程防盗报警器核心是由单片机控制。外围设备有12864LCD,ISD4004语音芯片,霍尔传感器,AT93C66存储块,4*4键盘,手机模块等。(如图一,内部构造图)
2 单片机是仪器的大脑,它负责接收来自外围设备的信息,经处理后输出到控制外围设备。
2 霍尔传感器检测车所行驶的速度,把脉冲信号发给单片机,由单片机分析后输出控制其它外围设备。
2 如图二(语音录制电路)
12864LCD是仪器的显示器,它接受由单片机传来的指令,来显示相应的数据文字。2 ISD4004语音芯片,它接受由单片机传来的指令,发出相应的语音或警报。(如图二,语音录制电路)
2 AT93C66存储块是用来存放用户设定的密码和里程记录,防止因掉电所有数据丢失。
2 手机模块是用来向车主发盗车信号的,它接收到单片机发出的指令时拨通车主所设定手机号码,通知车被盗。
2 4*4键盘是用来输入密码、调整时间、解锁、加锁、密码修改、计程/计时复位。
作品的推广前景:
现在很多汽车,摩托车用的都是机械式里程表,而且大部分电动车测速是通过测量马达所加电压的大小来判断速度的,准确性欠佳。而智能里程速度防盗报警器克服了其所有缺点,准确性高,不具有机械磨损,而且集成了人性化的报警系统。很适合装设在汽车,摩托车,电动车等机动车.
以下是此项目的程序代码,由于本文篇幅有限完整的代码我压缩为rar文件传上了服务器提供下载: http://www.51hei.com/ziliao/file/yybhhq.rar 由于学识有限有诸多不完善的地方,本人十分渴望各路大虾多多指教,共同探讨提高!谢谢!
本人还希望各路英雄也能贡献出自己的程序代码,让每一个人相互借鉴,相互提高!
程序代码如下:
//****************************************** // 标题:电子测速里程防盗报警器 */ // 作者:盖书永 */ // 单片机选用AT89S52 8内存 */ // 语音芯片选用ISD4004-8pm */ // 数据存储块选用AT89C66 2k */ // 采用4*4扫描键盘 */ // 电子测速里程防盗报警器是传统机械式里程速度 // 表的一种替代。它利用数字电子技术准确的测出车 // 所行驶的即时速度和所行驶的里程。但它并不是单 // 纯的里程速度表,它还具备其它功能: // 智能语音播报 // 防盗报警 // 电子密码锁 // 区间计程/计时功能 // 数字时钟显示 //***************************************** #include<reg51.h> #include<intrins.h> void speed(); void put_str_xy(unsigned char x,unsigned char y,unsigned char code *s); #define CS p0^0 #define SK p0^1 #define DI P0^2 #define DO P0^3 sbit ss=P1^6; sbit sclk=P3^1; sbit mosi=P3^0; sbit miso=P1^7; sbit CSPIN = P1^4; sbit RSTPIN= P1^3; sbit A0PIN = P1^2; sbit SCLPIN= P1^1; sbit SIPIN = P1^0; //************************************** #define READ 0X0C00 #define EWEN 0X0980 #define WRITE 0X0A00 #define EWDS 0X0800 #define shiftbit 4 #define LCD_CMD_ON 0xaf #define LCD_CMD_PAGE 0xb0 #define LCD_CMD_COL 0x40 #define LCD_LEFT 0 #define LCD_TOP 0 #define LCD_RIGHT 127 #define LCD_BOTTOM 63 unsigned char counter[4]={0,0,0,0}, timer_tick[2]={0,0}, mile[3]={0,0,0},v=0,operation,lock,z,y, second,minute,hour,minute1,hour1; unsigned char password[5]={1,2,3,4,5}; unsigned char guess[5]={0,0,0,0,0}; unsigned char temp[5]={0,0,0,0,0}; code unsigned char key_code[]={0XD7,0XEE,0XDE,0XBE, 0XED,0XDD,0XBD,0XEB, 0XDB,0XBB,0XE7,0XB7, 0X7E,0X7D,0X7B,0X77 }; code unsigned char ksp[4]={0X7F,0XBF,0XDF,0XEF}; //***************************************** //****************************************** //初始化定时器0 //***************************************** static void timer0_initialize(void) {EA=0; TR0=0; TMOD=0X01; TL0=(0XEE11&0X00FF); TH0=(0XEE11>>8); PT0=0; ET0=1; TR0=1; EA=1; } //*************************************** //外部中断初始化 //*************************************** static void xint0_initialize(void) {EA=0; IT0=0; EX0=1; EA=1; } //**************************************** //0.05秒中断一次,且一秒时停止脉冲计数 //***************************************** static void timer0_isr(void)interrupt 1 using 1 {TR0=0; TL0=(0XEE11&0X00FF); TH0=(0XEE11>>8); TR0=1; timer_tick[0]++; if(timer_tick[0]==200) {timer_tick[0]=0; counter[4]=counter[0]; counter[0]=0; speed(); //时间部分 second++;; if(second==60) { second=0;minute++;minute1++; if(minute==60) {minute=0;hour++; if(hour==24) hour=0; } } if(operation==0) {put_str_xy(0,0,"hour:minute:second"); put_str_xy(0,0,"minute1"); } } //********************************************** //外部中断累加脉冲程序里程计算 //********************************************** static void t0_isr(void) interrupt 0 { counter[0]++; counter[1]++; counter[2]++; if(counter[1]==242) //半公里所需的脉冲数 { if(operation==0) {put_str_xy(0,0,"5"); put_str_xy(0,0,"5"); } } if(counter[1]==484) //一公里所需的脉冲数 {counter[1]==0; mile[0]++;mile[1]++; if(operation==0) {put_str_xy(0,0,"mile[0]"); put_str_xy(0,0,"mile[1]"); } write_bety(x,mile1); } if(lock==0) {if(counter==_____?_____) p3^7=1; counter2=0; } } //************************************ //速度计算程序 //************************************ void speed() {if(operation==0) put_str_xy(0,0,"counter[4]"); swich(counter[4]) {case 10 : isd_setpaly(0X00.0X00);break; case 20 : isd_setpaly(0X00.0X00);break; case 30 : isd_setpaly(0X00.0X00);break; case 40 : isd_setpaly(0X00.0X00);break; case 50 : isd_setpaly(0X00.0X00);break; case 60 : isd_setpaly(0X00.0X00);break; case 70 : isd_setpaly(0X00.0X00);break; case 80 : isd_setpaly(0X00.0X00);break; case 90 : isd_setpaly(0X00.0X00);break; case 100 : isd_setpaly(0X00.0X00);break; case 110 : isd_setpaly(0X00.0X00);break; case 120 : isd_setpaly(0X00.0X00);break; } } //************************************* //时间调整函数 //调整时程序 //************************************* void key(void) {if(p2==_____________) hour++; if(hour>=24) hour=0; } //***************************************** //调整分程序 //***************************************** void key1(void) {if(p2==_____________) minite++; if(minite>=60) minite=0; } //***************************************** //电子防盗和密码锁程序 //***************************************** unchar getsecret(uchar x,uchar y) {char keys; do{put_str_xy(0,0,"_"); keys=gotkey(); put_str_xy(0,0,"*"); }while(keys>9) return(keys); } //*************************************** void get_password() {unsigned char i; for(i=0;i<5;i++) guess{i}=getsecret(x,i); } //**************************************** uchar check_password() {unsigned char i; i=0; if(p0^6=1) return(1); while((guess==password)&&(i<5))i++; if(i==5) return(1); else return(0); } //***************************************** uchar input_new_password() {unsigned char i,j; lcdfill(0X00); delay(5000); put_str_xy(0,0,"new_password"); for(i=0;i<5;i++) temp=getsecret(x,i); lcdfill(0X00); delay(5000) put_str_xy(0,0,"cofirm"); for(i=0;i<5;i++) guess=getsecret(x,i); i=0; while((guess==temp)&&(i<5)) i++; if(i==5); {for(j=0;j<5;j++) {password[j]=temp[j]; write_byte(j,paaword[j]); } return(1); } else return(0); }