樓主的主程序:
- /*************************************************************************
- * PRO -- 小型氣象站
- *
- * 功能:溫度,濕度,壓強(qiáng),PM2.5顯示,并可通過GSM模塊講述據(jù)發(fā)送到手機(jī)
- * 方案:STC12C5A60S2 + DHT11 + BMP085 + GP2Y1050AU0F
- *
- * 讀取傳感器數(shù)據(jù)并通過LCD12864顯示
- * 將數(shù)據(jù)通過GSM發(fā)送到手機(jī)
- * 要使用GSM模塊時(shí),注意修改GSM_SendSensorDat()函數(shù)中的手機(jī)號(hào)
- *************************************************************************/
- #include <reg52.h>
- #include "bmp085.h"
- #include "dht11.h"
- #include "pm2_5_sensor.h"
- #include "sim900.h"
- #include "lcd12864.h"
- uchar code table1[] = "溫度:";
- uchar code table2[] = "濕度:";
- uchar code table3[] = "壓強(qiáng):";
- uchar code table4[] = "PM2.5:0000ug/m^3";
- void DisRefresh(void);
- void GSM_SendSensorDat(void);
- void delay100ms(void);
- void delay200ms(void);
- void delay300ms(void);
- void main(void)
- {
- uchar i = 0;
-
- /* 相關(guān)器件初始化 ------------------------------------------------------------ */
- LCD12864_Init(); // 液晶顯示初始化
- BMP085_Init(); // 氣壓計(jì)初始化
- UART2_Init(); // 與PM2.5模塊通信
- UART1_Init(); // 與GSM模塊通信
- /* GSM模塊相關(guān)設(shè)置 ------------------------------------------------------------ */
- UART1_PrintStr("AT\r\n"); delay100ms();
- UART1_PrintStr("ATI\r\n"); delay100ms(); // 同步波特率
- UART1_PrintStr("AT+CMGF=1\r\n"); delay100ms(); // 設(shè)置為英文模式
- UART1_PrintStr("AT+CSCS=\"GSM\"\r\n"); delay100ms(); // 設(shè)置GSM字符集
- UART1_PrintStr("AT+CNMI=2,1\r\n"); delay100ms(); // 設(shè)置新消息提示
-
- LCD12864_Dis(0, 0, table1);
- LCD12864_Dis(1, 0, table2);
- LCD12864_Dis(2, 0, table3);
- LCD12864_Dis(3, 0, table4);
-
- /* 上電延時(shí)一小段時(shí)間將數(shù)據(jù)發(fā)送到手機(jī) ------------------------------------- */
- for(i=0; i<10; i++) {
- DisRefresh();
- delay300ms();
- }
- DisRefresh();
- GSM_SendSensorDat();
- while(1) {
-
- /* 讀取數(shù)據(jù),更新顯示 */
- DisRefresh();
- delay200ms();
- }
- }
- /**
- * 讀取傳感器數(shù)據(jù),并更新顯示
- */
- unsigned int Vout;
- unsigned char dis[4];
- void DisRefresh(void)
- {
- uchar i;
-
- /* 讀取氣壓計(jì)數(shù)據(jù)并更新到顯示 */
- BMP085_Convert();
-
- /* 讀取溫濕度傳感器數(shù)據(jù)并更新到顯示,此處只用到濕度數(shù)據(jù),溫度數(shù)據(jù)采用BMP085傳感器的數(shù)據(jù)因其精度相對(duì)較高 */
- ReadHumidityTemperature();
-
- /* 讀取PM2.5傳感器數(shù)據(jù) */
- Vout = (unsigned char)((Vo[1]*256 + Vo[2])/1024.0*5*0.2*1000); // Vo[]中的數(shù)據(jù)在USART2中斷中更新
- dis[0] = Vout/1000 + 0x30;
- dis[1] = Vout%1000/100 + 0x30;
- dis[2] = Vout%100/10 + 0x30;
- dis[3] = Vout%100%10 + 0x30;
- if (Vout > 1000) {
- dis[0] = Vout/1000 + 0x30;
- dis[1] = Vout%1000/100 + 0x30;
- dis[2] = Vout%100/10 + 0x30;
- dis[3] = Vout%100%10 + 0x30;
- } else if(Vout > 100) {
- dis[0] = 0x20;
- dis[1] = Vout%1000/100 + 0x30;
- dis[2] = Vout%100/10 + 0x30;
- dis[3] = Vout%100%10 + 0x30;
- } else if (Vout > 10) {
- dis[0] = 0x20;
- dis[1] = 0x20;
- dis[2] = Vout%100/10 + 0x30;
- dis[3] = Vout%100%10 + 0x30;
- } else {
- dis[0] = 0x20;
- dis[1] = 0x20;
- dis[2] = 0x20;
- dis[3] = Vout%100%10 + 0x30;
- }
-
- /* 將更新的數(shù)據(jù)更新到GSM發(fā)送緩存中 */
- for (i=0; i<4; i++) {
- SMS_Content[42+i] = dis[i];
- }
-
- /* 將讀取PM2.5模塊的數(shù)據(jù)更新到液晶顯示 */
- LCD12864_WriteCmd(0x9B);
- LCD12864_WriteDat(dis[0]); LCD12864_WriteDat(dis[1]); LCD12864_WriteDat(dis[2]); LCD12864_WriteDat(dis[3]);
- }
- /* ======================================== Short Message Service ======================================== */
- uchar SMS_Content[52] = "Temp:22.2, Pres:101.3KPa, Humi:50%, PM2.5: 30ug/m^3"; // 短信內(nèi)容
- /**
- * 發(fā)送傳感器數(shù)據(jù)
- * @param[in] temp:溫度
- * @param[in] hum:濕度
- * @param[in] dust:PM2.5濃度--ug/m^3
- */
- void GSM_SendSensorDat(void)
- {
- /* 加載要發(fā)送的數(shù)據(jù)-->設(shè)置短信格式-->設(shè)置數(shù)據(jù)長(zhǎng)度-->發(fā)送信息 */
- UART1_PrintStr("AT+CSCS=\"GSM\"\r\n"); delay300ms();
- UART1_PrintStr("AT+CMGF=1\r\n"); delay300ms(); // 設(shè)置為文本模式
- UART1_PrintStr("AT+CMGS=\"18813331234\"\r\n"); delay300ms(); // 此處修改為對(duì)方的電話號(hào)
- UART1_PrintStr(SMS_Content); // 修改短信內(nèi)容
- UART1_PrintChar(0x1A);
- }
- void delay100ms(void)
- {
- unsigned char a,b,c;
- for(c=89;c>0;c--)
- for(b=230;b>0;b--)
- for(a=12;a>0;a--);
- }
- void delay200ms(void)
- {
- unsigned char a,b,c;
- for(c=187;c>0;c--)
- for(b=215;b>0;b--)
- for(a=26;a>0;a--);
- }
- void delay300ms(void)
- {
- unsigned char a,b,c;
- for(c=89;c>0;c--)
- for(b=230;b>0;b--)
- for(a=36;a>0;a--);
- }
復(fù)制代碼 |