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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)GA6模塊程序資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:610681 發(fā)表于 2019-9-27 10:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
器件介紹
1、GPRS模塊 GA6(網(wǎng)絡(luò)、短信)






u GA6 尺寸 22.8mm x 16.8mm x 2.2 mm
u正常工作溫度:-30°C ~ +80°C
u 受限工作溫度:-40°C ~ -30°C +80°C ~+85°C*
u工作電壓 3.5V-4.2V;
u開機(jī)電壓>3.5V
uSLEEP 模式下的耗流為 0.9mA
u 四頻:GSM850, EGSM 900 DCS 1800PCS1900 可以自動的搜尋 四個頻段。 l 符合 GSM Phase 2 / 2+ l GPRS Class 10;
u靈敏度<-107;
u支持語音通話;
u支持 SMS 短信;
u支持移動和聯(lián)通2G,以及全球的GSM網(wǎng)絡(luò)
uGPRS 數(shù)據(jù)特性,最大數(shù)據(jù)速率,下載 85.6Kbps,上傳 42.8Kbps
u支持符合 GSM 07.10 協(xié)議的串口復(fù)用功能
u支持 2 個串口,一個下載串口,一個 AT 命令口;
uAT 命令支持標(biāo)準(zhǔn) AT TCP/IP 命令接口;
u支持?jǐn)?shù)字音頻和模擬音頻,支持 HRFREFRAMR 語音編碼;
u支持FCCCE認(rèn)證;
uSMT 42PIN 封裝;  

2、溫濕度模塊 DHT11




采用的傳統(tǒng)的溫濕度傳感器

3、土壤傳感器


土壤傳感器數(shù)字量和模擬量輸出,這個設(shè)計采用的是模擬量輸出;
模擬量通過 AD采集(ADC0832)計算出土壤濕度。

制作完成是實物

1.如果有電話呼入,LED7就會亮起來。

2.按下KEY1鍵可以接聽電話,電話接聽成功就會點亮相應(yīng)的LED。

3.按下KEY2鍵可以掛斷電話,電話掛斷成功就會點亮相應(yīng)的LED。

