嵌入式第11次實驗

嵌入式軟件設計第11次實驗報告?

學號:140201236 ? ? ? ? ? ? 姓名:沈樟偉

組別:第2組??????????????? 實驗地點:D19

一、實驗目的:

1、了解短信AT指令的使用方法。

2、掌握使用短信AT指令驅動SIM900A發送和接收短信的方法。

二、實驗內容:

1.使用AT命令進行模塊測試,發送和接收短信。

2.編寫程序利用觸摸屏完成固定號碼短信的發送和接收。(需要加上AT測試命令模塊、手機SIM卡檢測模塊、手機信號質量檢測模塊等等。)

三、實驗過程描述及結果展示:

短信常用AT指令

?

程序代碼:

#include "sys.h" #include "delay.h"? #include "usart.h"? #include "led.h" #include "lcd.h" #include "key.h"? #include "touch.h"? #include "text.h" #include "w25qxx.h"? #include "malloc.h"? #include "ff.h"? #include "exfuns.h"? #include <string.h> const u16 POINT_COLOR_TBL[OTT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};? extern u16 USART3_RX_STA;? extern u8 USART3_RX_BUF[400]; unsigned char cnt = 0; unsigned char *SMS = 0; u8 SMS_string[10]={"AT+CMGR="}; void LCD_Draw_Circle(u16 x0,u16 y0,u8 r); //串口3發送數據示例代碼 // USART_SendData(USART3,send_string[i]); // while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待發送結束 //串口3接收數據示例代碼 // while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET); // receive_string[i] = (USART_ReceiveData(USART3));

int main(void) {

// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2 delay_init(168); //初始化延時函數 uart_init(115200); //初始化串口波特率為115200 uart3_init(115200);?

LED_Init(); //初始化LED? LCD_Init(); //LCD初始化? tp_dev.init(); //觸摸屏初始化

LCD_Clear(BLACK); POINT_COLOR=YELLOW;//設置字體為黃色 BACK_COLOR = BLACK;

//初始化SIM900A //發AT測試命令 //設置短信的新消息提示AT+CNMI=2,1; { unsigned char temp; unsigned char send_string0[] = {"AT+CNMI=2,1\x0d\x0a"}; unsigned char send_string1[] = {"AT+CMGF=1\r\n"}; unsigned char send_string2[] = {"AT+CSCS=\"GSM\"\r\n"};

for(temp=0;temp<2;temp++) { USART_SendData(USART3,'A'); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET); USART_SendData(USART3,'T'); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET); USART_SendData(USART3,'0x0d'); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET); USART_SendData(USART3,'0x0a'); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET); } delay_ms(100);

for(temp=0;temp<13;temp++)//發送AT+CNMI=2,1\x0d\x0a { USART_SendData(USART3,send_string0[temp]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET); } delay_ms(100);

for(temp=0;temp<11;temp++)//發送AT+CMGP=1\r\n { USART_SendData(USART3,send_string1[temp]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET); } delay_ms(100);

for(temp=0;temp<15;temp++)//發送AT+CSCS=\"GSM\"\r\n { USART_SendData(USART3,send_string2[temp]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET); } delay_ms(100); } USART3_RX_STA = 0;

//以下代碼構建短信發送菜單 { Show_Str(30,30,200,24,"命令按鈕區",24,1); Show_Str(248,30,200,24,"文本區",24,1);?

LCD_DrawRectangle(30,70,174,118);//AT測試按鈕方程 Show_Str(42,82,200,24,"AT測試按鈕",24,1); LCD_DrawRectangle(248,70,452,118);//AT測試按鈕的顯示文字框

LCD_DrawRectangle(30,142,222,190);//SIM卡測試按鈕方程 Show_Str(42,154,204,24,"卡狀態測試按鈕",24,1); LCD_DrawRectangle(248,142,452,190);//

LCD_DrawRectangle(30,214,198,262); Show_Str(42,226,204,24,"信號測試按鈕",24,1); LCD_DrawRectangle(248,214,452,262);

LCD_DrawLine(0,282,479,282);

