|
|
|
#include <reg51.h>
|
|
|
|
#include <intrins.h>
|
|
|
|
#include "lcd.h"
|
|
|
|
#include "pwm.h"
|
|
|
|
#include "i2c.h"
|
|
|
|
#include "IRIN.h"
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
# include <stdlib.h>
|
|
|
|
|
|
|
|
#define uint unsigned int
|
|
|
|
#define uchar unsigned char
|
|
|
|
|
|
|
|
typedef unsigned char uint8;
|
|
|
|
typedef unsigned int uint16;
|
|
|
|
|
|
|
|
extern uint mileage;
|
|
|
|
extern uint speed;
|
|
|
|
|
|
|
|
uint Seep_model = 0;
|
|
|
|
|
|
|
|
extern unsigned char pwm_value;
|
|
|
|
|
|
|
|
uchar play = 0;
|
|
|
|
|
|
|
|
// model
|
|
|
|
uchar model = 0;
|
|
|
|
|
|
|
|
struct UserInfo usr;
|
|
|
|
|
|
|
|
uchar Receive;
|
|
|
|
uchar Recive_table[40];
|
|
|
|
|
|
|
|
bit accept = 0;
|
|
|
|
|
|
|
|
void delayms(unsigned int ms)
|
|
|
|
{
|
|
|
|
unsigned char i=100,j;
|
|
|
|
for(;ms;ms--)
|
|
|
|
{
|
|
|
|
while(--i)
|
|
|
|
{
|
|
|
|
j=10;
|
|
|
|
while(--j);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Uart_Init()
|
|
|
|
{
|
|
|
|
TMOD = 0x20 | 0x01;
|
|
|
|
SCON = 0x50;
|
|
|
|
TH1 = 0xFD;
|
|
|
|
TL1 = TH1;
|
|
|
|
PCON = 0x00;
|
|
|
|
EA = 1;
|
|
|
|
ES = 1;
|
|
|
|
TR1 = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void us_delay(uchar t)
|
|
|
|
{
|
|
|
|
while(t--);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Send_Uart(uchar value)
|
|
|
|
{
|
|
|
|
ES=0;
|
|
|
|
TI=0;
|
|
|
|
SBUF=value;
|
|
|
|
while(TI==0);
|
|
|
|
TI=0;
|
|
|
|
ES=1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Bluetooth_Set(uchar *puf)
|
|
|
|
{
|
|
|
|
while(*puf!='\0')
|
|
|
|
{
|
|
|
|
Send_Uart(*puf);
|
|
|
|
us_delay(5);
|
|
|
|
puf++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 保存用户的数据
|
|
|
|
void saveUserInfo(){
|
|
|
|
int target = 0;
|
|
|
|
At24c02Write(3, usr.Seep_model);
|
|
|
|
delayms(2);
|
|
|
|
target = (usr.target_mileage) >> 8;
|
|
|
|
At24c02Write(5, target);
|
|
|
|
delayms(2);
|
|
|
|
target = (usr.target_mileage) & 0x00ff;
|
|
|
|
At24c02Write(6, target);
|
|
|
|
delayms(2);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Bluetooth_Accept(){
|
|
|
|
int target1 = 0, target2 = 0, i = 0;
|
|
|
|
if(accept){
|
|
|
|
if(strstr(Recive_table, "inquire") != NULL){
|
|
|
|
memset(Recive_table, 0, sizeof(Recive_table));
|
|
|
|
sprintf(Recive_table, "speed:%d m/min mileage:%d m\r\n",speed, mileage);
|
|
|
|
Bluetooth_Set(Recive_table);
|
|
|
|
}else if(strstr(Recive_table, "model") != NULL){
|
|
|
|
if(model == 0) model = 1;
|
|
|
|
else model = 0;
|
|
|
|
if(model == 0) Seep_model = 0;
|
|
|
|
memset(Recive_table, 0, sizeof(Recive_table));
|
|
|
|
sprintf(Recive_table, "Model SET OK\r\n");
|
|
|
|
Bluetooth_Set(Recive_table);
|
|
|
|
At24c02Write(4, model);
|
|
|
|
}else if(strstr(Recive_table, "clear") != NULL){
|
|
|
|
// 清空里程
|
|
|
|
mileage = 0;
|
|
|
|
Bluetooth_Set("reset mileage OK!\r\n");
|
|
|
|
}
|
|
|
|
else if(strstr(Recive_table, "speed") != NULL){
|
|
|
|
Seep_model++;
|
|
|
|
if(Seep_model >= 4) Seep_model = 0;
|
|
|
|
usr.Seep_model = Seep_model;
|
|
|
|
}
|
|
|
|
else if(strstr(Recive_table, "set:") != NULL){
|
|
|
|
target1 = strstr(Recive_table, "(") - Recive_table;
|
|
|
|
target2 = strstr(Recive_table, ",") - Recive_table;
|
|
|
|
usr.Seep_model = 0;
|
|
|
|
for(i = target1 + 1; i < target2; i++){
|
|
|
|
usr.Seep_model = usr.Seep_model * 10 + (*(Recive_table + i) - 0x30);
|
|
|
|
}
|
|
|
|
if(usr.Seep_model > 1) usr.Seep_model = 1;
|
|
|
|
target1 = strstr(Recive_table, ",") - Recive_table;
|
|
|
|
target2 = strstr(Recive_table, ")") - Recive_table;
|
|
|
|
usr.target_mileage = 0;
|
|
|
|
for(i = target1 + 1; i < target2; i++){
|
|
|
|
usr.target_mileage = usr.target_mileage * 10 + (*(Recive_table + i) - 0x30);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(usr.Seep_model > 9999) usr.Seep_model = 9999;
|
|
|
|
Bluetooth_Set("User SET OK!\r\n");
|
|
|
|
saveUserInfo();
|
|
|
|
}
|
|
|
|
memset(Recive_table, 0, sizeof(Recive_table));
|
|
|
|
accept = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 读取数据
|
|
|
|
void ReadData(){
|
|
|
|
// 里程
|
|
|
|
mileage = At24c02Read(1) * 255 + At24c02Read(2);
|
|
|
|
|
|
|
|
// 用户的模式
|
|
|
|
usr.Seep_model = At24c02Read(3);
|
|
|
|
|
|
|
|
model = At24c02Read(4);
|
|
|
|
// 用户的目标里程
|
|
|
|
usr.target_mileage = At24c02Read(5) * 255 + At24c02Read(6);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 写入数据
|
|
|
|
void WriteData(){
|
|
|
|
int target = mileage >> 8;
|
|
|
|
At24c02Write(1, target);
|
|
|
|
us_delay(200);
|
|
|
|
target = mileage & 0x00ff;
|
|
|
|
At24c02Write(2, target);
|
|
|
|
us_delay(200);
|
|
|
|
}
|
|
|
|
|
|
|
|
// main 函数
|
|
|
|
void main(void)
|
|
|
|
{
|
|
|
|
LcdInit();
|
|
|
|
IRIN_Init();
|
|
|
|
Uart_Init();
|
|
|
|
ReadData();
|
|
|
|
while(1)
|
|
|
|
{
|
|
|
|
run();
|
|
|
|
display();
|
|
|
|
Key_scan();
|
|
|
|
Bluetooth_Accept();
|
|
|
|
WriteData();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 串口中断
|
|
|
|
void Uart_Interrupt() interrupt 4
|
|
|
|
{
|
|
|
|
static uchar i=0;
|
|
|
|
if(accept) return;
|
|
|
|
if(RI==1) {
|
|
|
|
RI=0;
|
|
|
|
Receive=SBUF;
|
|
|
|
Recive_table[i]=Receive;
|
|
|
|
if((Recive_table[i]=='\r')){
|
|
|
|
i=0;
|
|
|
|
accept = 1;
|
|
|
|
}
|
|
|
|
else i++;
|
|
|
|
}
|
|
|
|
else TI=0;
|
|
|
|
}
|