arm课程设计报告书.

  • 格式:doc
  • 大小:21.00 KB
  • 文档页数:5

RISC微控制器嵌入式系统课程设计报告班级 09计应3班学号 09106107 09106098姓名高原肖潇深圳职业技术学院计算机应用技术专业2011年6月第 1 页共 6 页实现手机的拨号功能1 课程设计的任务1) 在基于PXA270教学平台上实现手机的基本方法就是通过串口接入一个GSM模块,然后用GSM模块编程指令(AT指令)来实现手机的功能。

2) 数字1-9是手机的数字键盘,字母B键是拨号键(相当于手机的接听键或拨出键),字母C键是挂断键。

3) 在教学平台的键盘上输入要拨叫的电话(数字)时,会在串口显示输入的数字,再按字母B键时,会从串口输出一串用于拨号的AT指令。

这串指令会控制GSM模块对相关号码的呼叫。

4) 在教学平台的键盘上按字母C键时,会从串口输出挂断电话的AT指令。

这串指令会控制GSM模块挂断相应的呼叫。

2 课程设计实现的功能1) 数字键盘扫描的详细过程和方法在初始化阶段,所有的行(输出端口)被强行设置为低电平。

在没有任何键按下时,所有的列(输入端口)将读到高电平。

任何键的闭合将造成其中的一列变为低电平。

一旦检测到有键被按下,就需要找出是哪一个键。

过程很简单,微处理器只需在其中一列上输出一个低电平。

如果它在输入端口上发现一个0值,微处理器就知道在所选择行上产生了键的闭合。

相反,如果输入输出端口全是高电平,则被按下的键就不在那一行,微处理器将选择下一行,并重复该过程直到它发现了该行为止。

一旦该行被识别出来,则被按下键的具体列可通过锁定输入端口上惟一的低电平来确定。

分析相应代码:har KeypadGetData(void) //modified by hzh{char KeyData; // 定义Keypadunsigned int KPData0; // Register dataunsigned int KPData1; // Register dataunsigned int KPPress; // Keypad press countint timer; // Loop coutner/timer (for test timeout) unsigned int kpc;KeyData = 0x30; // Inital setting = ASCII ?timer = 200;// This will provide about a 10 second timeout kpc = KPC_REG;while (!(kpc & (KEYP_KPC_MI | KEYP_KPC_DI)) && (timer != 0)) {DM_WaitMs(50); // Dealy 50 mS as part of timeout loop timer = timer -1; // Decrement timer第 2 页共 6 页kpc = KPC_REG;if(GPLR0&0x0001) //查看按键'D',其为GPIO的第0脚{DM_WaitMs(10);if(GPLR0&0x0001){while(GPLR0&0x0001); //等待按健放开return 'D';}}}if (timer == 0){KeyData = 0x54; // ASCII "T" for Time out//return (KeyData);}// Code picks up here if a key is pressedDM_WaitMs(50); // Dealy 50 mS for data to settleif(kpc & KEYP_KPC_DI){UINT32 val = KPDK_REG;if(val & (1UL<<31)){if(val & (1<<0))return 'E';if(val & (1<<1))return 'F';if(val & (1<<2))return '0';}}KPData0 = KPAS_REG;KPData1 = (KPData0 & 0xF0) >> 4; // Extract Row data and right justifyKPPress = (KPData0 & 0x7C000000) >> 26; // Extract key press count and right justify KPData0 = KPData0 & 0xF; // Isolate Column Data //printf("KPData0 = %08x\r\n", KPData0);//printf("Key Count = %08x\r\n", KPPress);第 3 页共 6 页KeyData = 0x0A;if (KPPress == 1) // Decode only if 1 keypress has been detected{switch (KPData0){case 0:if(KPData1 == 0) KeyData = 'A';if(KPData1 == 1) KeyData = '3';if(KPData1 == 2) KeyData = '2';if(KPData1 == 3) KeyData = '1';break;case 1:if(KPData1 == 0) KeyData = 'B';if(KPData1 == 1) KeyData = '6';if(KPData1 == 2) KeyData = '5';if(KPData1 == 3) KeyData = '4';break;case 2:if(KPData1 == 0) KeyData = 'C';if(KPData1 == 1) KeyData = '9';if(KPData1 == 2) KeyData = '8';if(KPData1 == 3) KeyData = '7';break;}}return (KeyData);}// End of KeypadGetPress()2) 手机拨号功能及手机挂断功能的实现方法在基于PXA270教学平台上实现手机的基本方法就是通过串口接入一个GSM模块,然后用GSM模块编程指令(AT指令)来实现手机的功能。

数字1-9是手机的数字键盘,字母B键是拨号键(相当于手机的接听键或拨出键),字母C键是挂断键(相当于手机的挂断键)。

在教学平台的键盘上输入要拨叫的电话(数字)时,会在串口显示输入的数字,再按字母B键时,会从串口输出一串用于拨号的AT指令。

这串指令会控制GSM模块对相关号码的呼叫。

在教学平台的键盘上按字母C键时,会从串口输出挂断电话的AT指令。

这串指令会控制GSM模块挂断相应的呼叫。

分析相应代码:第 4 页共 6 页printf("Now test keypad, press any key to view result, 'B'OR 'C'\r\n"); while(1) {char KeyData = 0;//接收输入信息;char pnum[20]={'A','T','D'};//定义字符数组拨号信息char gua[10]={'A','T','H',';','\0'};//同上,挂断int i=3;KeypadHWSetup();//启动键盘while(1){KeyData = KeypadGetData();//得到键盘输入信息if(KeyData=='C')//如果按C{printf("\n%s",gua);//显示gua,挂断break;}if(KeyData!=0xA)//按回车键{printf("%c", KeyData);//显示键盘输入的信息pnum[i]=KeyData;//键盘输入号码j++;if(KeyData=='B')//按B开始拨号{pnum[i-1]=';';//最后个输入字符减去pnum[i]='\0';结束字符break;}}结论我们这次的课程设计的任务主要是基于PXA270串行口通信电路,利用串口个寄存器的基本用途和编程来实现手机拨号功能,对于我们来说,无疑对于嵌入式的操作与认识更深了一步,程序的开始阶段,老师要我们实现从数字键盘获取数字数据,然后通过串口发送,测试能否输出字段,一开始的编程遇到了不少问题,万是开头难,在开始的时候总是无从下手,后来研究课堂上讲过的知识,知道了获取数字键盘的知识,中间出现了一个大问题,就是字符输出的时候出现自动换行的情况,使串口发送出现了问题,经过老师和我们学生的共同研究,发现是硬件在某些时刻会自动产生换行符,最后顺利解决问题,最后一步在串口的发送中没有遇到大问题,最后,通过查书籍和手册,我们完成了课程设计要求的基本功能。

第 5 页共 6 页通过这一次课程设计,让我们更加了解嵌入式很多方面的知识。

虽然不能完全将整个工程的代码都熟悉透,但基本的实现代码都能够熟知和编写。

第 6 页共 6 页。