4.按鍵和LED對應(yīng)的端口,請參考程序。

  1. /**************************************************************
  2. GA6  模塊      
  3. 51 單片機(jī)例程      
  4. 實驗內(nèi)容 :  接聽和掛斷電話實驗  
  5. KEY1 : 接聽    KEY2 :掛斷

  6. 本例程使用11.0592MHZ時鐘---->必須為11.0592M
  7. 串口設(shè)置為:9600,8,n,1.
  8. 技術(shù)支持: 杜工

  9. ******************************************/
  10. #include <reg52.h>
  11. #include "string.h"
  12. #include "GA6_module_errors.h"

  13. typedef         unsigned char        u8;
  14. typedef         unsigned int        u16;
  15. typedef         unsigned long        u32;


  16. /*************        本地常量聲明        **************/

  17. #define Buf_Max                    70         //串口1緩存長度
  18. #define STABLE_TIMES          10        //等待AIR200上電后穩(wěn)定  

  19. /*************        本地變量聲明        **************/

  20. //串口1發(fā)送回車換行
  21. #define UART1_SendLR() UART1_SendData(0X0D);UART1_SendData(0X0A)

  22. /*LED端口定義*/

  23. sbit LED0 = P1^0;
  24. sbit LED1 = P1^1;
  25. sbit LED2 = P1^2;
  26. sbit LED3 = P1^3;
  27. sbit LED4 = P1^4;
  28. sbit LED5 = P1^5;
  29. sbit LED6 = P1^6;
  30. sbit LED7 = P1^7;

  31. /*KEY端口定義*/

  32. sbit KEY0 = P2^4;
  33. sbit KEY1 = P2^5;
  34. sbit KEY2 = P2^6;
  35. sbit KEY3 = P2^7;

  36. /*************  本地變量聲明        **************/
  37. xdata u8 Uart1_Buf[Buf_Max];
  38. u8 First_Int = 0;


  39. u16 count_20ms;
  40. u8  find_string_flag = 0;
  41. u8  has_call_flag = 0;

  42. /*************        本地函數(shù)聲明        **************/
  43. void delay_ms(u16 ms);   //延時ms個20ms  ms*20ms
  44. void CLR_Buf(void);      //清串口接收緩存
  45. u8          Find(u8 *a);        //查找字符串
  46. void UART1_SendData(u8 dat);   //串口1發(fā)送 1字節(jié)
  47. void UART1_Send_Command(char *s);
  48. u8   UART1_Send_AT_Command(u8 *b,u8 *a,u8 wait_time,u16 interval_time);//at命令發(fā)送
  49. u8 Wait_CREG(u8 query_times);

  50. void Timer0Init(void)                //20毫秒@115200
  51. {
  52.         TMOD &= 0xF0;               
  53.         TMOD |= 0x01;                //
  54.         TL0 = (65536-20000)%256;                //
  55.         TH0 = (65536-20000)/256;                //
  56.         TF0 = 0;                //
  57.         ET0 = 1;              //
  58.         TR0 = 1;                //開始計時
  59. }

  60. void Uart1Init(void)                //9600bps@11.05926MHz
  61. {
  62.         PCON &= 0x7F;                //
  63.         SCON = 0x50;                //
  64.         TMOD &= 0x0F;                //
  65.         TMOD |= 0x20;                //
  66.         TL1 = 0xFD;                  //
  67.         TH1 = 0xFD;                  //
  68.         ET1 = 0;                    //
  69.         TR1 = 1;                    //
  70.         ES  = 1;                                        //
  71. }

  72. int ack_call(void)
  73. {
  74.         int ret;
  75.        
  76.         ret = UART1_Send_AT_Command("AT","OK",3,50);//測試通信是否成功
  77.         if(ret == 0)
  78.         {
  79.                 return COMMUNITE_ERROR;
  80.         }
  81.        
  82.         ret = UART1_Send_AT_Command("AT+CPIN?","READY",2,50);//查詢卡是否插上
  83.         if(ret == 0)
  84.         {
  85.                 return NO_SIM_CARD_ERROR;
  86.         }
  87.        
  88.         ret = Wait_CREG(3);//查詢卡是否注冊到網(wǎng)絡(luò)
  89.         if(ret == 0)
  90.         {
  91.                 return SIM_CARD_NO_REG_ERROR;
  92.         }
  93.        
  94.        
  95.         ret = UART1_Send_AT_Command("ATA","OK",2,50);//接聽電話
  96.         if(ret == 0)
  97.         {
  98.                 return ATA_ERROR;
  99.         }
  100.        
  101.         return 1;
  102. }

  103. int hang_call(void)
  104. {
  105.         int ret;
  106.        
  107.         ret = UART1_Send_AT_Command("ATH","OK",2,50);//掛斷電話
  108.         if(ret == 0)
  109.         {
  110.                 return ATH_ERROR;
  111.         }
  112.        
  113.         return 1;
  114. }

  115. /**********************************************/
  116. /*設(shè)計思路:
  117. (0)進(jìn)行串口、定時器初始化工作。
  118. (1)開機(jī)等待10秒,等待模塊準(zhǔn)備好。
  119. (2)發(fā)送相應(yīng)的指令。
  120. ************************************************/
  121. void main(void)
  122. {
  123.         u8 i;
  124.         int ret;
  125.        
  126.         Uart1Init(); //串口初始化
  127.         Timer0Init();//TIM0初始化
  128.         EA = 1;      //開啟總中斷
  129.        
  130.         for(i = 0;i < STABLE_TIMES;i++)//等待網(wǎng)絡(luò)穩(wěn)定
  131.         {
  132.                 delay_ms(50);
  133.         }
  134.          
  135.         has_call_flag = 1;
  136.         while (1)                    
  137.         {
  138.                 delay_ms(25);
  139.                 LED0 = ~LED0;//進(jìn)入主程序的指示燈
  140.                                
  141.                 if(find_string_flag == 1)
  142.                 {
  143.                         delay_ms(10);
  144.                         if(Find("RING"))
  145.                         {

  146.                                 LED7 = 0;
  147.                                 if(KEY1==0)
  148.                                 {       
  149.                                         delay_ms(1);

  150.                                         if(KEY1==0)
  151.                                         {                       
  152.                                                 while(!KEY1);
  153.                                                 ret = ack_call();//接聽電話

  154.                                                 if(ret == 1)
  155.                                                 {
  156.                                                         LED1 = 0;
  157.                                                 }
  158.                                                 else
  159.                                                 {
  160.                                                         LED1 = 1;
  161.                                                 }
  162.                                         }
  163.                                         find_string_flag = 0;
  164.                                 }               
  165.                         }
  166.                         else
  167.                         {
  168.                                 LED7 = 1;
  169.                                 find_string_flag = 0;
  170.                         }
  171.                 }
  172.                
  173.                 if(KEY2==0)
  174.                 {       
  175.                         delay_ms(1);
  176.                        
  177.                         if(KEY2==0)
  178.                         {                       
  179.                                 while(!KEY2);
  180.                                 ret = hang_call();//掛斷電話
  181.                                 if(ret == 1)
  182.                                 {
  183.                                         LED2 = 0;
  184.                                 }
  185.                                 else
  186.                                 {
  187.                                         LED2 = 1;
  188.                                 }
  189.                         }                       
  190.                 }
  191.                
  192.         }
  193. }

  194. /*******************************************************************************
  195. * 函數(shù)名 : Timer0_ISR
  196. * 描述   : 定時器0中斷服務(wù)入口函數(shù),1ms中斷一次
  197. * 輸入   :
  198. * 輸出   :
  199. * 返回   :
  200. * 注意   :
  201. *******************************************************************************/
  202. void Timer0_ISR() interrupt 1
  203. {
  204.         TR0=0;//關(guān)定時器
  205.         TL0 = (65536-20000)%256;                //重設(shè)定時器初值
  206.         TH0 = (65536-20000)/256;                //
  207.        
  208.         if(count_20ms > 0) //20ms延時計數(shù)器
  209.         {
  210.                 count_20ms--;
  211.         }       
  212.        
  213.         TR0=1;//開定時器
  214. }


  215. /********************* UART1中斷函數(shù)************************/
  216. void UART1_ISR (void) interrupt 4
  217. {
  218.         if (RI)
  219.         {
  220.                 RI = 0;                           //清除RI位
  221.                 Uart1_Buf[First_Int] = SBUF;            //將接收到的字符串存到緩存中
  222.                 First_Int++;                          //緩存指針向后移動
  223.                 if(First_Int > Buf_Max)                 //如果緩存滿,將緩存指針指向緩存的首地址
  224.                 {
  225.                         First_Int = 0;
  226.                 }
  227.                
  228.                 if(has_call_flag == 1)
  229.                 {
  230.                         if(First_Int > 8)
  231.                         {
  232.                                 find_string_flag = 1;
  233.                         }
  234.                 }
  235.         }
  236.         if (TI)
  237.         {
  238.                 TI = 0;                          //清除TI位
  239.         }
  240. }


  241. /*******************************************************************************
  242. * 函數(shù)名 : CLR_Buf
  243. * 描述   : 清除串口2緩存數(shù)據(jù)
  244. * 輸入   :
  245. * 輸出   :
  246. * 返回   :
  247. * 注意   :
  248. *******************************************************************************/
  249. void CLR_Buf(void)
  250. {
  251.         u8 k;
  252.         for(k=0;k<Buf_Max;k++)      //將緩存內(nèi)容清零
  253.         {
  254.                 Uart1_Buf[k] = 0x00;
  255.         }
  256.     First_Int = 0;              //接收字符串的起始存儲位置
  257. }


  258. /*******************************************************************************
  259. * 函數(shù)名 : Find
  260. * 描述   : 判斷緩存中是否含有指定的字符串
  261. * 輸入   :
  262. * 輸出   :
  263. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  264. * 注意   :
  265. *******************************************************************************/

  266. u8 Find(u8 *a)
  267. {
  268.         ES = 0;  //改進(jìn)程序
  269.         if(strstr(Uart1_Buf,a)!=NULL)
  270.         {
  271.                 ES = 1;
  272.                 return 1;
  273.         }       
  274.         else
  275.         {
  276.                 ES = 1;
  277.                 return 0;
  278.         }
  279.                
  280. }



  281. /*******************************************************************************
  282. * 函數(shù)名 : Wait_CREG
  283. * 描述   : 等待模塊注冊成功
  284. * 輸入   :
  285. * 輸出   :
  286. * 返回   :
  287. * 注意   :
  288. *******************************************************************************/
  289. u8 Wait_CREG(u8 query_times)
  290. {
  291.         u8 i;
  292.         u8 k;
  293.         u8 j;
  294.         i = 0;
  295.         CLR_Buf();
  296.         while(i == 0)                               
  297.         {

  298.                 UART1_Send_Command("AT+CREG?");
  299.                 delay_ms(100);
  300.                
  301.                 for(k=0;k<Buf_Max;k++)                             
  302.                 {
  303.                         if((Uart1_Buf[k] == '+')&&(Uart1_Buf[k+1] == 'C')&&(Uart1_Buf[k+2] == 'R')&&(Uart1_Buf[k+3] == 'E')&&(Uart1_Buf[k+4] == 'G')&&(Uart1_Buf[k+5] == ':'))
  304.                         {
  305.                                          
  306.                                 if((Uart1_Buf[k+7] == '1')&&((Uart1_Buf[k+9] == '1')||(Uart1_Buf[k+9] == '5')))
  307.                                 {
  308.                                         i = 1;
  309.                                         return 1;
  310.                                 }
  311.                                
  312.                         }
  313.                 }
  314.                 j++;
  315.                 if(j > query_times)
  316.                 {
  317.                         return 0;
  318.                 }
  319.                
  320.         }
  321.         return 0;
  322. }



  323. /*----------------------------
  324. UART1 發(fā)送串口數(shù)據(jù)
  325. -----------------------------*/
  326. void UART1_SendData(u8 dat)
  327. {
  328.         ES=0;                        //關(guān)串口中斷
  329.         SBUF=dat;                       
  330.         while(TI!=1);        //等待發(fā)送成功
  331.         TI=0;                        //清除發(fā)送中斷標(biāo)志
  332.         ES=1;                        //開串口中斷
  333. }

  334. /**********************************
  335. 發(fā)送命令
  336. **********************************/
  337. void UART1_Send_Command(char *s)
  338. {
  339.         CLR_Buf();
  340.         while(*s)//檢測字符串結(jié)束符
  341.         {
  342.                 UART1_SendData(*s++);//發(fā)送當(dāng)前字符
  343.         }
  344.         UART1_SendLR();
  345. }

  346. /*******************************************************************************
  347. * 函數(shù)名 : Second_AT_Command
  348. * 描述   : 發(fā)送AT指令函數(shù)
  349. * 輸入   : 發(fā)送數(shù)據(jù)的指針、希望收到的應(yīng)答、發(fā)送等待時間(單位:interval_time*20 ms)
  350. * 輸出   :
  351. * 返回   :
  352. * 注意   :
  353. *******************************************************************************/

  354. u8 UART1_Send_AT_Command(u8 *b,u8 *a,u8 wait_time,u16 interval_time)         
  355. {
  356.         u8 i;

  357.         CLR_Buf();
  358.         i = 0;
  359.         while(i < wait_time)                    
  360.         {
  361.                 UART1_Send_Command(b);
  362.                 delay_ms(interval_time);
  363.                 if(Find(a))            //查找需要應(yīng)答的字符
  364.                 {
  365.                         return 1;
  366.                 }
  367.                 i++;
  368.         }
  369.        
  370.         return 0;
  371. }

  372. void delay_ms(u16 ms)
  373. {
  374.          count_20ms = ms;
  375.          while(count_20ms);
  376. }
