久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4661|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

MSP430單片機(jī)控制GSM模塊的短信功能源碼分享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:423060 發(fā)表于 2018-11-8 16:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以msp430f5529作為主控,連接了一些傳感器,可以將傳感器的信息通過(guò)GSM模塊發(fā)送到別的手機(jī)上
GSM模塊中要插上sim卡
整個(gè)工程就在這里了

單片機(jī)源程序如下:
  1. /*************************************************
  2.   TXD 4.4   RST 76
  3.   RXD 4.5   TEST 71
  4.   CO2傳感器    MGT811  5v   P6.1                    20.32
  5.     光強(qiáng)度傳感器 BH1750  3.3v SDA-P3.1 SCL-P3.3   寬度 15.33
  6.     溫濕度傳感器 DHT11   3.3v P1.4                    14.27
  7.     電扇   P75     水泵    P77
  8.     加濕器  P76    窗簾    P62
  9. ************************************************/
  10. #include  "msp430f5529.h"
  11. #include  "strings.h"
  12. #include  "BH1750.h"
  13. #include  "AT.h"
  14. #include  "iic.h"
  15. #include  "math.h"
  16. #define CPU           (1000000)
  17. #define delay_us(x)   (__delay_cycles((double)x*CPU/1000000.0))
  18. #define delay_ms(x)   (__delay_cycles((double)x*CPU/1000.0))
  19. #define HIGH P1OUT|=BIT4;
  20. #define LOW  P1OUT&=~BIT4;

  21. #define FANOFF  P7OUT|=BIT5;
  22. #define FANON  P7OUT&=~BIT5;
  23. #define PUMPON  P7OUT|=BIT7;
  24. #define PUMPOFF  P7OUT&=~BIT7;

  25. char temph,templ,humdh,humdl,check;
  26. #define Max 200
  27. char Buff[Max];

  28. int light_flag,mode_flag;
  29. int getco2[2];
  30. extern unsigned char BUF[2];
  31. extern char content[];

  32. char high[6]="(high)";
  33. char cold[6]="(cold)";
  34. char hot[5]="(hot)";
  35. char dry[5]="(dry)";
  36. char damp[6]="(damp)";
  37. char normal[8]="(normal)";
  38. char light[10]="Light: ";
  39. char air[10] = "\r\nCO2: ";
  40. char temp[15]= "\r\ntempture: ";
  41. char wet[15] = "\r\nhumidity: ";
  42. void water_get(void);
  43. char receive(void);
  44. void ADCinit();
  45. void ATinit(void);
  46. void InitbSys(void);
  47. void light_get(void);
  48. void co2_get(void);
  49. void convert(void);
  50. void Delay(unsigned int time)
  51. {
  52.   unsigned int i,k;
  53.   for(i=0;i<255;i++)
  54.     for(k=0;k<time;k++)
  55.       _NOP();
  56. }

  57. //****************** 本地變量聲明  *************************//
  58. int ss[2];
  59. int flag1=0,i=0;
  60. int flag2=0,flag3=0,flag4=0;   //讀取短信內(nèi)容用到的 flag
  61. u8  Times=0,First_Int = 0,shijian=0;
  62. vu8 Timer0_start;
  63. char NBUF[5],TBUF[5];
  64. char CBUF[5],T2BUF[5];
  65. char HBUF[5],T3BUF[5];
  66. char TEBUF[5],T4BUF[5];
  67. //***************** 開始吧!!!!  *************************//
  68. void roll(int p)
  69. {
  70.     for(i=1;i<p;i++)
  71.     {
  72.         P6OUT |= BIT2;;
  73.         delay_us(500);
  74.         P6OUT &= ~BIT2;
  75.         delay_ms(20);
  76.     }
  77. }
  78. void rollback(int p)
  79. {
  80.     for(i=1;i<p;i++)
  81.     {
  82.         P6OUT |= BIT2;;
  83.         delay_us(2500);
  84.         P6OUT &=~BIT2;
  85.         delay_ms(20);
  86.     }
  87. }
  88. void humon(void)
  89. {
  90.     P7OUT &=~ BIT6;
  91.     delay_ms(100);
  92.     P7OUT |= BIT6;
  93. }
  94. void send_buf( char *p)
  95. {
  96.     while(*p !='\0') //C語(yǔ)言里字符串末尾自動(dòng)加“\0”(ASCII碼值為0)
  97.     {
  98.           while (!(UCA1IFG&UCTXIFG));
  99.           UCA1TXBUF=*p; //發(fā)送字符對(duì)應(yīng)的ASCII碼,12864指針可設(shè)置自動(dòng)指向下一個(gè)顯示地址
  100.           *p++;
  101.           Delay(40);
  102.     }
  103. }

  104. void main(void)
  105. {
  106.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  107.   P2DIR|=BIT3+BIT2+BIT1;
  108.   P2OUT|=BIT3+BIT2+BIT1;

  109.   P7DIR |= BIT4+BIT5+BIT6+BIT7;
  110.   P7OUT &=~(BIT4+BIT5+BIT6+BIT7);
  111.   P7OUT |= BIT6;
  112.   P6DIR|=BIT2;
  113.   FANOFF;

  114.   InitbSys();
  115.   ATinit();
  116.   ADCinit();

  117.   TA0CCTL0 = CCIE;
  118.   TA0CCR0 = 50000;
  119.   TA0CTL = TASSEL_2 + MC_1 + TACLR;

  120.   _EINT();
  121.    wait();
  122.    Set_Text_Mode();
  123.    Second_AT_Command("AT+CMGD=1,4","OK",3);
  124.    Delay(2000);
  125.   mode_flag=1;
  126.   light_flag=0;
  127.   while(1)
  128.   {


  129.       if(mode_flag==1)
  130.       {

  131.           P2OUT &=~ BIT1;
  132.           if((Find("C")||Find("M")||Find("T")||Find("I")))
  133.           {
  134.               P2OUT |= BIT1;

  135.               send_buf("AT+CMGR=1\r\n");
  136.               Delay(2000);

  137.               if(Find("aaa"))
  138.                   {
  139.                       roll(300);
  140.                       light_flag=1;
  141.                   }
  142.               else if(Find("bbb"))
  143.                   {
  144.                       rollback(270);
  145.                       light_flag=0;
  146.                   }
  147.               else if(Find("ccc"))
  148.                   {
  149.                     FANON;
  150.                   }
  151.               else if(Find("ddd"))
  152.                   {
  153.                     FANOFF;
  154.                   }
  155.               else if(Find("eee"))
  156.                   {
  157.                       PUMPON;
  158.                /*       Delay(5000);
  159.                       Delay(5000);
  160.                       Delay(5000);
  161.                       PUMPOFF;*/
  162.                   }
  163.               else if(Find("fff"))
  164.                   {
  165.                       PUMPOFF;
  166.                   }
  167.               else if(Find("ggg"))
  168.                   {
  169.                       humon();
  170.                   }

  171.               else if(Find("hhh"))
  172.                   {
  173.                       water_get();
  174.                       co2_get();
  175.                       light_get();
  176.                       convert();
  177.                       Send((char*)content);
  178.                   }
  179.               else if(Find("000"))
  180.                   {
  181.                   mode_flag=0;
  182.                   P2OUT &=~ BIT2;
  183.                   }

  184.               else{}

  185.               Clear();
  186.               Second_AT_Command("AT+CMGD=1,4","OK",3);
  187.               Delay(2000);
  188.               Second_AT_Command("AT+CMGD=1,4","OK",3);
  189.               Delay(2000);
  190.               Clear();
  191.           }
  192.        }
  193.       else
  194.       {
  195.           P2OUT &=~ BIT2;
  196.           P2OUT ^= BIT3;
  197.           light_get();
  198.           if((BUF[0]*255+BUF[1]>=300)&&(light_flag==0))
  199.               {
  200.                   roll(300);
  201.                   light_flag=1;
  202.               }
  203.           else if((BUF[0]*255+BUF[1]<=200)&&(light_flag==1))
  204.               {
  205.                   rollback(300);
  206.                   light_flag=0;
  207.               }
  208.           else{;}

  209.           water_get();
  210.           Delay(5000);

  211.           if((humdh*255+humdl>=9000)||(getco2[0]*100+getco2[1]>2300))
  212.           {
  213.               FANON;
  214.           }
  215.           else
  216.           {
  217.               FANOFF;
  218.           }
  219.           co2_get();

  220.       }
  221.    }

  222. // __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
  223. }

  224. #pragma vector=TIMER0_A0_VECTOR
  225. __interrupt void TIMER0_A0_ISP(void)
  226. {

  227.     if(Timer0_start)
  228.         Times++;
  229.     if(Times > (10*shijian))
  230.     {
  231.         Timer0_start = 0;
  232.         Times = 0;
  233.     }

  234. }


  235. #pragma vector=USCI_A1_VECTOR
  236. __interrupt void USCI_A1_ISR(void)
  237. {
  238.   switch(__even_in_range(UCA1IV,4))
  239.   {
  240.   case 0:break;                             // Vector 0 - no interrupt
  241.   case 2:                                   // Vector 2 - RXIFG
  242.       Buff[First_Int] = UCA1RXBUF;
  243.       First_Int++;
  244.       if(First_Int >= Max)
  245.           First_Int = 0;
  246.       break;
  247.   case 4:break;                             // Vector 4 - TXIFG
  248.   default: break;
  249.   }
  250. }

  251. #pragma vector=PORT2_VECTOR
  252. __interrupt void Key_interrput()
  253. {
  254.     if(P2IFG&BIT7)
  255.     {
  256.       Delay(200);
  257.       if(P2IFG&BIT7)
  258.       {
  259.           while((P2IN&BIT7)==0);//松手檢測(cè)
  260.           P2IFG &= ~BIT7;  //清除中斷標(biāo)志位

  261.           if(mode_flag==0)
  262.               {
  263.                  P2OUT |= BIT2+BIT3;
  264.                  mode_flag=1;     //暗淡狀態(tài)短信控制
  265.               }
  266.           else
  267.               {
  268.                  P2OUT &=~ BIT2;
  269.                  mode_flag=0;    //發(fā)光狀態(tài)自動(dòng)控制
  270.               }
  271. } } }

  272. #pragma vector=ADC12_VECTOR
  273. __interrupt void ADC12_ISR(void)
  274. {
  275.   switch(__even_in_range(ADC12IV,34))
  276.       {
  277.   case  0:break;
  278.   case  2:break;
  279.   case  4:break;
  280.   case  6:
  281.       getco2[0]=ADC12MEM0/100;
  282.       getco2[1]=ADC12MEM0%100;
  283.       //__bic_SR_register_on_exit(LPM0_bits);
  284.   case  8:break; case  9:break;   case  10:break; case  11:break;
  285.   case  12:break; case  13:break; case  14:break; case  15:break;
  286.   case  16:break; case  17:break; case  18:break; case  19:break;
  287.   case  20:break; case  21:break;
  288.   case  22:break; case  23:break; case  24:break; case  25:break;
  289.   case  26:break; case  27:break; case  28:break;
  290.   case  29:break; case  30:break; case  31:break; case  32:break;
  291.   case  33:break; case  34:break;
  292.   default:break;
  293.       }
  294. }
  295. void convert(void)
  296. {
  297.      int A,B,reall,realc,realh,realt;
  298.      for(i=0;i<200;i++)
  299.         content[i]=0;
  300.      ss[0]=getco2[0];
  301.      ss[1]=getco2[1];
  302. //*******************光強(qiáng)度獲取值轉(zhuǎn)換**********************//
  303.      reall=BUF[0]*255+BUF[1];
  304.      A=0;
  305.      for(i=0;i<5;i++)
  306.      {
  307.          NBUF[i] = (reall-A)/(pow(10,4-i));
  308.          A+=NBUF[i]*(pow(10,4-i));
  309.      }
  310.      for(i=0;i<5;i++)
  311.         NBUF[i]=NBUF[i]+48;
  312.      B=0;
  313.      for(i=0;i<5;i++)
  314.      {
  315.          if(NBUF[i]!=48)
  316.              {
  317.              TBUF[B]=NBUF[i];
  318.              B++;
  319.              }
  320.      }
  321. //*******************co2獲取值轉(zhuǎn)換**********************//
  322.      realc=getco2[0]*100+getco2[1];
  323.      A=0;
  324.      for(i=0;i<5;i++)
  325.       {
  326.           CBUF[i] = (realc-A)/(pow(10,4-i));
  327.           A+=CBUF[i]*(pow(10,4-i));
  328.       }
  329.       for(i=0;i<5;i++)
  330.          CBUF[i]=CBUF[i]+48;
  331.       B=0;
  332.       for(i=0;i<5;i++)
  333.       {
  334.           if(CBUF[i]!=48)
  335.               {
  336.               T2BUF[B]=CBUF[i];
  337.               B++;
  338.               }
  339.       }
  340. //*******************濕度獲取值轉(zhuǎn)換**********************//
  341.       realh=humdh*255+humdl;
  342.       A=0;
  343.       for(i=0;i<5;i++)
  344.        {
  345.            HBUF[i] = (realh-A)/(pow(10,4-i));
  346.            A+=HBUF[i]*(pow(10,4-i));
  347.        }
  348.        for(i=0;i<5;i++)
  349.            HBUF[i]=HBUF[i]+48;
  350.        B=0;
  351.        for(i=0;i<5;i++)
  352.        {
  353.            if(HBUF[i]!=48)
  354.                {
  355.                T3BUF[B]=HBUF[i];
  356.                B++;
  357.                }
  358.        }
  359. //*******************溫度獲取值轉(zhuǎn)換**********************//
  360.        realt=temph*255+templ;
  361.        A=0;
  362.        for(i=0;i<5;i++)
  363.         {
  364.             TEBUF[i] = (realt-A)/(pow(10,4-i));
  365.             A+=TEBUF[i]*(pow(10,4-i));
  366.         }
  367.         for(i=0;i<5;i++)
  368.             TEBUF[i]=TEBUF[i]+48;
  369.         B=0;
  370.         for(i=0;i<5;i++)
  371.         {
  372.             if(TEBUF[i]!=48)
  373.                 {
  374.                 T4BUF[B]=TEBUF[i];
  375.                 B++;
  376.                 }
  377.         }
  378. //******************************************************//
  379.       strcat(content,(char*)light);
  380.       strcat(content,(char*)TBUF);
  381.       strcat(content,(char*)air);
  382.       strcat(content,(char*)T2BUF);
  383.       //if(realc>2500) strcat(content,(char*)high);
  384.       //else strcat(content,(char*)normal);

  385.       strcat(content,(char*)wet);
  386.       strcat(content,(char*)T3BUF);
  387.     //  if(realh>600) strcat(content,(char*)damp);
  388.     //  else if(realh<100) strcat(content,(char*)dry);
  389.     //  else strcat(content,(char*)normal);

  390.       strcat(content,(char*)temp);
  391.       strcat(content,(char*)T4BUF);
  392.      // if(realt>1800) strcat(content,(char*)hot);
  393.      // else if(realt<400)  strcat(content,(char*)cold);
  394.      // else strcat(content,(char*)normal);

  395. }
  396. void ATinit(void)
  397. {
  398.     P4SEL |=BIT4+BIT5 ;                       // P5.6,7 = USCI_A1 TXD/RXD
  399.     UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  400.     UCA1CTL1 |= UCSSEL_2;                     // SMCLK
  401.     UCA1BR0 = 9;                              // 1MHz 115200 (see User's Guide)
  402.     UCA1BR1 = 0;                              // 1MHz 115200
  403.     UCA1MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
  404.     UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  405.     UCA1IE |= UCRXIE;                         // Enable USCI_A1 RX interrupt
  406. }

  407. void InitbSys()
  408. {
  409.     P2IE  |= BIT7; //設(shè)置p2.7可以中斷
  410.     P2IES |= BIT7; //設(shè)置p2.7為下降沿中斷
  411.     P2IFG &= ~BIT7;//設(shè)置p2.7為0 無(wú)中斷請(qǐng)求
  412.     P2REN |= BIT7; //設(shè)置p2.7為上下拉電阻使能
  413.     P2OUT |= BIT7;

  414.     UCSCTL4 |= SELS__DCOCLK ;
  415.     InitIIC();
  416.     WriteBH1750(0x01,1);
  417.     P4DIR|=BIT7;
  418. }
  419. void ADCinit()
  420. {
  421.     ADC12CTL0 = ADC12SHT02 + ADC12ON;
  422.     ADC12CTL1 = ADC12SHP;
  423.     ADC12IE   = 0X01;
  424.     ADC12CTL0 |= ADC12ENC;
  425.     P6SEL |= 0X01;

  426. }
  427. void light_get()
  428. {
  429.     WriteBH1750(0x01,1);
  430.     WriteBH1750(0x10,1);
  431.     delay_ms(180);
  432.     ReadBH1750Seq(0x01);


  433. }
  434. void co2_get()
  435. {
  436.     ADC12CTL0 |= ADC12SC;
  437.     //__bis_SR_register(LPM0_bits + GIE);
  438. }

  439. char receive(void)
  440. {
  441.   unsigned char num=0,tem,cnt;              //臨時(shí)變量用于存儲(chǔ)接受數(shù)據(jù)
  442.   for(cnt=0;cnt<8;cnt++)
  443.   {
  444.     tem=0;
  445.     while(!(P1IN&BIT4));       //等待14us的低電平結(jié)束
  446.     delay_us(26);
  447.     if((P1IN&BIT4))           /////////長(zhǎng)于30us定義為1
  448.     {
  449.       tem=1;
  450.       while((P1IN&BIT4));        //等待一位的采集結(jié)束
  451.     }
  452.     num<<=1;
  453.     num|=tem;
  454.   }
  455.   return num;
  456. }

  457. void water_get(void)
  458. {
  459.     P1DIR|=BIT4;
  460.     LOW;
  461.     delay_ms(20);
  462.     HIGH;
  463.     delay_us(30);         //20--40
  464.     P1DIR &=~BIT4;
  465.     if(!(P1IN&BIT4));             //從機(jī)發(fā)出響應(yīng)信號(hào)
  466.     {
  467.       while(!(P1IN&BIT4)); //等待響應(yīng)響應(yīng)結(jié)束
  468.       while((P1IN&BIT4));  //開始采集
  469.       humdh=receive();
  470.       humdl=receive();
  471.       temph=receive();
  472.       templ=receive();
  473.       check=receive();
  474.     }
  475. }

