|
本帖最后由 reayfei 于 2014-1-13 13:26 编辑
主要功能:记录道闸开关的时间,方便记录必要的信息。如果进行升级还将实现记录车辆的号码、颜色、驾驶员信息等大量数据。
应用场合:停车场当然是这个项目的主要场合,其实这个记录器的应用十分广泛,可以用于各种门禁、电梯、行车记录仪等。 本应用中MB85RC256起到数据保存记录的作用,由于其接近无限次擦写的特性,对于这种高安全性要求来说,选择它在合适不过。32K字节的容量,可以存储0x8000/6=0x1555个信息,按照每天100辆汽车平均每辆通行2次,每片芯片可以记录0x1555/200=27天,也就是说,对于一个普通的停车场完全能够满足。如果加上无线通讯设备,还可以定期发送数据包给PC,记录器仅保留最近27天的数据,精细数据可以在PC中查到。 先上个全图
液晶屏幕显示当前时间,当按下开道闸按键同时会记录时间,屏幕下方显示的就是指定次数的开道闸时间。
Fujitsu芯片的处理,所有的信息就是存在这个芯片里。本项目里主要存储了年月日时分秒。
执行机构,当按下开道闸按键后,电机转动道闸打开,停顿5秒待车辆通过后,道闸自动落下。
首先介绍一下我申请的型号为MB85RC256VE 为256Kb的大小,能存储32K字节数据。
接口为:SCL,SDA
供电电压:2.7V~5.5V
我把A0、A1、A2与Vss连在了一起,所以写从机地址为0xA0,读为0xA1。
具体的读写如下图所示: 写一个字节数据,
写一页数据,
读当前地址的数据,
读任意地址的数据(一个字节),
连续读取数据,
- void MB85RC_W(void)
- {
- LED1=0; //杆抬起
- LED2=1;
- delay_ms(120);
- LED1=0; //杆不动
- LED2=0;
- delay_ms(1000);
- delay_ms(1000);
- delay_ms(1000);
- delay_ms(1000);
- delay_ms(1000);
- LED1=1; //杆放下
- LED2=0;
- delay_ms(120);
- LED1=0; //杆不动
- LED2=0;
-
- IIC_Start();
- IIC_Send_Byte(0XA0); //salve 地址
- while(IIC_Wait_Ack()==1);
- IIC_Send_Byte(0x00);
- IIC_Wait_Ack();
- IIC_Send_Byte(0x00);
- IIC_Wait_Ack();
- IIC_Send_Byte(timer.w_year); //年
- IIC_Wait_Ack();
- IIC_Send_Byte(timer.w_month); //月
- IIC_Wait_Ack();
- IIC_Send_Byte(timer.w_date); //日
- IIC_Wait_Ack();
- IIC_Send_Byte(timer.hour); //时
- IIC_Wait_Ack();
- IIC_Send_Byte(timer.min); //分
- IIC_Wait_Ack();
- IIC_Send_Byte(timer.sec); //秒
- IIC_Wait_Ack();
- IIC_Stop();
-
- Preservation_ADDR_2 = Preservation_ADDR_2+6;
- if(Preservation_ADDR_2 == 0xFF)
- {
- Preservation_ADDR_1++;
- Preservation_ADDR_2 = 0x00;
- }
- if(Preservation_ADDR_1 == 0x80)
- {
- Preservation_ADDR_1 = 0x00;
- Preservation_ADDR_2 = 0x00;
- }
- }
- void MB85RC_R(void)
- {
- u8 a,b,c,d,e,f;
-
- IIC_Start();
- IIC_Send_Byte(0xA0); //salve 地址
- while(IIC_Wait_Ack()==1);
- IIC_Send_Byte(0x00);
- IIC_Wait_Ack();
- IIC_Send_Byte(0x00);
- IIC_Wait_Ack();
- IIC_Send_Byte(0xA1); //读取时间记录
- IIC_Wait_Ack();
- a=IIC_Read_Byte(1);
- b=IIC_Read_Byte(1);
- c=IIC_Read_Byte(1);
- d=IIC_Read_Byte(1);
- e=IIC_Read_Byte(1);
- f=IIC_Read_Byte(1);
- IIC_Stop();
- POINT_COLOR=RED;
- LCD_ShowString(60,200,"Query time");
- POINT_COLOR=BLUE;
- LCD_ShowString(60,235," - - ");
- LCD_ShowString(60,270," : : ");
-
- LCD_ShowNum(60,235,a,4,16);
- LCD_ShowNum(100,235,b,2,16);
- LCD_ShowNum(124,235,c,2,16);
- LCD_ShowNum(60,270,d,2,16);
- LCD_ShowNum(84,270,e,2,16);
- LCD_ShowNum(108,270,f,2,16);
- }
- int main(void)
- {
- u8 t=0;
- SystemInit();
- delay_init(72); //延时初始化
- NVIC_Configuration();
- uart_init(9600);
- LED_Init();
- KEY_Init();
- LCD_Init();
- RTC_Init();
- IIC_Init(); //IIC初始化
- EXTIX_Init();
-
- POINT_COLOR=RED; //设置字体为红色
- LCD_ShowString(60,98,"Intelligent parking");
- //显示时间
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(60,130," - - ");
- LCD_ShowString(60,162," : : ");
-
- while(1)
- {
- if(t!=timer.sec)
- {
- t=timer.sec;
- LCD_ShowNum(60,130,timer.w_year,4,16);
- LCD_ShowNum(100,130,timer.w_month,2,16);
- LCD_ShowNum(124,130,timer.w_date,2,16);
- LCD_ShowNum(60,162,timer.hour,2,16);
- LCD_ShowNum(84,162,timer.min,2,16);
- LCD_ShowNum(108,162,timer.sec,2,16);
- LED0=!LED0;
- }
- delay_ms(10);
- };
- }
复制代码
|
赞赏
-
1
查看全部赞赏
-
|