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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4721|回復: 1
打印 上一主題 下一主題
收起左側

基于SIM900A的電池自動滿電提醒及實時查詢電量裝置 附單片機源碼與仿真

[復制鏈接]
跳轉到指定樓層
樓主
作品:基于SIM900A的電池自動滿電提醒及實時查詢電量裝置,附件中含有SIM900A參考資料,源碼,仿真圖等

proteus仿真原理圖:仿真圖中不包含sim900A模塊,7805模塊可以將輸入電壓在6-36V之間的電壓穩定輸出為5V,作為ADC0832的電壓源以及參考電壓。



實物圖:測量的電池(核定電壓在12V)電量為10V左右,14.4V為滿電浮充狀態(以14.4V為滿電標準,信息顯示電滿),此時10V,則顯示少于90%電量。






單片機主函數代碼:
  1. /*******************************************************************************
  2. *  標題:        基于SIM900A的自動充電提醒以及實時查詢電量裝置                  *
  3. *  時間                      2018年10月10日16:12:42                            *
  4. *                                                                              *
  5. *  實驗說明:本裝置的核心是SIM900A模塊,需要調用SIM900A指令。本原理圖中ADC0832 *
  6. 的參考電壓為5V,由7805穩壓源提供7805的電源以及參考電壓。檢測電池的電壓在9-15V之 *
  7. 間,采用分壓方式,一個30K,一個10K電阻進行分壓。假如檢測電壓為15V,則輸入ADC0832 *
  8. 的電壓為5V。依次類推。                                                                                                                   *
  9.                                                                                *
  10. ********************************************************************************
  11. * 實驗心得:SIM900A是個難點,需要在電腦上進行調試。ADC0832進行AD轉化的時候,需 *
  12. 要研究下時序圖,在進行數據檢測的時候需要進行兩次檢測,如果前后兩次數據相等,那 *
  13. 么再返回得到的值,減少了測量誤差。7805穩壓源是個重要的部件,為了提供精確穩定的 *
  14. 5V參考電壓                                                                                                                                       *
  15. ********************************************************************************/

  16. #include <reg51.h>
  17. #include "UART.h"
  18. #include "DELAY.h"
  19. #include "define.h"
  20. #include "ADC0832.h"

  21. //全局變量
  22. #define Yes                1
  23. #define No                0
  24. typedef unsigned int u16;
  25. typedef unsigned char u8;
  26. unsigned char number[11]={'0','0','0','0','0','0','0','0','0','0','0'};
  27. unsigned char Voltage_bit;                //對電壓進行AD轉化后的數字信號,5V為參考電壓,此時Voltage_bit=256;
  28. float Percentage;                //電量百分比,Percentage = Voltage/256;

  29. /********測試GSM是否啟動**********/
  30. int test_boot;
  31. /********測試GSM是否注冊網絡**********/
  32. int test_net_register;
  33. /********測試是否有電話打入**********/
  34. int test_have_call;
  35. /********測試是否有信息發入**********/
  36. int test_have_SM;
  37. /********GSM串口接收數據緩存**********/
  38. unsigned char GSM_receive[60];      
  39. /********GSM串口接收計數器**********/
  40. unsigned char GSMDATA_count;
  41. /********號碼緩存*******************/
  42. /********短信發送程序********/

  43. //IO口定義
  44. sbit K1 = P2^0;
  45. sbit K2 = P2^1;
  46. sbit Powerkey = P2^2;
  47. sbit beep = P1^5;

  48. //短信發送程序
  49. void message()
  50. {
  51.         Send_String("AT+CMGF=1\r\n");//指定信息的輸入輸出格式為文本格式
  52.         Delay_Ms(100);
  53.         
  54.         Send_String("AT+CSMP=17,167,2,25\r\n");                                 //
  55.         Delay_Ms(100);
  56.         
  57.         Send_String("AT+CSCS=\"UCS2\"\r\n");                                 //設置為 UCS2 字符集編碼
  58.         Delay_Ms(100);
  59.         
  60.         Send_String("AT+CMGS=\"00310038003800380038003600340035003000300033\"\r\n");           //號碼18888645003的Unicode編碼,0031 0038 0038 0038 0038 0036 0034 0035 0030 0030 0033
  61.         Delay_Ms(100);
  62.         
  63.         Send_String("4E3B4EBAFF0C53C889C197625566\r\n");                                                                   //主人,又見面啦          4E3B 4EBA FF0C 53C8 89C1 9762 5566
  64.         Delay_Ms(100);        
  65.         Send_Char(0x1A);                                                                                                                                   //結束命令符號
  66.         Delay_Ms(200);
  67. }

  68. void Phonemessage()
  69. {
  70.         Send_String("AT+CMGF=1\r\n");//指定信息的輸入輸出格式為文本格式
  71.         Delay_Ms(100);
  72.         
  73.         Send_String("AT+CSMP=17,167,2,25\r\n");                                 //
  74.         Delay_Ms(100);
  75.         
  76.         Send_String("AT+CSCS=\"UCS2\"\r\n");                                 //設置為 UCS2 字符集編碼
  77.         Delay_Ms(100);
  78.         
  79.         Send_String("AT+CMGS=\"00310038003800380038003600340035003000300033\"\r\n");           //號碼18888645003的Unicode編碼,0031 0038 0038 0038 0038 0036 0034 0035 0030 0030 0033
  80.         Delay_Ms(100);
  81.         
  82.         Send_String("4E3B4EBAFF0C62116536523075358BDD5566\r\n");                                                                   //主人,我收到電話啦 4E3B 4EBA FF0C 6211 6536 5230 7535 8BDD 5566
  83.         Delay_Ms(100);        
  84.         Send_Char(0x1A);                                                                                                                                   //結束命令符號
  85.         Delay_Ms(200);
  86. }

  87. void othermessage()
  88. {
  89.         Send_String("AT+CMGF=1\r\n");//指定信息的輸入輸出格式為文本格式
  90.         Delay_Ms(100);
  91.         
  92.         Send_String("AT+CSMP=17,167,2,25\r\n");                                 //
  93.         Delay_Ms(100);
  94.         
  95.         Send_String("AT+CSCS=\"UCS2\"\r\n");                                 //設置為 UCS2 字符集編碼
  96.         Delay_Ms(100);
  97.         
  98.         Send_String("AT+CMGS=\"00310038003800380038003600340035003000300033\"\r\n");           //號碼18888645003的Unicode編碼,0031 0038 0038 0038 0038 0036 0034 0035 0030 0030 0033
  99.         Delay_Ms(100);
  100.         
  101.         /*Send_String("00560065006E00630065002C6211653652304F60768477ED4FE15566\r\n");                                                                   //主人,我收到電話啦 4E3B 4EBA FF0C 6211 6536 5230 7535 8BDD 5566
  102.         Delay_Ms(100);        
  103.         Send_Char(0x1A);                                                                                                                                   //結束命令符號
  104.         Delay_Ms(200);*/
  105. }

  106. void delay(u16 i)
  107. {
  108.         while(i--);      
  109. }

  110. void main()
  111. {
  112.         unsigned char j=0;
  113.         test_boot = No;
  114.         Powerkey = 0;
  115.         test_have_call=No;
  116.         test_have_SM = No;
  117.         //GSM啟動
  118.         Powerkey=1;
  119.         Delay_Ms(1000);                                //系統重啟在開機和關機之間的間隔要大于800ms.
  120.         Powerkey=0;
  121.         Uart_Init();
  122.         while(test_boot==No)
  123.         {
  124.                 Send_String("AT\r\n");                 //如果開機成功,則會返回一個OK,進入串口中斷
  125.                 Delay_Ms(1000);
  126.         }
  127.         Send_String("AT+CLIP=1\r\n");
  128.         Delay_Ms(100);
  129.          while(1)
  130.          {
  131.                 Voltage_bit = ADC0832(0);                        //從ADC轉化通道0進入,模數轉化后的值為Voltage_bit;
  132.                 Percentage = (float)Voltage_bit/256;        //電量百分比轉化語句
  133.                 j = 0;
  134.                 if(K1==0)
  135.                 {
  136.                         while(j==0)
  137.                         {
  138.                                 message();
  139.                                 j=1;
  140.                         }
  141.                         
  142.                 }

  143.                 if(K2==0)
  144.                 {
  145.                         while(j==0)
  146.                         {
  147.                                 othermessage();
  148.                                 j=1;
  149.                         }        
  150.                 }
  151.                 while(test_have_call==Yes)
  152.                 {
  153.                         if(number[10]=='3'&&number[9]=='0'&&number[8]=='0'&&number[7]=='5')
  154.                         Phonemessage();
  155.                         break;
  156.                 }
  157.                
  158.                 if(test_have_SM == Yes)
  159.                 {
  160.                          //Send_String("AT+CMGR=1\r\n");
  161.                          //if(GSM_receive[69]=='7'&&GSM_receive[70]=='5'&&GSM_receive[71]=='3'&&GSM_receive[72]=='5')
  162.                          //{
  163.                                   Send_String("AT+CMGD=1\r\n");
  164.                                  if(Percentage<=0.1)
  165.                                  {
  166.                                          othermessage();
  167.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003100300025\r\n");                                                                   //Vence,電量少于10%
  168.                                          Delay_Ms(100);        
  169.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  170.                                          Delay_Ms(200);
  171.                                          test_have_SM = No;
  172.                                          
  173.                                  }
  174.         
  175.                                  if(Percentage>0.1&&Percentage<=0.2)
  176.                                  {
  177.                                           othermessage();
  178.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003200300025\r\n");                                                                   //Vence,電量少于20%
  179.                                          Delay_Ms(100);        
  180.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  181.                                          Delay_Ms(200);
  182.                                          test_have_SM = No;
  183.                                          Send_String("AT+CMGD=1,4\r\n");
  184.                                  }
  185.         
  186.                                   if(Percentage>0.2&&Percentage<=0.3)
  187.                                  {
  188.                                           othermessage();
  189.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003300300025\r\n");                                                                   //Vence,電量少于30%
  190.                                          Delay_Ms(100);        
  191.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  192.                                          Delay_Ms(200);
  193.                                          test_have_SM = No;
  194.                                          Send_String("AT+CMGD=1,4\r\n");
  195.                                  }
  196.         
  197.                                   if(Percentage>0.3&&Percentage<=0.4)
  198.                                  {
  199.                                           othermessage();
  200.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003400300025\r\n");                                                                   //Vence,電量少于40%
  201.                                          Delay_Ms(100);        
  202.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  203.                                          Delay_Ms(200);
  204.                                          test_have_SM = No;
  205.                                          Send_String("AT+CMGD=1,4\r\n");
  206.                                  }
  207.         
  208.                                   if(Percentage>0.4&&Percentage<=0.5)
  209.                                  {
  210.                                           othermessage();
  211.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003500300025\r\n");                                                                   //Vence,電量少于50%
  212.                                          Delay_Ms(100);        
  213.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  214.                                          Delay_Ms(200);
  215.                                          test_have_SM = No;
  216.                                          Send_String("AT+CMGD=1,4\r\n");
  217.                                  }
  218.         
  219.                                   if(Percentage>0.5&&Percentage<=0.6)
  220.                                  {
  221.                                           othermessage();
  222.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003600300025\r\n");                                                                   //Vence,電量少于60%
  223.                                          Delay_Ms(100);        
  224.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  225.                                          Delay_Ms(200);
  226.                                          test_have_SM = No;
  227.                                          Send_String("AT+CMGD=1,4\r\n");
  228.                                  }
  229.         
  230.                                   if(Percentage>0.6&&Percentage<=0.7)
  231.                                  {
  232.                                           othermessage();
  233.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003700300025\r\n");                                                                   //Vence,電量少于70%
  234.                                          Delay_Ms(100);        
  235.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  236.                                          Delay_Ms(200);
  237.                                          test_have_SM = No;
  238.                                          Send_String("AT+CMGD=1,4\r\n");
  239.                                  }
  240.         
  241.                                   if(Percentage>0.7&&Percentage<=0.8)
  242.                                  {
  243.                                           othermessage();
  244.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003800300025\r\n");                                                                   //Vence,電量少于80%
  245.                                          Delay_Ms(100);        
  246.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  247.                                          Delay_Ms(200);
  248.                                          test_have_SM = No;
  249.                                          Send_String("AT+CMGD=1,4\r\n");
  250.                                  }
  251.         
  252.                                   if(Percentage>0.8&&Percentage<=0.9)
  253.                                  {
  254.                                           othermessage();
  255.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E003900300025\r\n");                                                                   //Vence,電量少于90%
  256.                                          Delay_Ms(100);        
  257.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  258.                                          Delay_Ms(200);
  259.                                          test_have_SM = No;
  260.                                          Send_String("AT+CMGD=1,4\r\n");
  261.                                  }
  262.         
  263.                                   if(Percentage>0.9&&Percentage<1)
  264.                                  {
  265.                                           othermessage();
  266.                                          Send_String("00560065006E00630065002C73B05728753591CF5C114E8E0031003000300025\r\n");                                                                   //Vence,電量少于100%
  267.                                          Delay_Ms(100);        
  268.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  269.                                          Delay_Ms(200);
  270.                                          test_have_SM = No;
  271.                                          Send_String("AT+CMGD=1,4\r\n");
  272.                                  }
  273.         
  274.                                  if(Percentage==1)
  275.                                  {
  276.                                           othermessage();
  277.                                          Send_String("00560065006E00630065002C73B05728753591CF4E3A0031003000300025\r\n");                                                                   //Vence,電量為100%
  278.                                          Delay_Ms(100);        
  279.                                          Send_Char(0x1A);                                                                                                                                   //結束命令符號
  280.                                          Delay_Ms(200);
  281.                                          test_have_SM = No;
  282.                                          Send_String("AT+CMGD=1,4\r\n");
  283.                                  }
  284.                          //}
  285.                         

  286.                 }               
  287.          }
  288. }

  289. /****************************************************************************/
  290. void uart(void) interrupt 4
  291. {
  292.         unsigned char UART_data;
  293.         unsigned char i;

  294.         if(RI)
  295.         {
  296.                 UART_data=SBUF;
  297.                 if(UART_data=='\n')
  298.                 {
  299.                         if(GSM_receive[0]=='O'&&GSM_receive[1]=='K')
  300.                                 test_boot=Yes;
  301.                         else
  302.                                 test_boot=No;
  303.                         
  304.                         if(GSM_receive[12]=='C')
  305.                                 test_net_register=Yes;
  306.                         else
  307.                                 test_net_register=No;     
  308.                         
  309.                         if(GSM_receive[0]=='R'&&GSM_receive[1]=='I'&&GSM_receive[2]=='N'&&GSM_receive[3]=='G')
  310.                         {
  311.                                 test_have_call=Yes;                                
  312.                         }
  313.                         else
  314.                         {
  315.                                 test_have_call=No;
  316.                         }
  317.                         
  318.                         if(GSM_receive[0]=='+'&&GSM_receive[1]=='C'&&GSM_receive[2]=='L'&&GSM_receive[3]=='I'&&GSM_receive[4]=='P')
  319.                         {
  320.                                 for(i=0;i<11;i++)
  321.                                 {
  322.                                         number[i]=GSM_receive[i+8];
  323.                                 }
  324.                                 //display_number(line_2,0x00);        
  325.                                 
  326.                                 
  327.                         }
  328.                         if(GSM_receive[0]=='+'&&GSM_receive[1]=='C'&&GSM_receive[2]=='M'&&GSM_receive[3]=='T'&&GSM_receive[4]=='I')
  329.                         {
  330.                                  test_have_SM = Yes;
  331.                         }
  332.                         GSMDATA_count=0;
  333.                 }
  334.                 else
  335.                 {
  336.                         GSM_receive[GSMDATA_count]=UART_data;
  337.                         GSMDATA_count++;
  338.                 }
  339.         }
  340.         RI=0;
  341. }
復制代碼



全部資料51hei下載地址:
SIM900A自動滿電提醒裝置.zip (8.4 MB, 下載次數: 51)



評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2018-10-10 17:08 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美精品区一区二区三区 | 国产精品日日摸夜夜添夜夜av | 国产精品一区二 | 免费美女网站 | 中文字幕第二区 | 亚洲欧美中文字幕在线观看 | 欧美日韩一区二区视频在线观看 | 久久久久久综合 | 欧美激情精品久久久久久变态 | 韩国av网站在线观看 | 免费观看一级视频 | 一区天堂 | 亚洲电影中文字幕 | 精品国产一区二区三区四区在线 | 久久久美女 | 91久久久久 | 亚洲国产精品成人无久久精品 | 国产一区二区三区在线观看免费 | 亚洲免费视频一区 | 日韩免费在线视频 | 免费网站国产 | 亚洲激情专区 | 国产欧美日韩视频 | 久久精品色欧美aⅴ一区二区 | 久久国产精品99久久久大便 | 精品在线一区 | 一区二区免费看 | 99色综合| 欧美激情综合五月色丁香小说 | 在线观看av网站永久 | 精品美女在线观看 | h在线播放 | 日韩欧美在线视频一区 | 日韩国产中文字幕 | 日日操av | 国产一区二区三区久久久久久久久 | 久久久久亚洲精品 | 成人一区二区三区视频 | 81精品国产乱码久久久久久 | 欧美日韩a | 欧美一级大片免费看 |