復(fù)制代碼

所有資料51hei提供下載:
Z8 LH.rar (725.19 KB, 下載次數(shù): 32)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:423060 發(fā)表于 2018-11-8 16:06 | 只看該作者
自頂~~~~~當(dāng)年的畢業(yè)設(shè)計(jì)
回復(fù)

使用道具 舉報(bào)

板凳
ID:423060 發(fā)表于 2018-11-8 16:06 | 只看該作者
本帖最后由 wonders 于 2018-11-8 16:09 編輯

當(dāng)年的畢業(yè)設(shè)計(jì)
回復(fù)

使用道具 舉報(bào)

地板
ID:1 發(fā)表于 2018-11-8 16:30 | 只看該作者
gsm模塊的名字是什么
回復(fù)

使用道具 舉報(bào)

5#
ID:189743 發(fā)表于 2018-11-11 22:41 | 只看該作者
用什么軟件打開里面的內(nèi)容????
回復(fù)

使用道具 舉報(bào)

6#
ID:423060 發(fā)表于 2018-11-16 22:29 | 只看該作者
admin 發(fā)表于 2018-11-8 16:30
gsm模塊的名字是什么

SIM900
回復(fù)

使用道具 舉報(bào)

7#
ID:423060 發(fā)表于 2018-11-16 22:30 | 只看該作者
我用430做的   一般430都是用CCS的吧 我就是
回復(fù)

