{ //接收校验数据 value1>>=1; if(DO) value1+=0x80; SCL=1; SCL=0; } CS=1; SCL=1; if(value==value1) //与校验数据比较,正确就返回数据,否则返回0 return value; return 0; }
/*************定时器0初始化程序***************/ void time_init() { EA = 1; //开总中断 TMOD |= 0X01; //定时器0、定时器1工作方式1 ET0 = 1; //开定时器0中断 TR0 = 1; //允许定时器0定时 }
/********************独立按键程序*****************/ uchar key_can; //按键值
void key() //独立按键程序 { static uchar key_new = 0, key_l; key_can = 20; //按键值还原 P1 = 0x0f; if((P1 & 0x0f) != 0x0f) //按键按下 { delay_1ms(1); //按键消抖动 if(((P1 & 0x0f) != 0x0f) && (key_new == 1)) { //确认是按键按下 key_new = 0; key_l = (P1 | 0xf0); //矩阵键盘扫描 P1 = key_l; switch(P1)
{ case 0xee: key_can = 1; break; //得到按键值 case 0xde: key_can = 4; break; //得到按键值 case 0xbe: key_can = 7; break; //得到按键值 case 0x7e: key_can = 10; break; //得到按键值 case 0xed: key_can = 2; break; //得到按键值 case 0xdd: key_can = 5; break; //得到按键值 case 0xbd: key_can = 8; break; //得到按键值 case 0x7d: key_can = 0; break; //得到按键值 case 0xeb: key_can = 3; break; //得到按键值 case 0xdb: key_can = 6; break; //得到按键值 case 0xbb: key_can = 9; break; //得到按键值 case 0x7b: key_can = 11; break; //得到按键值 case 0xe7: key_can = 15; break; //得到按键值 case 0xd7: key_can = 14; break; //得到按键值 case 0xb7: key_can = 13; break; //得到按键值 case 0x77: key_can = 12; break; //得到按键值 } // write_sfm2(1,0,key_can); } } else key_new = 1; }
/****************按键处理数码管显示函数***************/ void key_with() { if(key_can == 1) //紧急报警键 手动报警 { if(menu_1 == 0) shoudong = 1; } if(key_can == 12) //退出设置键 { menu_1 = 0; init_1602() ; //初始化显示 } if(key_can == 15) //设置键 { menu_1 ++;
if(menu_1 >= 5) { menu_1 = 0; init_1602() ; //初始化显示 } if(menu_1 == 3) //输入第一个人的手机号码 { write_string(1,0,\ \ write_string(2,0,\ \ clear_shuzu(dis_smg,11); for(i=0;i if(menu_1 == 0) { if((key_can == 2) || (key_can == 3)) shoudong = 0; //取消手动报警 } if(menu_1 == 1) //设置高温报警 { if(key_can == 14) { s_temp ++ ; //高温报警值加1 if(s_temp > 99) s_temp = 99; } if(key_can == 13) { s_temp -- ; //高温报警值减1 if(s_temp <= 10) s_temp = 10 ; } } write_sfm2(1,8,s_temp); //显示温度 write_sfm2(2,8,s_yanwu); //显示烟物等级 write_com(0x80+7); //将光标移动到第2行第到3位 write_com(0x0f); //显示光标并且闪烁 write_eeprom(); //保存数据 if(menu_1 == 2) //设置烟物报警 { if(key_can == 14) { s_yanwu ++ ; //烟物报警值加1 if(s_yanwu >= 99) s_yanwu = 99; } if(key_can == 13) { s_yanwu --; //烟物报警值减1 if(s_yanwu <= 1) s_yanwu = 1; } write_sfm2(1,8,s_temp); //显示温度 write_sfm2(2,8,s_yanwu); //显示烟物等级 write_com(0x80+0x40+7); //将光标移动到第2行第到3位 write_com(0x0f); //显示光标并且闪烁 write_eeprom(); //保存数据 } if(menu_1 == 3) //设置第一个人短信号码 { if(key_can < 10) //只有数字键 { if(phone1_i < 11) { phone1_call[phone1_i] = key_can; dis_smg[phone1_i] = 0x30 + key_can; phone1_i ++; if(phone1_i > 11) phone1_i = 11; write_string_num(2,0,dis_smg,phone1_i); //显示号码 lcd1602_guanbiao(1,0 + phone1_i + 0x40); //开光标 } } if(key_can == 11) //删除键 { if(phone1_i != 0) { phone1_i --; phone1_call[phone1_i] = ' '; dis_smg[phone1_i] = ' '; write_string(2,0,\ \ write_string_num(2,0,dis_smg,phone1_i); //显示号码 lcd1602_guanbiao(1,0 + phone1_i + 0x40); //开光标 } } write_eeprom(); //保存数据 } if(menu_1 == 4) //设置第二个人短信号码 { if(key_can < 10) //只有数字键 { if(phone2_i < 11) { phone2_call[phone2_i] = key_can; dis_smg[phone2_i] = 0x30 + key_can; phone2_i ++; if(phone2_i > 11) phone2_i = 11; write_string_num(2,0,dis_smg,phone2_i); lcd1602_guanbiao(1,0 + phone2_i + 0x40); } } if(key_can == 11) //删除键 { if(phone2_i != 0) { phone2_i --; phone2_call[phone2_i] = ' '; dis_smg[phone2_i] = ' '; write_string(2,0,\ \ write_string_num(2,0,dis_smg,phone2_i); lcd1602_guanbiao(1,0 + phone2_i + 0x40); } } write_eeprom(); //保存数据 } } //显示号码 //开光标 //显示号码 //开光标