Show_Str(42,338,204,24,"發送按鈕",24,1); LCD_DrawRectangle(30,326,162,374);

Show_Str(168,310,204,16,"發送號碼",16,1); LCD_ShowString(256,310,88,16,16,"17801017974"); LCD_DrawRectangle(248,302,452,334);

Show_Str(168,358,204,16,"發送內容",16,1); LCD_ShowString(256,358,150,16,16,"this is test text"); LCD_DrawRectangle(248,350,452,382);

LCD_DrawLine(0,402,479,402);//畫分割線

Show_Str(42,458,204,24,"接收按鈕:",24,1); LCD_DrawRectangle(30,446,162,494);

Show_Str(168,430,204,16,"來信號碼:",24,1); LCD_DrawRectangle(248,422,452,454);

Show_Str(168,478,204,16,"提示燈",16,1);

Show_Str(42,510,204,16,"短信內容:",24,1); LCD_DrawRectangle(30,526,452,766);

//畫個圓框用來做短信提示 { int i; POINT_COLOR=YELLOW;//設置字體為黃色 for(i=20;i<22;i++) { LCD_Draw_Circle(272,486,i); } } }

//以下代碼掃描觸摸屏檢測按鍵 while(1) { tp_dev.scan(0); if(tp_dev.x[0]>30 && tp_dev.x[0]<174 && tp_dev.y[0]>70 &&tp_dev.y[0]<118)//AT測試按鈕的按鍵區域 { u8 i; u8 send_string[] = {"AT\r\n"}; u8 receive_string[20] = {0}; char *p_display; receive_string[19] = '\0';

while(tp_dev.sta & 0x80)//等待觸摸屏按鍵松開 tp_dev.scan(0); USART_ClearFlag(USART3,USART_FLAG_TC);//加上此句,串口發送的第一個字節就不會丟失 for(i=0;i<4;i++) { USART_SendData(USART3,send_string[i]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!= SET);//等待發送結束 }

//清除觸摸值 tp_dev.x[0]=0xFFFF; tp_dev.y[0]=0xFFFF; }

if(tp_dev.x[0]>30 && tp_dev.x[0]<222 && tp_dev.y[0]>142 &&tp_dev.y[0]<190)//SIM卡狀態測試按鈕 { u8 i; u8 send_string[] = {"AT+CPIN?\r\n"}; u8 receive_string[32] = {0}; char *p_display; receive_string[31] = '\0';

while(tp_dev.sta & 0x80)//等待觸摸屏按鍵松開 tp_dev.scan(0); USART_ClearFlag(USART3,USART_FLAG_TC);//加上此句,串口發送的第一個字節就不會丟失 for(i=0;i<10;i++) { USART_SendData(USART3,send_string[i]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!= SET);//等待發送結束 }

//清除觸摸值 tp_dev.x[0]=0xFFFF; tp_dev.y[0]=0xFFFF; }

if(tp_dev.x[0]>30 && tp_dev.x[0]<198 && tp_dev.y[0]>214 &&tp_dev.y[0]<262)//信號狀態測試按鈕 { u8 i; u8 send_string[] = {"AT+CSQ\r\n"}; u8 receive_string[32] = {0}; char *p_display; receive_string[31] = '\0';

while(tp_dev.sta & 0x80)//等待觸摸屏按鍵松開 tp_dev.scan(0); USART_ClearFlag(USART3,USART_FLAG_TC);//加上此句,串口發送的第一個字節就不會丟失 for(i=0;i<8;i++) { USART_SendData(USART3,send_string[i]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!= SET);//等待發送結束 }

//清除觸摸值 tp_dev.x[0]=0xFFFF; tp_dev.y[0]=0xFFFF; }

if(tp_dev.x[0]>30 && tp_dev.x[0]<162 && tp_dev.y[0]>326 &&tp_dev.y[0]<374)//發送固定短信測試按鈕 { u8 i; u8 send_string1[] = {"AT+CMGS=\"13021257803\"\r\n"}; u8 send_string2[] = {"This is test text!\x1A"};

while(tp_dev.sta & 0x80)//等待觸摸屏按鍵松開 tp_dev.scan(0); USART_ClearFlag(USART3,USART_FLAG_TC);//加上此句,串口發送的第一個字節就不會丟失 for(i=0;i<23;i++) { USART_SendData(USART3,send_string1[i]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!= SET);//等待發送結束 }

delay_ms(100);

for(i=0;i<19;i++) { USART_SendData(USART3,send_string2[i]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!= SET);//等待發送結束 }

//清除觸摸值 tp_dev.x[0]=0xFFFF; tp_dev.y[0]=0xFFFF; } if(tp_dev.x[0]>30 && tp_dev.x[0]<162 && tp_dev.y[0]>446 &&tp_dev.y[0]<494)//有短信提示后,短信接受按鈕 { u8 i; u8 send_string[100] = {"AT+CMGR=\r\n"}; u8 data_r_n[] = {"\r\n\n"}; char *p_display;

while(tp_dev.sta & 0x80)//等待觸摸屏按鍵松開 tp_dev.scan(0); USART_ClearFlag(USART3,USART_FLAG_TC);//加上此句,串口發送的第一個字節就不會丟失

strcat(send_string,SMS); strcat(send_string,data_r_n);

for(i=0;i<12;i++) { USART_SendData(USART3,send_string[i]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!= SET);//等待發送結束 }

//清除同心圓,表示短信已閱讀 { int i; POINT_COLOR = BLACK; for(i=1;i<20;i++) { LCD_Draw_Circle(272,486,i); } POINT_COLOR = YELLOW; }

//清除觸摸值 tp_dev.x[0]=0xFFFF; tp_dev.y[0]=0xFFFF; } //以下代碼根據串口3收到的信息作出相應的動作 if(USART3_RX_STA & 0x8000)//接收到一次數據 { char *p_display; USART3_RX_BUF[USART3_RX_STA & 0x7FFF] = 0;//添加結束符號

if(p_display = strstr((const char*)USART3_RX_BUF,(const char*)"AT\r\n"))//當收到AT的反饋時 { p_display = p_display+6; LCD_ShowString(260,82,240,24,24,(u8 *)p_display); }

if(p_display = strstr((const char*)USART3_RX_BUF,(const char*)"AT+CPIN?"))//當收到SIM卡狀態查詢命令的反饋時 { p_display = p_display+19; LCD_ShowString(260,154,240,24,24,(u8 *)p_display); }

if(p_display = strstr((const char*)USART3_RX_BUF,(const char*)"AT+CSQ"))//當收到信號強度測試命令的反饋時 { p_display = p_display+10; LCD_ShowString(260,226,240,24,24,(u8 *)p_display); }

if(p_display = strstr((const char*)USART3_RX_BUF,(const char*)"+CMTI:"))//當收到新消息提示符 { p_display = p_display+12; SMS = p_display; //畫同心圓表示來短信了 { int i; POINT_COLOR = RED; for(i=1;i<20;i++) { LCD_Draw_Circle(272,486,i); } POINT_COLOR = YELLOW; } }

if(p_display = strstr((const char*)USART3_RX_BUF,(const char*)"+32"))//當收到消息正文后 { p_display = p_display+6; LCD_ShowString(38,534,320,16,16," "); LCD_ShowString(38,534,320,16,16,p_display);

//給出短信號碼 { p_display = strstr((const char*)USART3_RX_BUF,(const char*)"+86"); p_display = p_display+3; LCD_ShowString(256,430,88,16,16," "); LCD_ShowString(256,430,88,16,16,p_display); } } USART_RX_STA=0; } } }

實驗結果:

?

總結:

???? ?本次實驗的任務是.使用AT命令進行模塊測試,發送和接收短信,并編寫程序利用觸摸屏完成固定號碼短信的發送和接收。經過我們的認真思考,總體上沒有太大的問題。開始時由于手機開信號的不穩定,造成了一些不必要的問題。其次是由于在程序中加了一句輸出語句,導致檢驗時多一次輸出語句。這次實踐加深了我對嵌入式的理解與興趣。

?

轉載于:https://www.cnblogs.com/shenzhangwei/p/6659328.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284065.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284065.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284065.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux文件系統之df

df用于查看當前掛載的文件系統-a 查看所有的文件系統可以自己指定容量單位&#xff0c;-BM -BG 但是還是h的選項好用-i 查看inode的使用信息-l(L) 顯示本地文件系統--output 可以指定管理員想要看的列--outputField_List可用的字段有source fstype itotal iused iavail ipcent …

普通老實人的生活

2019獨角獸企業重金招聘Python工程師標準>>> 有一個朋友&#xff0c;他家有一套營業房&#xff0c;租給了兩個年輕人&#xff0c;合同簽訂為半年&#xff0c;房租7000&#xff0c;合同到期當天&#xff0c;乙方一直沒有聯系甲方&#xff0c;說明續租或不續租&#x…

如何在 C# 中運行 Python 代碼

前言Python是一門強大的編程語言。特別的是&#xff0c;它還具有眾多出色的庫&#xff08;例如numPy&#xff0c;sciPy&#xff0c;pandas等&#xff09;&#xff0c;可以顯著簡化和加速開發。因此&#xff0c;在解決某些問題時&#xff0c;通過 Python 實現可能是最理想的方式…

Ubuntu開機默認進入命令行模式/用戶圖形界面

一、開機默認進入命令行模式 # 輸入命令&#xff1a; sudo systemctl set-default multi-user.target # 重啟&#xff1a; reboot要進入圖形界面&#xff0c;只需要輸入命令startx 從圖形界面切換回命令行&#xff1a;ctrlaltF7 二、開機默認進入圖形用戶界面 # 輸入命令&…

數組查找數字5

public class Second {/*** param args*/public static void main(String[] args) {// TODO Auto-generated method stubint []a{2,1,3,4,5};for (int i0;i<a.length-1;i){if(a[i]!5){i;}}System.out.println("這組數里有5呢"); }} 轉載于:https://www.cnblogs.co…

【QGIS入門實戰精品教程】10.2:QGIS中DEM三維顯示方法

QGIS中數字高程模型DEM三維顯示方法。 參考閱讀: 【ArcGIS Pro微課1000例】0006:ArcGIS Pro 2.5三維顯示DEM數字高程模型 【ArcGIS Pro微課1000例】0005:ArcGIS Pro 2.5基于矢量數據制作拉伸三維地圖案例 ArcGIS實驗教程——實驗二十六:ArcScene實現二維數據的三維顯示 文章…

AUTH password

為redis服務請求設置一個密碼。redis可以設置在客戶端執行commands請求前需要通過密碼驗證。通過修改配置文件的requirepass就可以設置密碼。 如果密碼與配置文件里面設置的密碼一致&#xff0c;服務端就會發會一個OK的狀態碼&#xff0c;接受客戶端發送其他的請求命令&#xf…

基于Dubbo框架構建分布式服務(三)

我們將上面開發的服務提供方服務&#xff0c;部署到2個獨立的節點上&#xff08;192.168.14.1和10.10.4.125&#xff09;&#xff0c;然后可以通過Dubbo管理中心查看對應服務的狀況&#xff0c;如圖所示&#xff1a; 上圖中可以看出&#xff0c;該服務有兩個獨立的節點可以提供…

開篇-開啟全新的.NET現代應用開發體驗

01云原生技術底座暢想DaprMASA Framework研發管理研發協作平臺&#xff1a;CI/CD、Application ManagementApplication Quota Management、Version Control、Troubleshooting、Testable網格應用程序管理API網關&#xff1a;Reverse Proxy、Traffic Control 、Security Strategy…

Ubuntu安裝docker詳細教程

1.安裝 sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository &qu…

java多線程編程——鎖優化

并發環境下進行編程時&#xff0c;需要使用鎖機制來同步多線程間的操作&#xff0c;保證共享資源的互斥訪問。加鎖會帶來性能上的損壞&#xff0c;似乎是眾所周知的事情。然而&#xff0c;加鎖本身不會帶來多少的性能消耗&#xff0c;性能主要是在線程的獲取鎖的過程。如果只有…

【QGIS入門實戰精品教程】10.3:QGIS柵格DEM數據重復類方法案例匯總

QGIS柵格DEM數據重復類方法案例匯總:按表格重分類、按圖層重分類。 參考閱讀: 【GlobalMapper精品教程】029:柵格重分類案例詳解 ArcGIS實驗教程——實驗四十三:ArcGIS柵格重分類(Reclass)案例詳解 ArcGIS怎樣獲取重分類后各類所占的像元個數 文章目錄 一、按表格分類二、…

QT添加rtmp庫的時候出現問題

剛開始出現undefined reference to __chkstk的錯誤。 然后在vc里面找到chkstk.obj放到相關目錄下并在工程文件直接添加&#xff1a; LIBS "E:\QTProjects\RTMP\RTMPDelayTest\librtmp\lib\chkstk.obj" 又出現了新的錯誤 E:\QTProjects\RTMP\RTMPDelayTest\librtmp\l…

@Before,@BeforeClass,@BeforeEach和@BeforeAll之間的區別

Before的代碼在每次測試之前執行 BeforeClass在整個測試方法執行之前運行一次 如果您的測試類有十個測試&#xff0c;則Before代碼將執行十次&#xff0c;但是BeforeClass將僅執行一次。 當多個測試需要共享相同的代碼時&#xff0c;可以使用BeforeClass 。 建立數據庫連接屬于…

記一次 .NET 某工控自動化控制系統 卡死分析

一&#xff1a;背景 1. 講故事前段時間遇到了好幾起關于窗體程序的 進程加載鎖 引發的 程序卡死 和 線程暴漲 問題&#xff0c;這種 dump 分析難度較大&#xff0c;主要涉及到 Windows操作系統 和 C 的基礎知識&#xff0c;所以有必要簡單整理和大家分享一下&#xff0c;上 win…

BZOJ4573:[ZJOI2016]大森林——題解

http://www.lydsy.com/JudgeOnline/problem.php?id4573 https://www.luogu.org/problemnew/show/P3348#sub http://uoj.ac/problem/195 https://loj.ac/problem/2092 小Y家里有一個大森林&#xff0c;里面有n棵樹&#xff0c;編號從1到n。一開始這些樹都只是樹苗&#xff0c;只…

Spring中神奇@aotuWrited

好久沒有寫博客了&#xff0c;放假就是充電學習的時候&#xff0c;的確一直是這樣做的。來給自己一點掌聲。我們還是進入今天的主題吧。 我們自己寫代碼一般會向下面這樣干啊&#xff0c;因為這樣簡單&#xff0c;其余交給spring去做吧。Spring會自動把生成的userService注入進…

40個常用的springBoot注解

一、Spring Web MVC注解 RequestMapping RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進行映射。 Spring MVC和Spring WebFlux都通過RquestMappingHandlerMapping和RequestMappingHndlerAdapter兩個類來提供對RequestMapping注解的支持。 RequestMapping注解…

.NET MAUI 跨平臺應用開發 I|.NET MAUI 跨平臺基礎

編輯&#xff1a;Alan Wang排版&#xff1a;Rani Sun微軟 Reactor 為幫助廣開發者&#xff0c;技術愛好者&#xff0c;更好的學習 .NET Core, C#, Python&#xff0c;數據科學&#xff0c;機器學習&#xff0c;AI&#xff0c;區塊鏈, IoT 等技術&#xff0c;將每周三到周六&…

走出宣傳,國產VR手機盒子到底哪家強?

國產VR手機盒子作為入門機是一個不錯的選擇&#xff0c;不過你知道哪一款更適合你嗎&#xff1f; 從去年看虛擬現實還是一個遙不可及的夢&#xff0c;今年卻真正的火起來了。各大廠商紛紛推出自家的VR設備&#xff0c;宣傳活動如火如荼。愛嘗鮮的你是否按耐不住? 如果你覺得動…