使用道具 舉報(bào)

8#
ID:451410 發(fā)表于 2018-12-28 10:11 | 只看該作者
沒有圖嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区在线 | 久久精品国产精品青草 | 精品日韩一区 | 亚洲高清视频一区 | 日韩中文字幕免费在线 | 密室大逃脱第六季大神版在线观看 | 亚洲精品99久久久久久 | 久草网在线视频 | 成人精品鲁一区一区二区 | 在线伊人 | 福利视频网站 | 国产精品视频导航 | 日韩激情一区 | 97成人精品 | 欧美午夜精品理论片a级按摩 | 久久久精彩视频 | 亚洲91| 四虎影院免费在线播放 | 国产一级片 | 欧美国产精品一区二区 | 国产亚洲成av人片在线观看桃 | 欧美一区二区在线播放 | 欧美日韩国产一区二区三区 | 国产成人免费视频 | 天天射影院| 91视频在线观看 | a国产一区二区免费入口 | 亚洲精品视频在线看 | 国产超碰人人爽人人做人人爱 | 精品视频免费在线 | 亚洲精品视频在线观看免费 | 久久久精品日本 | 欧美成人一区二区三区 | 欧美日韩精品 | 日韩1区 | 亚洲精品一区中文字幕乱码 | 午夜影视大全 | 亚洲视频免费播放 | 国产一二区视频 | 最新黄色毛片 | 九九伦理电影 |