嵌入式系统设计(2)

2020-05-18 17:01

信息的编码和解码,通过使用队列技术来确保能够进行正常的并发访问。 GSM 接打电话步骤:

发送 AT指令检测模块是否正常 发送 AT+CPIN?检测 SIM 卡是否在位

发送 AT+CSQ 查询信号质量等级,20~31 为宜 发送 AT+CLIP=1 开启来电显示 发送 ATD10086; 拨打电话; 发送 ATH 可结束通话; 在有来电时发送 ATA 可接听来电

短消息服务中常用的AT指令如表所示

发英文短信:

(假设给号码为 13XXXXXXXXX发送: “123456”)的流程: 发送 AT+CMGF=1, 设置为文本模式

发送 AT+CSCS=“GSM”, 设置默认的 GSM 7 位缺省字符集; 发送 AT+CMGS=“13265434569”,等待模块返回“>” 发送短信内容: “123456”, 最后以十六进制 0X1A 结束启动发送, 如果发送成功会返回+CMGS: xx OK。

5

GSM 发送中文短信步骤

(假设给号码为 13XXXXXXXXX发送:“信盈达欢迎你”)的流程: 发送 AT+CMGF=1, 设置为文本模式;

发送 AT+CSCS=\, 设置 TE 字符集为 UCS2; 发送 AT+CSMP=17,0,2,25, 设置短消息文本模式参数;

AT+CMGS=“00310033003200360035003400330034003500360039”,等待模块返回“>”

发送短信内容:

”4FE176C88FBE79D1628067099650516C53F86B228FCE60A8FF01”, 最后以十六进制 0X1A 结束启动发送 如果发送成功会返回+CMGS: xx OK。

四、主要程序

实现接打电话、收发短信,并用LCD屏显示回馈状态。 主程序:

#include \

#include \

#include \#include \#include \#include \#include \#include \#include \#include \

void delay(void) { u32 i=1000000; while(i--); }

int main(void)

{ u32 key_cont=0; u8 key,ack; u8 *p; SystemInit(); led_init(); key_init(); delay_init(72); usart1_init(9600); LCD_Init( );

6

LCD_ShowString(10,100,200,16,16,\ //LED初始化

while(NULL==send_ack(\ {

LCD_ShowString(10,100,200,16,16,\ delay_ms(500); }

while(NULL==send_ack(\ {

LCD_ShowString(10,100,200,16,16,\ delay_ms(500); }

while(NULL==send_ack(\ {

LCD_ShowString(10,100,200,16,16,\ delay_ms(500); }

while(1) {

u8 i;

p=send_ack(\ i=(*(p+6)-'0')*10; i+=(*(p+7)-'0');

LCD_ShowNum(10,100,i,2,16); if(i>20) break;

delay_ms(500); }

LCD_ShowString(10,100,200,16,16,\ LCD_ShowString(10,120,200,16,16,\

LCD_ShowString(10,140,200,16,16,\ LCD_ShowString(10,160,200,16,16,\ while(1) {

key_cont++; if(key_cont==10) {

key=key_scan(); key_cont=0; }

if(UP_KEY_OK==key) {

LED1=!LED1; //打电话模式 calling_mode(); }

else if(DOWN_KEY_OK==key)

7

{

LED2=!LED2;//接电话模式 }

else if(LEFT_KEY_OK==key) {

LED3=!LED3;//收短信模式 }

else if(RIGHT_KEY_OK==key) {

LED4=!LED4;//发短信模式 } delay_ms(1); } }

打电话GSM程序:

#include \#include \#include \#include \#include \#include \#include \#include \

u8* send_ack(const char*comm,const char*ack,u16 timeout) {

u8 *p;

rec_sta=0;

printf(\

while(timeout--) {

if(rec_sta==1) {

p=strstr((const char*)rec_buf,(const char*)ack); rec_sta=0; if(p!=NULL) break; }

delay_ms(1); if(rec_num>0) rec_cont++; if(rec_cont>20) {

rec_sta=1;

8

rec_cont=0;

rec_buf[rec_num]='\\0'; rec_num=0; } }

if(timeout==0) return NULL; else

return p; }

void calling_mode(void) {

u8 key_cont,key; u8 *p;

LCD_Clear(BLUE);

LCD_ShowString(10,100,200,16,16,\ LCD_ShowString(10,120,200,16,16,\ LCD_ShowString(10,140,200,16,16,\ while(1) {

key_cont++; if(key_cont==10) {

key=key_scan(); key_cont=0; }

if(LEFT_KEY_OK==key) {

LED1=!LED1;

p=send_ack(\打电话 if(p==NULL)//LCD屏幕显示 {

LCD_ShowString(10,100,200,16,16,\ } else {

LCD_ShowString(10,100,200,16,16,\ } }

else if(RIGHT_KEY_OK==key) {

LED2=!LED2;

send_ack(\ break; }

else if(DOWN_KEY_OK==key)

9


嵌入式系统设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:C语言程序设计课后习题1-8参考答案解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: