生成一个压力传感器15分钟没有感受到压力就通过sim900a拨打电话,若15分钟内感受到压力就不拨打电话的51单片机程序
时间: 2024-04-30 09:18:55 浏览: 64
SIM900A通过51单片机拨打电话程序
以下是一个基于51单片机的程序实现:
```
#include <reg51.h>
#define SENSOR_PIN P1 // 压力传感器引脚
#define CALL_DELAY 900 // 拨打电话的延迟时间,单位为秒
sbit SIM900A_PWR = P3^0; // SIM900A模块电源引脚
sbit SIM900A_DTR = P3^1; // SIM900A模块DTR引脚
sbit SIM900A_RST = P3^2; // SIM900A模块复位引脚
sbit SIM900A_TXD = P3^3; // SIM900A模块串口发送引脚
sbit SIM900A_RXD = P3^4; // SIM900A模块串口接收引脚
void delay(int ms) { // 延迟函数,参数为毫秒数
int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 120; j++);
}
void init_SIM900A() { // 初始化SIM900A模块
SIM900A_PWR = 0; // 先关闭电源
delay(2000); // 等待2秒
SIM900A_PWR = 1; // 打开电源
delay(4000); // 等待4秒
SIM900A_RST = 0; // 复位模块
delay(500); // 等待500毫秒
SIM900A_RST = 1; // 解除复位
delay(5000); // 等待5秒
}
void send_AT_command(char* command) { // 发送AT指令
int i;
for(i = 0; command[i] != '\0'; i++) {
SIM900A_TXD = command[i];
delay(10);
}
SIM900A_TXD = 0x0D; // 发送回车符
delay(10);
SIM900A_TXD = 0x0A; // 发送换行符
delay(10);
}
void make_call(char* phone_number) { // 拨打电话
char command[50];
sprintf(command, "ATD%s;", phone_number); // 构造AT指令
send_AT_command(command); // 发送AT指令
delay(CALL_DELAY * 1000); // 等待拨号时间
send_AT_command("ATH"); // 挂断电话
}
void main() {
int pressure_detected = 0;
init_SIM900A(); // 初始化SIM900A模块
while(1) {
if(SENSOR_PIN == 1) { // 感受到压力
pressure_detected = 1;
delay(900000); // 等待15分钟
}
else { // 没有感受到压力
if(pressure_detected) { // 如果之前感受到了压力
make_call("123456789"); // 拨打电话
pressure_detected = 0; // 重置标志位
}
delay(1000); // 每秒检查一次
}
}
}
```
该程序中使用了SIM900A模块拨打电话,需要注意的是,需要将SIM900A模块的波特率设置为9600,并且在发送AT指令时需要加上回车符和换行符。同时,为了避免误判,程序中使用了一个标志位来记录是否之前感受到了压力,并且等待15分钟的时间也需要注意单位为毫秒。
阅读全文