手机新功能开发-标题页
题目名称:手机新功能开发
比赛编号: 1000124
日期: 2007.11.8
(首名
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
者为联络代表人)
姓名:徐远华(中文)Xu Yuanhua(英文) 职业:硕士研究生
姓名:刘建华(中文)Liu Jianhua(英文) 职业:硕士研究生
通讯地址:北京理工大学 39 信箱
邮编:100081
邮箱:yitai21@yahoo.com.cn
电话:15810531360
推派单位名称:北京理工大学机电工程系
单位地址:北京市海淀区中关村南大街 5 号
单位电话:010-81690204
2
目 录
摘 要……………………………………………………………………… 3
1.引言…………………………………………………………………… 3
1.1 拿起电话自动检测……………………………………………… 3
1.2 摇晃删除输入字符……………………………………………… 4
1.3 振铃方式智能选择……………………………………………… 5
2.系统概述……………………………………………………………… 6
2.1 特性……………………………………………………………… 6
2.2 系统概述………………………………………………………… 6
2.3 freescale MC9S08QG8CPBE 微控制器简介…………………… 8
2.4 MMA7260QT 低量程加速度计简介…………………………… 8
3.系统硬件……………………………………………………………… 9
3.1 加速度传感器模块(加速度采集电路)……………………… 9
3.2 小型评估板 CT-298(键盘响应电路、显示电路、主控模块)10
3.3 系统整体结构图………………………………………………… 12
3.3.1 加速度值采集电路…………………………………………12
3.3.2 键盘响应电路………………………………………………12
3.3.3 显示电路……………………………………………………13
3.3.4 主控模块……………………………………………………13
4.系统软件……………………………………………………………… 13
4.1 软件原理描述…………………………………………………… 13
4.1.1 键盘响应……………………………………………………13
4.1.2 采集加速度…………………………………………………14
4.1.3 输出显示……………………………………………………14
4.2 软件模块结构…………………………………………………… 14
4.2.1 铃声选择程序………………………………………………15
4.2.2 有电话打入程序……………………………………………16
4.2.3 短信输入模式程序…………………………………………17
3
手机新功能开发
徐远华,刘建华
北京理工大学机电工程系(100081)
摘要:本文介绍了利用 freescale 公司的三轴加速度计 MMA7260QT 与微控制
器 MC9S08QG8CPBE8 相结合,实现手机使用中的各种动作检测与智能实时
处理的数字检测与控制系统。本系统利用三轴加速度计实时检测外部动作,
使用飞思卡尔 MC9S08QG8CPBE8 微控制器为核心,使手机具有拿起电话自
动检测、摇晃删除输入文字以及振铃方式智能选择的功能。
关键词:加速度计,动作检测,实时检测控制
1.引言
在当今社会,手机已经成为人们与外界联系必不可少的工具。手机的销
售量每年在上亿部。因此,手机市场具有广阔的应用前景。如何提高手机的
销售量是手机制造商直接面对的一个问题。虽然新用户是重要市场,但销售
量的大部分来源是将已有移动电话升级为带有最新功能的新电话用户。近年
来,手机功能不断增加,比如手机照相功能,mp3 功能以及 mp4 电影播放功
能等等。每一项功能的增加都给手机制造商带来了极大的收入。从增加手机
功能中尝到极大甜头的手机制造商必定大力支持手机新功能的开发。
在手机中使用飞思卡尔 MC9S08QG8CPBE 8 位微控制器和 MMA7260QT
低量程三轴向加速度传感器相互配合,发挥其动作检测功能,使手机具有拿
起电话自动检测、摇晃删除输入文字以及振铃方式智能选择的功能。该系统
具有低功耗,体积小,成本低,便于高度集成等优点,非常适合使用在像手
机等便携式移动设备之中。因此,该项目具有广阔的应用前景。
1.1 拿起电话自动检测
使用加速度计,感觉到移动电话在响铃后就启动正在被移动的手机的加
速度自动检测功能。拿起电话移到耳边所产生的运动信号可被加速度计检测
到并且由微控制器中断。如图 1 所示,在各种情形下每一个人拿起电话所产
生的动作流程极其相似。这种类型的运动(当加速度在很短时间后减到零并
4
且它的位置发生变化,这可由 15 cm~100 cm 范围内的两位整数确定)相当
普遍,所以当电话振铃时产生的这种运动几乎确定地表示拿起电话。这个概
念是可靠的手势识别的关键因素之一:使用前后关系有助于理解动作的可能
含义。
图 1 手机放到耳边时的典型加速度图形
本文利用一只±2g 测量范围的三轴加速度计实现上述功能。在这种情况
下对加速度计的性能要求是相当适度的。
1.2 摇晃删除输入字符
手机的移动性能要求其键盘小而密集,而这就必然导致用户使用起来特
别不方便。事实上很多用户已经对自己的手机键盘特别气恼。因此,使用户
尽可能容易地修正误按按键的做法似乎是明智之举。
本文利用横向晃动移动电话的简单手势来清除最后输入的字符。纵向晃
动用来清除最后输入的完整字符串。此外,移动电话会对该动作做出很自然
的响应,并且为了使该算法更具鲁棒性,设计中使用了程序判断滤波法来消
除不必要的误动作。该算法检测一定时间内两个不同时刻在同一轴向的加速
度的变化值,即检测了加速度波形的一段上升沿,具有较强的抗干扰特点。
在摇晃清除应用中,由于人摇晃在每一个坐标轴向上都会产生加速度,
除非某人非常细心地仅在一个轴向上摇晃,所以三轴加速度计具有明显优势。
同样地,对加速度计性能的要求也是适度的,因为它使用了高通滤波器。在
摇晃时,实际的加速度可能高达几十 g,但是低量程的测量范围已足够用了,
因为削波不会负面地影响摇晃检测算法。而这些正是飞思卡尔 MMA7260QT
低量程三轴向加速度传感器的优势所在。
5
1.3 振铃方式智能选择
手机振铃方式需要根据用户所处环境来调整。不及时调整可能会使用户
陷入尴尬局面。比如开会时希望调成只有振动或者静音模式。然而目前的振
铃调整方式并不十分方便,需要用户进入多级级菜单再按多次键盘才能完成。
使用加速度传感器使手机完成以下智能选择功能。
(1)如果移动电话放在餐桌或书桌上,那么无需使用振动模式,所以只
能选择振铃模式。
(2)在开会或进餐时,用户可能不希望被打扰。将移动电话正面向下放
在餐桌或书桌上,用户选择静音模式,在这种情况下振铃器或振动模式都不
能选择。
(3) 如果移动电话不在上述两种情况之列,则一般就是放在布袋或者
其他贴身之处,则使用振动模式。
可使用一只三轴加速度计测量移动电话的方位。书桌或餐桌表面非常平
稳,实际上它总是几乎平行于地球表面。因此放在书桌上的一部移动电话只
有一个轴向的加速度大约为 1g,而其它两个方向几乎为零。同时该加速度计
还可测量放在坚固桌面上移动电话的微小振动。为了简化程序,本文只检测
z 轴加速度值的变化,试验证明这种方法行之有效。
同理,“移动电话正面向下”可以根据单轴向振动的方法确定,即其中
有一个适当的轴向(本文中使用 z 轴)的加速度为-1 g 而其它两个轴向的加
速度几乎为零。
对于拿起电话检测或摇晃清除功能,仅当特定事件发生时(电话振铃或
键盘输入)才可能开启加速度计。因此低功耗是用户所希望的,但不是必需
的。然而对于设置振铃模式,加速度计大部分时间都处于开启状态,所以非
常低的功耗工作是至关重要的。MMA7260QT 低量程三轴向加速度传感器功
耗电流仅为 500uA,工作电压为 2.2-3.6V,因此不会过度地降低电池的工作
寿命。
6
2. 系统概述
2.1 特性
-基于 MMA7260QT 三轴向加速度传感器和 MC9S08QG8 微控制器
-使用 Sunhayato MC9S08QG8 微控制器的小型评估板 CT-298
-使用 Sunhayato 3 轴小量程加速传感器模块 MM-2860
-低功耗
-体积小,便于高度集成
-成本低
-待机时处于振铃智能选择工作方式
-有电话打入时,启动拿起手机自动检测功能
-输入模式时,启动摇晃删除最后字符或字符串功能
-采用程序判断滤波算法与软件高通滤波算法
-横向晃动,删除最后输入字符
-纵向晃动,删除最后输入字符串
2.2 系统概述
基于以上的背景考虑,本项目就实现这些设想,完成了一个可应用于手
机中的具有拿起电话自动检测、摇晃删除输入字符以及振铃方式智能选择的
功能设计。图 2 给出了本文设计的系统框图。
图 2 系统框图
MMA7260QT
三轴向加
速度传感
器
MC9S08QG8
微控制器
按键 1 按键 2
LD1-LED2
指示灯阵列
蜂鸣器
7
由于本项目的特殊应用背景(应用于手机),设计时不可能完成一个这
样的手机样机,因为一方面这涉及到将本设计与手机硬件相互结合以及与手
机软件相互融合的问题,另一方面时间也不允许。但是,为了验证本设计确
实具有应用价值,拟设计一套演示板。该演示板旨在验证本文提出的预期达
到的各项功能。该演示板的各器件布局如图 3 所示。
LED1
LED2
蜂鸣器
图 3 手机新功能开发演示板
图中,按键 1 为拿起电话自动检测开关,对应于手机有来电。即当手机
有来电时按键 1 按下,执行拿起电话自动检测功能。此时在电话接通前 LED1
一直点亮,LED2 一直闪烁。一但电话接通,LED1 和 LED2 全部熄灭,蜂鸣
器一声短响表示电话已被接通。此时如果短时间(小于 3ms)按下按键 2,则
表示挂断电话,退出电话检测状态回到待机状态;如果较长时间按下按键 2
则直接进入短信输入状态。
按键 2 为摇晃删除输入字符开关,对应于手机进入短信输入模式。即当
手机进入输入模式时,按键 2 接通,执行摇晃删除字符开关功能。一但进入
短信输入模式,LED1 和 LED2 全灭,此时横向晃动手机可以删除最近输入的
一个字符,对应于蜂鸣器一声短促的响声;纵向晃动删除最近输入的字符串,
对应于蜂鸣器一声较长时间的响声。此时如果短时间(小于 3ms)按下按键 1,
MMA7260QT:三轴
向加速度传感器
MC9S08QG8:微控
制器
按键 1 按键 2
8
则表示退出短信输入模式回到待机状态;如果较长时间按下按键 1 则直接进
入电话状态,表示此时有电话打入。
手机平时待机使用时,即按键 1 和按键 2 都没有被按下时,加速度传感
器始终处于振铃方式智能选择状态。此时手机正面朝上,LED1 和 LED2 均被
点亮;手机正面朝下,蜂鸣器发出滴-滴的持续响声;其他情况 LED1 和 LED2
交替点亮。
2.3 freescale MC9S08QG8CPBE 微控制器简介
MC9S08QG8CPBE 是采用高性能、低功耗的 HCS08 内核的飞思卡尔 8 位
微控制器系列中具有很高集成度的器件。MC9S08QG MCU 集成了那些通常只
有较大、较昂贵的元器件才具有的性能,包括背景调试系统以及可进行实时
总线捕捉的内置在线仿真(ICE)功能,具有单线的调试及仿真接口。该产品
的特色还包括一个可编程的 16 位定时器 /脉冲宽度调制(PWM)模块(TPM)。
MC9S08QG8CPBE 结构紧凑、集成度高,提供了丰富的外设与 HCS08 内
核卓越性能的多功能组合,包括更长的电池寿命(即使工作电压低至 1.8V,
也能发挥最大效能)、业界领先的 FLASH 技术以及创新的开发支持。对于本
文中应用于手机当中,对功耗和尺寸要求较高,MC9S08QG8CPBE 是出色的
解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
。本文选中该型号主要考虑其以下突出特点:
-高性能,低功耗,低成本,结构紧凑,集成度高
-工作频率高达 16MHz
-内置 8K FLASH 存储器,512 字节 RAM
-内置增强型 8 通道、10 位模数转换器(ADC)
-内置背景调试系统
-内置在线仿真(ICE)功能
2.4 MMA7260QT 低量程三轴向加速度传感器简介
MMA7260QT 低成本微型电容式加速度传感器采用了信号调理、单极低
通滤波器和温度补偿技术,并且提供 4 个量程可选,用户可在 4 个灵敏度中
的选择。该器件带有低通滤波并已做零 g 补偿。该产品还提供休眠模式,对
9
于本文应用于手机的特定条件下,MMA7260QT 是理想之选。本文选中该型
号主要考虑其以下突出特点:
-可选灵敏度(1.5g/2g/4g/6g)
-低功耗:500µA
-高灵敏度(800mV/g @ 1.5g)
-低通滤波器具备内部信号调理
-设计稳定、防震能力强
-成本低
3. 系统硬件
系统硬件共分为四部分:加速度值采集电路、键盘响应电路、显示电路
和主控模块。注意到加速度值采集电路可以使用 3 轴小量程加速传感器模块
MM-2860 代替,而 MC9S08QG8 微控制器的小型评估板 CT-298 上也正好集
成了上述键盘响应电路、显示电路和主控模块。可以看到,使用评估板和加
速度传感器模块已经可以充分实现图 3 所示的演示版的各个部分功能。因此,
为了充分利用评估板和加速度传感器模块,另外也为了缩短开发周期,笔者
决定只使用评估板和加速度传感器模块来实现演示功能。
3.1 加速度传感器模块(加速度采集电路)
MM-2860 是含有飞思卡尔半导体公司制造的 MMA7260Q 型 3 轴小量程
加速传感器的传感器模块。可以直接装到用了飞思卡尔半导体公司制造的
MC9S08QG8 低功耗单片机(MCU)的小型评估板 CT-298 上。图 4 给出了
MM-2860 的结构图。图 5 是该模块中加速度计及其外围电路连接情况。可以
看到,这个电路可以代替本文中的加速度采集电路。
10
图 4 MM-2860 的结构图
图 5 MM-2860 的电路图
3.2 MC9S08QG8 微控制器的小型评估板 CT-298(键盘响应电路、显示电路、
主控模块)
CT-298 是安装有飞思卡尔公司的单片机集成模块 SF9S08C、由 USB 总
线电源供电的小型评估板。CT-298 上安装有按钮开关、LED 灯、蜂鸣器 ,可
作为本文开发应用中的输入 /输出器件。而且,USB-COM 转换器电路采用了
FTDI 公司制造的 FT232R;容许单片机 HC(S)08 与电脑之间通过 USB 接口进
行串行通信。图 6 给出了其结构图,图 7 给出了其基板系统框图。从图中可
11
以看出,按“键开关 x2”对应于本文中的键盘响应电路,“LED 灯 x2”对应
于本文中的显示电路,而“单片机”对应于本文中的主控模块。
图 6 CT-298 结构图
图 7 CT-298 系统框图
12
3.3 系统整体结构图
将传感器模块插到评估板上的 MM-2860 专用插座上,就构成了整个系统
硬件。组合以后的系统整体结构图如图 8 所示。
图 8 系统整体结构图
图中可以看出,已经标出的各个部分组成了整个系统的四大部分。即加
速度值采集电路、键盘响应电路、显示电路和主控模块。
3.3.1 加速度值采集电路
加速度值采集电路完成在手机各个使用状态时采集其加速度值,本文中
由图 9 所示的加速度几模块来完成。其中 g 值选择开关拨到±2g 的量程档,
此时灵敏度为 600mv/g。采集到的三个轴 x、y、z 的加速度值分别通过 PTA0、
PTB2、PTB3 送入单片机的 AD 转换器中转换成 8 位数据。
3.3.2 键盘响应电路
LED1
按键 1
LED2
按键 2
蜂鸣器
主控模块
(单片机)
加速度计
模块
13
键盘响应电路 SW1、SW2 分别通过 PTA2、PTA3 定义为普通输入端口,
分别对应于有电话打入和进入短信编辑模式。
3.3.3 显示电路
显示电路 LED1、LED2、蜂鸣器分别通过 PTB6、PTB7 和 PTB4 定义为
普通输出端口。通过这三个显示电路的不同显示组合表明系统目前的工作状
态。
3.3.4 主控模块
主控模块由 MC9S08QG8 微控制器组成。定义 ADP0、ADP6、ADP7 为
AD 转换输入通道。定义 PTA2、PTA3 为普通输入端口。定义 PTB4、PTB6、
PTB7 为普通输出端口。通过 SW1、SW2 的状态判断系统目前处于哪种工作
模式(待机模式、电话打入模式、短信编辑模式),根据 AD 转换得到的外
部加速度值,得出各种动作判断,通过 LED1、LED2 和蜂鸣器的不同组合显
示出来。
4.系统软件
4.1 软件原理描述
软件需要完成三个部分功能:键盘响应、采集加速度、输出显示。
4.1.1 键盘响应
为了使系统进入各种工作模式,必须通过外界给主控部分一个信号,这
个任务由键盘响应程序完成。比如按键 SW1 按下则表示进入打电话模式,而
短按 SW2 可以退出;按键 SW2 按下则表示进入短信输入模式,而短按 SW1
可以退出。这些外部控制信息的获取与处理都需要键盘响应程序来实现。程
序必须不断对 SW1、SW2 两个键盘进行扫描,以及时进入相应的处理过程。
表 1 给出了键盘响应程序应该完成的任务。
14
表 1 SW1、SW2 组合按键对应的各种功能表
SW1 SW2
待机状态 不按 不按
打电话状态 有电话打入 不按 长按
挂断电话 短按 不按
短信输入状态 进入输入模式 长按 不按
退出输入模式 不按 短按
4.1.2 采集加速度
一但程序进入某个工作模式,就不可避免的要不断采集加速度,以获取
外部运动状态,从而通过控制器处理给出处理结果。这部分任务有采集加速
度程序来完成。决定采用程序查询方式,单次采集,采集结果为 8 位,采样
频率为系统总线频率的 8 分频,即为 1MHz。
4.1.3 输出显示
输出显示程序是将控制器处理后的结果通过一定的方式显示出来。通过
输出显示程序,要使外界能够判断当前系统处于何种状态。表 2 给出了输出
显示程序应该完成的功能。
表 2 LED1、LED2、蜂鸣器的各种组合代表的不同状态表
LED1 LED2 蜂鸣器
待机状态
正面朝上 亮 亮 不响
正面朝下 灭 灭 间歇响
其他情况 亮(灭) 灭(亮) 不响
打电话状态
尚未接通 亮 闪烁 不响
已经接通 灭 灭 短响
挂断电话 同待机状态
短信输入状态
删除一个字 灭 灭 短响
删除一个字串 灭 灭 长响
退出 同待机状态
4.2 软件模块结构
15
4.2.1 铃声选择程序
当没有任何按键按下时,手机处于待机状态,此时执行铃声选择程序。
该程序不断调用 AD 转换函数获取目前的加速度值,以判断应该执行哪段程
序。本文在这段程序中只检测 z 轴加速度,因为手机朝上放置或者朝下放置
都只是在 z 轴方向上变化最剧烈,试验证明这种方法行之有效,从而程序可
以大大地简化,有助于优化程序结构。在铃声选择程序中,不断扫描 z 轴加
速度,如果其大于 1g 则表明手机此时正面朝上。实际编程中,为了确保手机
正面朝上时能够准确判断出来,设置为只要 z 轴加速度值大于 0.8g,程序就
认为手机已经处于正面朝上的状态了。此时调用 LED1 和 LED2 子程序点亮
两个 LED,表明选择了振铃方式。同理设置只要 z 周加速度值小于-0.8g 程序
就认为手机已经处于手机正面朝下的状态了。此时调用 sound 子程序使蜂鸣
器产生间歇叫声,表明选择了静音模式。如果手机既不处于朝上也不处于朝
下状态,则一般认为手机被放入布袋或者其他贴身之处。此时调用 LED 函数
使 LED1 和 LED2 交替点亮,表明选择了振动方式。以下为铃声选择程序代
码。
void ring_select(void)
{
uchar z,i,j;
z=get_adc(7);//获取 z 轴加速度值 //
if(z>=0xa9)led_all();//手机正面朝上 //
else if(z<=0x5e) //手机正面朝下 //
for(i=0;i<1;i++)
{
sound();
for(j=0;j<5;j++)delay(6000);
sound_end();
for(j=0;j<5;j++)delay(6000);
}
16
else
for(i=0;i<1;i++)//其他情况 //
{
led1();
for(j=0;j<5;j++)delay(6000);
led2();
for(j=0;j<5;j++)delay(6000);
}
}
4.2.2 有电话打入程序
在主程序中,要不断检测 SW2 是否按下,如果按下,则程序进入有电话
打入子程序。此时该子程序调用 LED 子程序实现 LED1 点亮,LED2 闪烁,
表明有电话打入,正在等待接电话。随后程序调用 AD 转换子程序不断检测
三个轴的加速度,计算三个轴加速度值的均方根,判断如果这个值大于某个
阈值(根据试验调试确定),则表明电话已被接通,实现拿起电话自动监测
功能。否则一直等待拿起电话。一但电话被拿起,电话接通,则再次调用 LED
子函数熄灭两个指示灯,同时调用 sound 函数使蜂鸣器短促地响一下,表明
电话已被接通,此时处于打电话状态。接着程序扫描 SW1 是否被按下以确定
是否已经挂断电话,并退出打电话程序,回到主程序。以下为有电话打入程
序代码。
void phone_call(void)
{
uchar x,y,z,m,n,i;
m=1;//定义标志量,m=0 表示电话已被接通,m=1 表示电话未被接
通 //
17
while(PTAD_PTAD2&&m)//循环条件:SW1 未按下,并且电话尚未
接通 //
{
led1();
for(i=0;i<1;i++)delay(8000) ;
led_all();
for(i=0;i<1;i++)delay(8000) ;//有电话打入时,指示灯 led1 亮,
led2 闪烁,闪烁间隔 2ms//
x=get_adc(0);
y=get_adc(6);
z=get_adc(7);
n=(x+y+z)/3;
if(n>=0xa0) m=0;
else m=1;//检测到拿起电话动作 //
}
if(m==0)
{
sound();
for(i=0;i<3;i++)delay(8000);
sound_end();//调用扬声器函数扬声 3ms,表示电话已经接通,
此后两指示灯全灭 //
}
while(PTAD_PTAD2) ;//等待 SW1 按下,表示挂断电话 //
}
4.2.3 短信输入模式程序
18
在主程序中,要不断检测 SW1 是否按下,如果按下,则程序进入短信输
入模式子程序。在该子程序中,不断调用 AD 转换子程序,获取加速度值。
加速度值横向变化(y 轴)剧烈,表示删除最近输入的一个字,此时调用 sound
子函数使蜂鸣器产生一声短促的声响。加速度值纵向变化(x 轴)剧烈,表
明删除最近输入的一行字符串,此时调用 sound 函数与延时子程序 delay 使蜂
鸣器产生一声较长的声响。
在判断各个轴向加速度值变化的过程中,程序使用了类似于程序判断滤
波的算法。 程序滤波法又称程序判断法,其方法是把两次相邻的采样值相减,
求出其增量(以绝对值表示)。然后与两次采样允许的最大差值△Y 进行比
较,△Y 的大小由被测对象的具体情况而定,若小于或等于△Y,则取本次采
样的值;若大于△Y,则取上次采样值作为本次采样值,即
|yn - yn-1|≤△Y,则 yn 有效,
|yn -yn-1|>△Y,则 yn-1 有效。
式中
yn ——第 n 次采样的值;
Yn-1——第(n-1)次采样的值;
△Y——相邻两次采样值允许的最大偏差。
在本文的设计过程中,实际测得在同一个方向上晃动加速度计,其产生
的波形极其相似。如图 9 所示。
、
图 9 同一轴向晃动加速度计产生的波形图
19
从图中可以看到,当在一个方向上晃动加速度计时,其波形变化趋势为
先产生一个负方向的加速度,随即在十几毫秒之内立即变为一个正向的较大
加速度尖峰脉冲。本文正是利用这一特点,结合程序滤波算法,检测出这一
动作。即程序检测的是一个加速度方向由负变正的过程,并且这个过程必须
在特定的时间之内完成,才算检测到一个动作。假如没有变化或者变化方向
相反或者没有在特定的时间内变化,则都不属于这一动作。这种程序算法能
够在很大程度上避免系统进行一些误动作。以下是本段程序代码。
void short_message(void)
{
uchar x,y,z,a,b,c,i;
while(PTAD_PTAD3)//随时检测是否已经退出短信模式 //
{
a=get_adc(0);
b=get_adc(6);
c=get_adc(7);
for(i=0;i<3;i++)delay(6000);
x=get_adc(0);
y=get_adc(6);
z=get_adc(7);//采用程序判断滤波法,检测连续 3ms 内的上升沿
波段 //
//有效防止误出发引起的动作 //
if(a<0x9f&&x>0x9a)
{
sound();
for(i=0;i<6;i++)delay(8000);
sound_end();
}
20
if(b<0x9d&&y>0x9d)
{
sound();
for(i=0;i<2;i++)delay(8000);
sound_end();
}
sound_end();
}
}
图 10 给出了软件流程图。
21
上电复位
手机朝
上放置
手机朝
下放置
手机放
于衣袋
否
否
否
响铃模式
静音模式
振动模式
是
是
是
有电话
呼叫
输入模
式开启
晃动时间
小于0.5min
晃动时间
小于1min
输入模
式结束
删除最后
输入字符
删除最后输
入字符串
拿起电话
检测模式
通话结束
是
否
是
否
是
否
否
是
是
否否 是
图 10 软件流程图
主程序说明:主程序首先要初始化系统的工作参数。主要是关闭中断,
关闭 COP 看门狗定时器,定义 PTA 口为输入端口,定义 PTB 口为输出端口,
初始化 AD 转换寄存器。以后就循环扫描 SW1、SW2 以判断是否进入短信输
入模式或者是否有电话打入,如果都没有,则说明系统处于待机状态,循环
检测加速度值以判断选择何种振铃方式。主程序的简略结构如下:
void main(void)
{
22
uchar i;
DisableInterrupts; /* disable interrupts */
/* include your code here */
system_init(); //系统初始化//
while(1) //循环扫描检测外部动作//
{
led_all();//平时即手机处于待机状态时,两个 led 全部点亮//
if(PTAD_PTAD2==0)//当按键 SW1 按下时进入"短信模式"//
{
sound_end(); //关闭声音//
short_message();//调用"短信模式"函数//
}
ring_select();//待机状态时,进入"振铃智能选择模式"//
for(i=0;i<3;i++)delay(8000);//延时 3ms//
if(PTAD_PTAD3==0)phone_call();//短按(小于 3ms)SW2 键退出至待机状态//
//长按(大于等于 3ms SW2 键进入"电话模式"//
for(i=0;i<3;i++)delay(8000);//延时 3ms//
}
}
注意到,while 循环条件恒为 1,说明这是一个个程序每一刻都在不停地
检测,体现了“动、测、每刻”的大赛主题。
23
最后样机附图: