#include #include #include "lcd.h" #include "pwm.h" #include "i2c.h" #include "IRIN.h" #include #include # include #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; }