arm课程设计报告书. -

更新时间:2023-10-12 05:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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; // 定义Keypad unsigned int KPData0; // Register data unsigned int KPData1; // Register data

unsigned int KPPress; // Keypad press count

int 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 \//return (KeyData); }

// Code picks up here if a key is pressed

DM_WaitMs(50); // Dealy 50 mS for data to settle if(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 justify

KPPress = (KPData0 & 0x7C000000) >> 26; // Extract key press count and right justify KPData0 = KPData0 & 0xF; // Isolate Column Data //printf(\KPData0);

//printf(\第 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(\{

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(\显示gua,挂断 break; }

if(KeyData!=0xA)//按回车键

{

printf(\显示键盘输入的信息 pnum[i]=KeyData;//键盘输入号码

j++;

if(KeyData=='B')//按B开始拨号 {

pnum[i-1]=';';//最后个输入字符减去 pnum[i]='\\0';结束字符

break; } } 结论

我们这次的课程设计的任务主要是基于PXA270串行口通信电路,利用串 口个寄存器的基本用途和编程来实现手机拨号功能,对于我们来说,无疑对于嵌入式的操作与认识更深了一步,程序的开始阶段,老师要我们实现从数字键盘获取数字数据,然后通过串口发送,测试能否输出字段,一开始的编程遇到了不少问题,万是开头难,在开始的时候总是无从下手,后来研究课堂上讲过的知识,知道了获取数字键盘的知识,中间出现了一个大问题,就是字符输出的时候出现自动换行的情况,使串口发送出现了问题,经过老师和我们学生的共同研究,发现是硬件在某些时刻会自动产生换行符,最后顺利解决问题,最后一步在串口的发送中没有遇到大问题,最后,通过查书籍和手册,我们完成了课程设计要求的基本功能。

第 5 页 共 6 页

通过这一次课程设计,让我们更加了解嵌入式很多方面的知识。虽然不能完全将整个工程的代码都熟悉透,但基本的实现代码都能够熟知和编写。 第 6 页 共 6 页

本文来源:https://www.bwwdw.com/article/ptlf.html

Top