//注意:增加了短信内容判断后删除功能,这样防止短信数量超过50。
//密码只要包含是ghost,比如:123ghostary,外部蜂鸣器就会发出声音。
#include "STC12C5A.h"
#include
typedef unsigned char uint8;
typedef unsigned int uint16;
//sbit LSA=P2^2;
//sbit LSB=P2^3;
//sbit LSC=P2^4;
//#define LONG 1000
//uint16
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
sbit LED0=P2^0;
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
sbit LED4=P2^4;
sbit LED5=P2^5;
sbit LED6=P2^6;
sbit k1=P3^1; //定义P31口是k1(从左到右,第1个键)
sbit k2=P3^0; //定义P30口是k2(从左到右,第2个键),删除当前最后一条短信
sbit beep=P1^5; //蜂鸣器
sbit sound=P2^7; //喇叭
uint8 m,k,p,q,g,n,d;
//m=1,数据有效,Stinx表示最后一条短信序号位数(可能是一位,也可能是两位)
//k是Rtable[32]当前输入有效字符的写入位置,P为当前短信序号的第一位,q为当前短信序号的第
//g为串口接收筛选。g=1时选择数字,g=0时,不选择数字。n为当前短信数量。
//d=1时表示当前短信需要删除,d=0时表示当前短信不能删除。
uint8 Rtable[32]; //接收SIM800C模块传来的数据
uint8 DealNo; //DealNo:需要检查反馈的代码
uint8 Data_compare(uint8 *p);
void ConfigUART(); //串口通信初始化函数,buad为单片机设置的波特率。
void Delay_ms(uint16 n);
void Uart_Send_String(uint8 *string);//串口发送多个字节。
void Delay_Us(uint8 us);
void Sent_UART(uint8 dat); //串口发送一个字节
void tableZero(); //数组清空
//void displaynumofin();
void delinf();
void SIM800C_AT(); //SIM800C初始化
void delay(uint16 i) //1ms
{
while(i--);
}
void Delay_Us(uint8 us) //延时
{
while(us--);
}
void Delay_ms(uint16 n) //延时
{
unsigned int i,j;
for(i=0;i
for(j=0;j<123;j++);
}
void main() //主程序
{
uint8
i;
tableZero();
sound=0;
i=0;
DealNo=0;
d=0;
k=0;
m=0;
n=0;
g=1; //数字和大小写字母全部接收
p=33; //数组Rtable[32]序号最大是31.
q=33; //数组Rtable[32]序号最大是31.
LED0=0;
LED5=1;
LED6=1;
ConfigUART(); // 串口初始化
Delay_ms(50000); //延时,SIM800C联网需要时间
LED0=1;
while(1)
{
if(k1==0)
//检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
// tableZero();
Uart_Send_String("AT+CPOWD=1\r\n");
//发AT指令,测试SIM800C模块是否正常
delay(3000);
DealNo=9;
}
while(!k1); //检测按键是否松开
}
//删除当前最后一条短信
//AT+CMGD=34,0
//删除第34条短信OK
if(k2==0)
//检测按键K2是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k2==0) //再次判断按键是否按下
{
delinf(); //删除当前短信
DealNo=8;
}
while(!k2); //检测按键是否松开
}