#include <reg51.h>
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#include <hddef.h>
#include <IC24c01.h>
#include <HT9200.h>
#include <HM9270.h>
bit start_flag = 0 ; //设置开始输入号码标志
bit end_flag = 1 ; //设置结束输入号码标志
unsigned char total_num =0;
static unsigned char dialstr[16];
static int label = 0; //下标
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
void init()
{
//init 24c01
SDA = 1;
SCL = 1;
fill_byte(0xff); // 24c01全部填充0xff
delay(300);
//init int ,P3.2 P3.3口清零。
al_read = 0;
al_write = 0;
//clear 0
memset(dialstr,0,sizeof(dialstr));
}
void parse()
{
//需要解析dialstr
int i=0;
switch (dialstr[1])
{
case 0x00: //密码
break;
case 0x01: //布防延时时间设置
break;
case 0x02: //输出延时时间设置
break;
case 0x03: //振铃次数
break;
case 0x04: //语音录制
break;
case 0x05: //播放检查
break;
case 0x06: //音响设置
break;
case 0x07: //
break;
case 0x08: //
break;
case 0x09: //电话号码设置
if (total_num < 4)
{
for(i=2;(i<16)&&(dialstr[i]!='#');i++)
{
write_byte((total_num*16 + i - 2),dialstr[i]);
delay(100);
}
total_num ++;
if (total_num ==4) total_num = 0;
}
break;
default: // no key
break;
}
}
void key_process(unsigned char key)
{
if (key == '*')
{
start_flag = 1;
end_flag = 0;
memset(dialstr,0,sizeof(dialstr));
label = 0;
}
if ((key == '#')&&(start_flag)&&(!end_flag))
{
if (label > 0)
{
parse(); //解析
}
start_flag = 0;
end_flag = 1;
label = 0;
}
if (((key >='0')&&(key <= '9'))&&(start_flag)&&(!end_flag)&&(label < 16))
{
dialstr[label] = key;
label ++;
}
}
void Dial_Code()
{
unsigned char i ,j;
for(i=0;i<4;i++)
{
memset(dialstr,0,sizeof(dialstr));
for(j=0;j<16;j++)
{
dialstr[j] = read_random(i*16 + j);
if (dialstr[j] == 0xFF)
break;
}
PH_ON = 1;
delay(500);
Ht9200(dialstr);
delay(3000);
PH_ON = 0;
}
}
void Save_Code()
{
unsigned char key0;
key0 = scan_key();
if (key0 != 0x00)
{
key_process(key0);
}
}
/*
unsigned char getalarm() //获得告警信息
{
//0000 no alarm
if ((red1) ||(red2)||(red3)||(red4))
{
return 1;
}
return 0;
}
*/
main()
{
init(); //初始化
delay(100);
while(1)
{
// 遥控器 ,2272
if (al_read)
{
Dial_Code();
}
// 号有数据 ,9270接收数据
if (al_write)
{
TOE = 1; //set 9270 flag
//需要定时器
Save_Code();
}
delay(300);
}
}