Spansion® 模拟和微控制器产品 本文档包含有关 Spansion 模拟和微控制器产品的信息。尽管本文档内有原来开发该产品规格的公司名称 “富士通”或 “Fujitsu”, 该产品将由 Spansion 提供给现有客户和新客户。 规格的延续 本文档内容并不因产品供应商的改变而有任何修改。文档内容的其他更新,均为改善文档而进行,并已记录在文档 更改摘要。日后如有需要更改文档,其更改内容也将记录在文档更改摘要。 型号的延续 Spansion 将继续提供型号以“MB”开始的现有产品。如欲订购该类产品,敬请使用本文档内列出的产品型号。 查询更多信息 如欲查询更多关于 Spansion 存储器、模拟产品和微控制器产品及其解决方案的信息,请联系您当地的销售办事 处。 书末出版说明 本文档介绍的产品,其设计、开发和制造均基于一般用途,包括但不限于普通工业使用、普通办公使用、个人使用及家庭使用,不应用于:(1) 存在严重风险或危险,除非能够保证极高的安全性,否则可能对公众造成严重影响,甚至可能直接造成死亡、人员伤害、物品损坏或其他损失 的用途(如核设施的核反应控制、飞机飞行控制、空中交通控制、公共交通控制、医学生命支持系统、武器系统的导弹发射控制),或者(2) 不 允许出现故障的用途(如潜艇中继器和人造卫星)。请注意,对于您和 / 或任何第三方由于将产品用于上述用途而造成的任何索赔和损失, Spansion 不承担任何责任。任何半导体设备都可能发生故障。您必须在自己的设施和装置中加入安全设计措施,如冗余、防火、防止电流过 载及其他异常运行情形等,以防由于此类故障而造成伤害、损坏或损失。如果根据日本 Foreign Exchange and Foreign Trade Law、美国US Export Administration Regulations 或其他国家(地区)的适用法律的规定,本文档中介绍的任何产品是在出口方面受到特别限制的商品或技术,则这 些产品的出口必须预先得到相关政府的许可。 商标和声明 本文档的内容如有变更,恕不另行通知。本文档可能包含Spansion 正在开发的 Spansion 产品的相关信息。 Spansion 保留变更任何产品或停 止其相关工作的权利,恕不另行通知。本文档中的信息 “ 按原样 ” 提供,对于其精确性、完整性、可操作性、对特定用途的适用性、适销性、 不侵犯第三方权利等不提供任何担保或保证,也不提供任何明确的、隐含的或法定的其他担保。对于因使用本文档中的信息而造成的任何形式 的任何损失,Spansion 不承担任何责任。 版权所有© 2013 Spansion Inc. 保留所有权利。Spansion®、Spansion 标识、MirrorBit®、MirrorBit® Eclipse™、ORNAND™ 以及它们的组合, 是Spansion LLC 在美国和其他国家(地区)的商标和注册商标。使用的其他名称只是一般性参考信息,可能是其各自所有者的商标。 富士通半导体(上海)有限公司 应用笔记 MCU-AN-500037-Z-10 F²MC-8FX 家族 8 位微型控制器 MB95200 系列 使用 AD 的键盘开发 应用笔记 使用 AD 的键盘开发 V1.0 修改记录 修改记录 版本 日期 作者 修改记录 1.0 2/24/2009 Benjamin. Yang 初稿 本手册包含16页。 1. 本文档记载的产品信息及规格说明如有变动,恕不预先通知。如需最新产品信息和/或规格说明,联系富士 通销售代表或富士通授权经销商。 2. 基于本文档记载信息或示意图的使用引起的对著作权、工业产权或第三方的其他权利的侵害,富士通不承 担任何责任。 3. 未经富士通明文批准,不得对本文档的记载内容进行转让、拷贝。 4. 本文档所介绍的产品并不旨在以下用途: 需要极高可靠性的设备,诸如航空航天装置、海底中继器、核控 制系统或维系生命的医用设施。 5. 本文档介绍的部分产品可能是“外汇及外贸管理法”规定的战略物资(或专门技术),出口该产品或其中部 分元件前,应根据该法获得正式批准。 版权©2009 富士通半导体(上海)有限公司 MCU-AN-500037-Z-10- 第2页 使用 AD 的键盘开发 V1.0 目录 目录 修改记录.................................................................................................................................. 2 目录 ......................................................................................................................................... 3 1 概要 .................................................................................................................................... 4 2 AD功能介绍 ........................................................................................................................ 5 2.1 AD转换功能 ............................................................................................................... 5 2.2 键盘抖动消除............................................................................................................. 5 3 硬件设计 ............................................................................................................................. 6 3.1 硬件电路 .................................................................................................................... 6 3.2 键状态和输入电压的关系........................................................................................... 6 4 资源使用 ............................................................................................................................. 7 4.1 8/10 位A/D转换器控制寄存器 1(ADC1) ................................................................ 7 4.2 8/10 位A/D交换器控制寄存器 2(ADC2) ................................................................ 8 4.3 8/10 位A/D转换器数据寄存器上/下(ADDH, ADDL) ............................................ 9 4.4 AD转换过程 ............................................................................................................. 10 5 软件设计 ........................................................................................................................... 11 6 代码示例 ........................................................................................................................... 12 7 更多信息 ........................................................................................................................... 15 8 附录 .................................................................................................................................. 16 MCU-AN-500037-Z-10 - 第3页 使用 AD 的键盘开发 V1.0 第 1 章概要 1 概要 使用 MB95200 系列 MCU 设计键盘的方法一共有三种:外部中断/AD/matrix。 本文档描述了如何使用 AD 设计键盘。 本文档同时也以实例介绍了 AD 转换的实现理论。 MCU-AN-500037-Z-10- 第4页 使用 AD 的键盘开发 V1.0 第 2 章AD 功能介绍 2 AD 功能介绍 本章介绍了使用 AD 转换设计键盘的功能。 2.1 AD转换功能 AD 转换器的功能是把模拟输入引脚的模拟电压值(输入电压)转换为一个 10 位的数值。 MB95200 系列 MCU 至少有 2 个模拟输入引脚。启用 AD 转换器后,所选通道上的模拟输入 信号将在 AD 转换器中被取样和比较,最终转换成一个数值,存储在 A/D 转换器数据寄存器 (ADDH,ADDL)。 2.2 键盘抖动消除 抖动消除是键盘设计中最重要的问题之一。对于硬件电路设计,在模拟输入引脚中增加一个电 容可以减弱抖动。对于软件设计,反复确认数据可以有效避免键盘抖动。 MCU-AN-500037-Z-10 - 第5页 使用 AD 的键盘开发 V1.0 第 3 章硬件设计 3 硬件设计 本章介绍了使用 AD 转换进行键盘开发的硬件设计。 3.1 硬件电路 以下硬件电路的电阻用于分压。模拟输入引脚将从电路获得一个不同的电压。下图中的电路供 用户参考。 图3-1:使用 AD 进行键盘硬件设计 3.2 键状态和输入电压的关系 表3-1:键状态和输入电压的关系 按键 AN00 电压 ADDL值 有效值区域 SW1 0V 0x00 0x00>=ADDL<=0x05 SW2 2.5 V 0x7F 0x79>=ADDL<=0x85 SW3 3.3 V 0xAA 0xA1>=ADDL<=0xB2 SW4 3.75 V 0xBF 0xB5>=ADDL<=0xC8 MCU-AN-500037-Z-10- 第6页 使用 AD 的键盘开发 V1.0 第 4 章资源使用 4 资源使用 本章介绍了 AD 转换的资源使用。 参见 MB95200 系列硬件手册的第 17 章了解更多关于寄存器设置的详细信息。 4.1 8/10 位A/D转换器控制寄存器 1(ADC1) 8/10 位 A/D 转换器控制寄存器 1(ADC1)用于启用和禁用 8/10 位 A/D 转换器的个别功能: 选择模拟输入引脚,以及检查转换器的状态。 图4-1:ADC1 寄存器 MCU-AN-500037-Z-10 - 第7页 使用 AD 的键盘开发 V1.0 第 4 章资源使用 4.2 8/10 位A/D交换器控制寄存器 2(ADC2) 8/10 位 A/D 转换器控制寄存器 2(ADC2)用于控制 8/10 位 A/D 转换器的不同功能:选择输 入时钟,启用和禁用中断。 图4-2:ADC2 寄存器 MCU-AN-500037-Z-10- 第8页 使用 AD 的键盘开发 V1.0 第 4 章资源使用 4.3 8/10 位A/D转换器数据寄存器上/下(ADDH, ADDL) 8/10 位 A/D 转换器数据寄存器上/下(ADDH, ADDL)用于在 10 位 A/D 转换期间存储 10 位 A/D 转换的结果。10 位数据的上面二位存储于 ADDH 寄存器,下面的八位存储于 ADDL 寄存 器。 图4-3:AD 数据寄存器 10 位 A/D 数据的上面二位对应 ADDH 寄存器中的 bit1 和 bit0,下面八位对应 ADDL 寄存器 的 bit15-bit8。 如果 ADC2 寄存器的 AD8 位设置为“1”,则选择 8 位精确度。读 ADDL 寄存器可以得到一个 8 位数据。 MCU-AN-500037-Z-10 - 第9页 使用 AD 的键盘开发 V1.0 第 4 章资源使用 4.4 AD转换过程 转换后,转换结果存储于 ADDH 和 ADDL 寄存器。在 A/D 转换完成后,下一次 A/D 转换开始 前,需要读取 A/D 数据寄存器(转换结果)并在 ADC1 寄存器中清除 ADI 标志位(bit3)。 MCU-AN-500037-Z-10- 第10页 使用 AD 的键盘开发 V1.0 第 5 章软件设计 5 软件设计 本章介绍了使用 AD 转换进行键盘开发的软件设计。 一旦启用 AD 转换器,它将获取键盘的状态信息。如果该值(Distem0)属于键值,恢复它; 如果不是,AD 转换器继续采样。然后,停止 AD 转换器,让系统等待约 20ms 后,重新启动 AD 转换器并再次获取采样值(Distem1)。最后,判断该值是否等于 Distem0。如果与 Distem0 不同,视为抖动发生;否则,表示按键发生。 下图为软件设计的流程图。 图5-1:键盘开发的软件设计流程图 MCU-AN-500037-Z-10 - 第11页 使用 AD 的键盘开发 V1.0 第 6 章代码示例 6 代码示例 本章举例说明了如何使用 AD 转换进行键盘开发。 下面的例子显示了如何使用 AD 转换输入引脚 AN00 设计一个 4 键的键盘。 如第 5 章所述,如果使用 AD 转换设计键盘系统,首先初始化 AD 转换,然后 AD 转换开始采 样获得采样值,读取该值并判断其是否属于键值。如果不是,系统继续采样;如果是,停止 AD 转换,让系统等待大约 20ms 后,重新启动 AD 转换,获取另一个采样值。如果这两个采 样值相同,表示一个键被按下,否则视为抖动发生。 . /* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. /* FUJITSU SEMICONDUCTOR ACCEPTS NO RESPONSIBILITY OR LIABILITY /* FOR ANY ERRORS OR ELIGIBILITY FOR ANY PURPOSES. /* (C) Fujitsu Semiconductor (Shanghai) Co., LTD. /*-------------------------------------------------------------------#include "../MB95200_IO/mb95200.h". . . void clock_Select(void) // Main clock initialize { SYCC = 0x00; WATR = 0x00; STBC = 0x01; SYCC2= 0xF4; } void syinit(void) { DDR0_P00 = 0; //P00 input enable ADC1 = 0x01; //AN00 as input ADC2 = 0x80; //8-bit resolution,1×MCLK ADC1_AD = 1; //start A/D converter DDR0 = 0xF0; //P4~P7 as output pin PUL0 = 0x00; AIDRL = 0xFE; } void timer_init(void) { TMCR0 = 0x10; // 16-bit T00CR0 = 0x81; // interval timer with continuous mode T00CR1 = 0xA0; // disable output, start timer T01DR = 0x27; // 10000us T00DR = 0x10; while(STBC_MRDY); } __interrupt void Timer_Interrupt (void) { T00CR1_IF = 0; T00CR1_IE = 0; timer_counter++; if(timer_counter==1) // Read and store ADDL in value 1 { AD_Sample(); } MCU-AN-500037-Z-10- 第12页 */ */ */ */ */ 使用 AD 的键盘开发 V1.0 第 6 章代码示例 if(timer_counter==2) // Read and store ADDL in value 2 and compare value and value 2 { key_judge(); } if(timer_counter>=3) { timer_counter=0; } /Timer_counter restart } void AD_Sample(void) { if(ADC1_ADI==1) { while(!ADC1_ADI); Distem0 = ADD_ADDL; // Read AD Sample value 1 } ADC1_AD=1; // Start AD again } void key_judge(void) { if(ADC1_ADI==1) // Read and store ADDL in value 2 { while(!ADC1_ADI); Distem1 = ADD_ADDL; } if(Distem1==Distem0) // Judge if value 1 and value 2 equality { if(Distem1 == Range_value0) // Key process { DDR0_P04 = 1; PDR0_P04 = 0; } if((Distem1 >= Range_value1)&&(Distem1 <= Range_value2)) { DDR0_P05 = 1; PDR0_P05 = 0; } if((Distem1 >= Range_value3)&&(Distem1 <= Range_value4)) { DDR0_P06 = 1; PDR0_P06 = 0; } if((Distem1 >= Range_value5)&&(Distem1 <= Range_value6)) { DDR0_P07 = 1; PDR0_P07 = 0; } } } void main(void) { InitIrqLevels(); //initialise Interrupt level and IRQ vector table __EI(); // global interrupt enable clock_Select(); while(1) { syinit(); timer_init(); } } MCU-AN-500037-Z-10 - 第13页 使用 AD 的键盘开发 V1.0 第 6 章代码示例 注意:该工程基于 starter-kit MB2146-410A。目标 MCU 为 MB95F304K。AN0 用作模拟输入 引脚,LED1-LED4 用作指示器。如果没有提供 3.1 节中的键盘硬件电路,停止跳线并把 VR3 连接到 MCU,用作模拟输入引脚。然后通过调整 VR3 观察 LED 的变化。 MCU-AN-500037-Z-10- 第14页 使用 AD 的键盘开发 V1.0 第 7 章更多信息 7 更多信息 关于富士通半导体更多的产品信息,请访问以下网站: 英文版本地址: http://www.fujitsu.com/cn/fsp/services/mcu/mb95/application_notes.html 中文版本地址: http://www.fujitsu.com/cn/fss/services/mcu/mb95/application_notes.html MCU-AN-500037-Z-10 - 第15页 使用 AD 的键盘开发 V1.0 第 8 章附录 8 附录 表 3-1:键状态和输入电压的关系 ............................................................................................ 6 图 3-1:使用AD进行键盘硬件设计 ........................................................................................... 6 图 4-1:ADC1 寄存器 .............................................................................................................. 7 图 4-2:ADC2 寄存器 .............................................................................................................. 8 图 4-3:AD数据寄存器 ............................................................................................................. 9 图 5-1:键盘开发的软件设计流程图 ...................................................................................... 11 MCU-AN-500037-Z-10- 第16页