復(fù)制代碼


GA6資料下載
       GA6_硬件規(guī)格書_V1.04.pdf (1.19 MB, 下載次數(shù): 18)


GA6源程序下載
       GA6-51單片機(jī)例程.zip (129.08 KB, 下載次數(shù): 29)


DHT11技術(shù)資料下載
       DHT11說明書.pdf (998.76 KB, 下載次數(shù): 13)

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

使用道具 舉報

沙發(fā)
ID:738184 發(fā)表于 2020-5-20 22:34 | 只看該作者
請問一下有代碼嗎?想學(xué)習(xí)一下
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品第一页 | 欧洲精品一区 | 自拍偷拍亚洲视频 | 91成人在线视频 | 欧美成年人网站 | 欧美精品一区二区三区四区 在线 | 欧美精品国产一区二区 | 91精品国产一区二区三区 | 亚洲一区二区三区免费视频 | 亚洲精品一区在线观看 | 国产日韩一区二区三免费 | 日韩欧美一区二区三区 | 中文字幕在线观看 | 亚洲综合色视频在线观看 | 精品在线一区二区 | 国产一区二区三区四区在线观看 | 国产精品爱久久久久久久 | 中文字幕一区二区视频 | 久久免费香蕉视频 | 日韩人体在线 | 综合激情av | 日韩精品免费视频 | 91影院| 亚洲在线一区二区 | 亚洲国产视频一区二区 | 亚洲成人免费av | 国产一区二 | 国产一区二区影院 | 91新视频 | 久久国产精品久久久久久 | 青青草华人在线视频 | 免费在线观看黄视频 | 亚洲欧美国产一区二区三区 | 日韩中文字幕网 | 亚洲成人日韩 | 毛片一级电影 | 天天天天操 | 成人福利网站 | 亚洲人人 | 成年人黄色免费视频 | 亚洲一区二区精品视频在线观看 |