📄 800.c
字号:
void Send_Alarm(void)
{
uchar i;
Send_AA(AT_CMGS_,10);
delay_us(4000);
for(i=0;i<11;i++)
{
Send_one_Byte(byte_read(0x2C00+i));
delay_us(4000);
}
delay_us(4000);
Send_AA(GPL,23);
delay_ms(12000);
Send_AA(AT_CMGS_,10);
delay_us(4000);
for(i=0;i<11;i++)
{
Send_one_Byte(byte_read(0x2E00+i));
delay_us(4000);
}
delay_us(4000);
Send_AA(GPL,23);
delay_ms(5);
}
/************************************************************
短消息命令判断处理
************************************************************/
void AT_IO(void)
{
uchar i;
if(memcmp(CMT,buffer,6)==0) //短消息来电提示
{
delay_ms(1000);
Send_AA(AT_CMGR_,11); //读取短消息
delay_us(4000);
Send_one_Byte(buffer[7]);
delay_us(4000);
Send_one_Byte(0x0D);
delay_us(4000);
Send_one_Byte(0x0A);
initial_UART();
// OFF_1=0;
}
else if(memcmp(AT_READY,buffer,10)==0) //AT+READY
{
if(Send_num==1)
{
delay_ms(7000);
Send_Alarm();
initial_UART();
Send_num=0;
}
else if(Send_num==2)
{
LED=0;
delay_ms(7000);
Send_E001();
initial_UART();
Send_num=0;
}
else if(Send_num==3)
{
LED=0;
delay_ms(7000);
Send_D001();
initial_UART();
Send_num=0;
}
// uart0_init(3);
}
else if(memcmp(RING,buffer,6)==0) //来电提示
{
Send_AA(AT_QCCAV,10); //接听
initial_UART();
}
else if(memcmp(CMGR_,buffer,8)==0) //+CMGR:
{
i=Lookup(buffer,5); //
if(memcmp(SN,(buffer+i),6)==0) //比较密码
{
if(memcmp(AON,(buffer+i+6),3)==0) //比较指令 AON 开机指令
{
A_IO=1;
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(AON_OK,14);
}
else if(memcmp(BON,(buffer+i+6),3)==0) //比较指令 BON 开机指令
{
B_IO=1;
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(BON_OK,14);
}
else if(memcmp(AOFF,(buffer+i+6),4)==0) //比较指令 AOFF 关机指令
{
A_IO=0;
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(AOFF_OK,15);
}
else if(memcmp(BOFF,(buffer+i+6),4)==0) //比较指令 BOFF 关机指令
{
B_IO=0;
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(BOFF_OK,15);
}
else if(memcmp(OFF,(buffer+i+6),3)==0) //比较指令 OFF 关机指令
{
LED=1;
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(OFF_OK,14);
}
else if(buffer[i+7]==0x53) //比较指令 S = 密码改写
{
if(Write_SN((buffer+i+9),SN)==1) //
{
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(SN_OK,13);
// OFF_2=0;
}
else
{
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(SN_OK,13);
// OFF_2=0;
}
// OFF_2=0;
}
else if(buffer[i+6]==0x41) //比较指令 A 设置手机号码
{
if(Write_ATT(buffer+i+7,0x2C00)==1)
{
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(ATT_OK,15);
}
else
{
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(ATT_ERROR,17);
}
}
else if(buffer[i+6]==0x42) //比较指令 B 设置手机号码
{
if(Write_ATT(buffer+i+7,0x2E00)==1)
{
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(ATT_OK,15);
}
else
{
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(ATT_ERROR,17);
}
}
}
else
{
delay_ms(5000);
Send_CMGS(buffer+18);
delay_us(4000);
Send_AA(SN_ERROR,16);
}
delay_ms(9000);
Send_AA(AT_SMSD,11);
// OFF_1=1;
initial_UART();
}
}
/**********************************************************************
读取短消息
***********************************************************************/
/*
void SMS_read(void)
{
Send_AA(AT_CMGR_,11); //读取短消息
Send_one_Byte(buffer[7]);
Send_one_Byte(0x0D);
Send_one_Byte(0x0A);
}
*/
/**********************************************************************
判断第几条短信
***********************************************************************/
/*
void SMS_num(void)
{
uchar i;
for(i=7;
while(buffer[i]!=0x0D);
}
*/
/**********************************************************************
***********************************************************************/
//void AT_T(void)
// {
// }
/*************************************************************
发送短信
dat: 目的地号码指针地址
*************************************************************/
void Send_CMGS(uchar *dat)
{
Send_AA(AT_CMGS_,10);
Send_AA(dat,11);
}
/*************************************************************
查找字符串,号
**************************************************************/
uchar Lookup(uchar *dat,uchar len)
{
uchar i,j;
i=0;
j=0;
do
{
if(*(dat+i)==0x2C)
{
j+=1;
}
i++;
}
while(j!=len);
return(i);
}
/***************************************************************
****************************************************************/
/* 打开 ISP,IAP 功能 */
void ISP_IAP_enable(void)
{
EA = 0; /* 关中断 */
ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
ISP_CONTR = ISP_CONTR | WAIT_TIME;
ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
}
/**********************************************************
关闭 ISP,IAP 功能
************************************************************/
void ISP_IAP_disable(void)
{
ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
ISP_TRIG = 0x00;
EA = 1; /* 开中断 */
}
/***********************************************************
字节读
***********************************************************/
uchar byte_read(uint byte_addr)
{
ISP_ADDRH = (uchar)(byte_addr >> 8);
ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
ISP_CMD = ISP_CMD | 0x01; /* 0000,0001 */
ISP_IAP_enable();
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
_nop_();
ISP_IAP_disable();
return (ISP_DATA);
}
/* 扇区擦除 */
void sector_erase(uint sector_addr)
{
uint get_sector_addr = 0;
get_sector_addr = (sector_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
ISP_ADDRH = (uchar)(get_sector_addr >> 8);
ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
ISP_CMD = ISP_CMD | 0x03; /* 0000,0011 */
ISP_IAP_enable();
ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
_nop_();
ISP_IAP_disable();
// return OK;
}
/* 字节编程 */
void byte_program(uint byte_addr, uchar original_data)
{
ISP_ADDRH = (uchar)(byte_addr >> 8);
ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; /* 1111,1000 */
ISP_CMD = ISP_CMD | 0x02; /* 0000,0010 */
ISP_DATA = original_data;
ISP_IAP_enable();
ISP_TRIG = 0x46; /* 触发ISP_IAP命令 */
ISP_TRIG = 0xb9; /* 触发ISP_IAP命令 */
_nop_();
ISP_IAP_disable();
// return OK;
}
/***********************************************************
写密码
************************************************************/
bit Write_SN(uchar *dat,uchar *SN_)
{
uchar i;
bit num=1;
sector_erase(0x2800); //
delay_ms(50);
for(i=0;i<6;i++) //写入密码=》EEPROM
{
byte_program((0x2800+i),*(dat+i));
delay_ms(50);
}
for(i=0;i<6;i++) //写入密码=》RAM
{
*(SN_+i)=byte_read(0x2800+i);
delay_ms(50);
}
for(i=0;i<6;i++)
{
if(byte_read(0x2800+i)!=*(SN_+i))
{
num=0;
}
}
if(num==0)
{
return(0);
}
else
return(1);
}
/*************************************************************
写电话号码入EEPROM
**************************************************************/
bit Write_ATT(uchar *dat,uint addr)
{
uchar i;
bit num=1;
sector_erase(addr); //
delay_ms(50);
for(i=0;i<11;i++) //写入密码=》EEPROM
{
byte_program((addr+i),*(dat+i));
delay_ms(50);
}
for(i=0;i<11;i++)
{
if(byte_read(addr+i)!=*(dat+i))
{
num=0;
}
}
if(num==0)
{
return(0);
}
else
return(1);
}
/***************************************************************
ADC0,ADC1
P1.0,P1.1 为开漏模式
****************************************************************/
/*
void ADC_inp(void)
{
P1M0=0x03;
P1M1=0x03;
}
/***************************************************************
P1.0,P1.1 为51标准模式
****************************************************************/
/*
void ADC_io(void)
{
P1M0=0x00;
P1M1=0x00;
}
/***************************************************************
****************************************************************/
/*
void ADC_read(uchar dat)
{
ADC_CONTR=ADC_CONTR|dat; /*选举AD输入通道
delay_ms(2);
ADC_CONTR=ADC_CONTR|0x08; /*起动AD转换器
delay_us(100);
while((ADC_CONTR&0x10)==0);
// delay_ms(10);
ADC_CONTR=ADC_CONTR&0xE7;
delay_ms(600);
ADCdata=ADC_DATA;
Send_one_Byte(ADCdata);
initial_UART();
} */
/****************************************************************
*****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -