




已阅读5页,还剩160页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文档由 “X-TAB 论坛”提供 () 1 入门必修 按键检测与程序结构.菜菜 / / MC430F224 / - / /| | / | | | / -|RST in1 |-|GND KEY1 1 / | in2 |-|GND KEY2 / | in3 |-|GND KEY3 / | | / | out1 |-| /初级用户要习惯采用宏定义,以方便的编写和修改 #define keyio 0xf1 /定义按键 IO 口,所有键口为 0. #define key_1 0xfd /定义返回键值 1 #define key_2 0xfb /定义返回键值 2 #define key_3 0xf7 /定义返回键值 3 #define LED_D1_flash P1OUT = BIT1 #define LED_D2_flash P1OUT = BIT2 #define LED_D3_flash P1OUT = BIT3 #define bell_delay 7000 /声明子程序 unsigned char key_chcek(void); void display_update(unsigned char dta); void key_process_0(void); void key_process_1(void); void key_process_2(void); /* * /将单片机初始化程序放在 main()前面是方便查看单片机的初始化状 态情况. void MCU_int(void) /默认 MCLK 主时钟频率为 DCO=800K P1OUT |= BIT1+BIT2+BIT3; /设置 LED,上电为灭.电路可以 查看 MC430F14 电路图. P1DIR |= BIT1+BIT2+BIT3; /P1.1 设置为输出. /MSP430 单片机 IO 口上电默认方向为输入,所以接按键的 IO 无需 再设为输入. /* * void main (void) unsigned char key_value; /定义键值全局变是 WDTCTL = WDTPW + WDTHOLD; /关狗 MCU_int(); /初始化单片机 while(1) /主程序主循环 key_value=key_chcek(); /检测,有键按下并松开,返回 一个键值. switch (key_value) /对键值进行处理 .采 switch 语法结构查询 case key_1: key_process_0(); /调用键处理程序 1 break; case key_2: key_process_1(); /调用键处理程序 2 break; case key_3: key_process_2(); /调用键处理程序 2 break; default: ; /调用键处理程序 4 break; display_update(key_value); /如果有需要可以在这里加上 显示更新程序. key_value=0x00; /最后清除键值.将继续主循 环. /* * /按键检测程序 /返回值: 无符号字符型键值 unsigned char key_chcek(void) unsigned int i; unsigned char timp,active; active=0; while(!active) while(0xff =( P2IN | keyio); /一直等待有键按下 timp = P2IN | keyio; /若有键接下了,则读入 IO 状 态. for(i=0;i0;n-); while(OFIFG P1DIR |=BIT1+BIT2+BIT3; /LED- D1,D2,D3 P1OUT /P11 输出 0,D1 LED 亮 P3SEL |= BIT4+BIT5; /p3.4 为 TX,P3.5 为 RX P3DIR |= BIT4; /P3.4 为输出方向 (TXD 口) UCA0CTL1 |=UCSSEL0; /0x40时钟 源选择 ACLK=32768 晶振 UCA0BR1=0; /设置波特率 32768/1200=27.3 UCA0BR0=27; UCA0MCTL |=UCBRS1; /调整寄存器 设置 UCBRSx=INT(0.3*8)=2 UCA0CTL1 /串口状态 机设置完毕,退出 USCI 设置 IE2 |=UCA0RXIE+UCA0TXIE; /允许收发中 断 _EINT(); LPM3; /进入低功耗 3 并使能总中断 /或写成 _BIS_SR(LPM3_bits+GIE); _NOP(); for(;) _DINT(); /关闭总中断 _BIS_SR(LPM3_bits+GIE); /* * /USCI 中断用法 /USCI_AX 和 USCI_BX 使用同一个中断向量。接收中断标志 UCAxRXIFG 和 UCBxRXIFG 和同 /一个中断向量连接,发送中断标志 UCAxTXIFG 和 UCBxTXIFG 分享另一个中断向量。 /* * /接收中断服务程序 #pragma vector =USCIAB0RX_VECTOR _interrupt void rx_isr(void) BUF = UCA0RXBUF; /接收一个数据 后,存入一个全局变量中 P1OUT = BIT2; /用 D2 LED 指示 接收到一个数据 update; LPM3_EXIT; /接收完一个数据 后,退出低功耗模式 /* * /大家注意,MSP340F2 上电后 UCA0 的中断标志寄存器 IFG2 中 UCA0TXIFG 发送中断标志位就置 1. /在初始化时,只要总中断允许了 ,同时发送中断也允许了.初始化完后, 发送中断服务程序就 /被马上执行. /当 UCA0TXBUF 空闲时,中断标志寄存器 IFG2 中 UCA0TXIFG 发送中断标志位就置 1. /发送中断服务程序 #pragma vector =USCIAB0TX_VECTOR _interrupt void tx_isr(void) if(check_update) /是否有数据更新 UCA0TXBUF = BUF; /是,将接收到 的数据发回去 sign /清除标志 P1OUT = BIT3; /用 D3 LED 指 示发送完一个数据 /* * 3 MSP430F5xxx 在高速公路不停车收费系统(ETC)中的应用 摘要 本文探讨了使用 MSP430F5xxx 实现 ETC 系统中实时 HDLC 编解 码的方法。MSP430F5xxx 是 TI 公司 MSP430 家族最新产品序列, 采用先进的 0.18 工艺,1MIPS 消耗的电流低到了惊人的 160uA。同 时,F5xx 产品都配备了高效灵活的 DMA 模块,对 16bit 数据进行 搬移只需要 2 个时钟周期。本文给出了结合 F5xx 的 DMA,TimerA ,CRC16 及 SPI,实现几乎实时的 HDLC FM0 软 解码办法和利用 SPI 的便捷的 FM0 编码方法。本文包括相关的两个 实例代码。 MSP430 介绍 TI 公司的 MSP430 单片机产品系列具备 16-bit RSIC 架构,超低功 耗。作为 MSP430 最新产品序列,F5xxx 首次采用 0.18um 工艺, 1MIPs 消耗的电流低到了惊人的 160uA,主频达到 25MIPs 。同时, MSP430F5xxx 提供了丰富的片上功能模块,例如,硬件的 RTC,12-bit ADC,灵活的时钟系统,硬件 CRC16,电源管理模块 和多通道的灵活强大的 DMA,支持待机模式下的数据交换。 高速公路不停车收费系统(ETC)介绍 不停车收费系统(又称电子收费系统 Electronic Toll Collection System,简称 ETC 系统)是利用 RFID 技术,实现车辆不停车自动 收费的智能交通子系统。该系统通过路侧单元 RSU(Road Side Unit)与车载电子标签之间 OBU(On Board Unit)的专用短程通 信,在不需要司机停车和收费人员操作的情况下,自动完成收费处 理过程。 ETC 车载单元结构 图 1. ETC OBU 结构图 如图一所示,OBU 由电池系统,MCU,射频,显示和读卡部分 (ESAM 卡,CPU 卡,射频卡)组成。MCU 作为整个系统的中心, 负责管理显示,读卡以及与射频部分的数据处理及交换。 FM0 编码方式介绍 在车辆通过收费站时,OBU 和 RSU 通过 5.8G 的载波调制,进行高 速的数据交换。数据采用 HDLC FM0 调制。FM0 编码遵循以下三 个规则: A.一个周期内有电平跳变表示”0” ; B.一个周期内没有电平跳变表示”1”; C相邻两个周期电平相反。 数据形式请参考图 2 图 2. FM0 编码方式 车载电子标签(OBU)对 MCU 的挑战 车载电子标签系统对 MCU 有两个挑战 。一是低功耗;二是高速数 据通信能力。 车载电子标签的电池要求有 5 年以上寿命或者能够支持 1 万次以上 交易。整个系统的低功耗设计成为工程师们的首要任务。其次, RSU 对 OBU 下行数据波特率达到了 256Kbps,上行数据波特率 512Kbps。由于车辆通行时间非常短,需要 OBU 对 RSU 的数据和 命令快速响应。而数据包最长能够达到 1Kbits,不允许 OBU 收下 整个数据包之后再解码,这要求 MCU 有实时编解码的能力。 一般情况下,对 FM0 的软解码需要得到数据的电平宽度,从而实现 解码。通常有两种方式,一种是 Timer 捕获数据沿,然后软件在中 断中判断数据沿之间的宽度。另外一种是定时采样数据口线的电平, 通过计数方式得到电平宽度。ETC 下行数据速率达到 256Kbps,对 数据“0”来讲,数据跳变沿之间的宽度只有 2uS。对数据“1”来 讲,数据沿宽度只有 4uS。以第一种方式为例,传统的软解码方式 过程如下: 图 3. Timer 捕获中断方式 如图 2 所示,数据接收过程中,Timer 会每 2uS 或者 4uS 捕获到一 个数据沿,并把数据沿保存到对应寄存器。所以,Timer 捕获寄存 器里的数据会最快每 2uS 更新一次。这就需要 CPU 速度足够快, 能够在至少 2uS 之内完成解码过程。否则,Timer 捕获寄存器的数 据就会被新的数据覆盖掉,造成解码错误。假设 MCU 完成 1 个 bit 解码的时间需要 50 个 cycle,那么至少需要 MCU 主频达到 25MIPS 以上才能实现实时解码。通常,我们会选取主频超过 40MIPs 的 MCU,而这些高速 MCU 功耗往往难以满足 ETC 系统的要求。所 以,很多 ETC 生产商采用双 MCU 的方式,由一颗高速 MCU 实现 FM0 实时编解码,另外还有一颗低功耗 MCU,通常是 MSP430 来 管理整个系统的功耗。这增加了系统的成本和复杂度。 MSP430F5xxx 的问世,能够同时满足 ETC 系统对 MCU 所有的挑 战,解决了客户的困扰。 用 F5xxx 片上 DMA 和 TimerA 捕获功能实现 FM0 实时解码的方 法 MSP430F5xxx 卓越的低功耗特性能够满足 ETC OBU 的低功耗要求。 作为 MSP430 最新产品序列,F5xxx 首次采用 0.18um 工艺,1MIPs 消耗的电流低到了惊人的 160uA,片上 PMM(电源管理模块)让 用户能够根据 MCU 负荷灵活调节核电压,确保功耗最低。另外, 具备多种低功耗状态。在典型的 LPM3 模式下,打开 RTC,RAM 数据保持的情况下功耗仅为 2uA。 除了卓越的低功耗特性外,MSP430F5xx 主频虽然最高只能达到 25MIPS,但由于有灵活的多通道 DMA,能够与 Timer 联动,实现 数据的自动搬移而不干扰到 CPU,这极大的增强了 MCU 的数据吞吐 能力,使主频不再成为瓶颈,而完成对 FM0 近乎实时的解码。另外, 硬件的 CRC16 模块让 MCU 只需要操作寄存器就可以完成数据校验。 利用 DMA 和 CRC16 的实时解码过程如图 4 所示: 图 4. DMA 自动数据搬移的解码方式 数据接收过程中,Timer 每 2uS 或者 4uS 捕获到一个数据沿,这时 会自动触发 DMA,DMA 自动将 Timer 寄存器的数据搬移到 RAM 区的指定数组当中。整个数据接收过程不需要 CPU 的参与。有了 DMA 的存在,CPU 就不需要频繁的进出中断去取数据,也不用担 心 Timer 捕获寄存器数据的丢失,只需专注于解码过程。 图 5. FM0 DMA 方式解码图示 解码过程说明: 1. 待机状态:TimerA 配置成捕获模式,使能 TimerA 中断,等待 数据到来 2. 捕获到第一个数据沿:在 TimerA 中断中使能 DMA,使能 TimerB 及 TimerB 中断 3. 数据接收:DMA 自动将后续的数据沿搬移到内存数组中;同时 MCU 解码 4. 数据结束:TimerB 判断数据接收结束 5. 解码结束 图 6. 程序流程图 实测结果: 采用 120bytes 的数据做 FM0 解码测试,其中数据位”1”和“0” 约各占 50%。MSP430F5438 完成解码后,通过串口输出数据如图 7 所示: 图 7. 串口接收到的数据 对上图 1Kbits 数据,实测 MCU 完成解码,滞后数据包接收完毕约 220uS.如图 8 所示 图 8. 解码实时性 使用 MSP430F5xx SPI 及 DMA 实现 FM0 编码及发送的办法 ETC OBU 系统 MCU 上行数据率是 512Kbps。通过灵活应用片上 DMA 及 SPI 模块,可以方便的完成 FM0 数据发送 4 RGB LED 气氛灯光照明营造温馨照明的 MSP430 作者:Dirk Gehrke 和 Christian Hernitschek,德州仪器 (TI) 高亮度 LED 在照明应用中的使用越来越广泛。我们在这里将介绍 一种简单的“气氛照明灯” ,其仅使用了少量的组件。所有这三 种 LED 均由使用开关调节器的恒定电流来供电,同时亮度控制由能够 产生三种 PWM 信号的 MSP430 微控制器来完成。可以用磨 砂 玻璃外壳将印刷电路板安装到台灯中,或者也可以和 LED 聚光灯 一起使用来进行间接照明。 无论其功耗有多大,现在的 LED 通常都使用一个恒定电流源来驱 动。这是因为以流明 (lm) 为单位的光输出量和电流量成正比例 关 系。 因此,所有的 LED 厂商都规定了诸如光输出(有时称为光学效率) 、 可视角度和波长等参数,作为正向电流 IF 的函数,而非像人 们所 期望的那样作为正向电压 VF 的函数。所以,我们在电路中使用了 适当的恒定电流调节器。 用于高亮度 LED 的恒定电流 市场上大多数开关调节器都被配置为恒定电压源,而非恒定电流源。 将恒定电压调节器转换为恒定电流运行必须要对电路进行 简单、稍 微的改动。我们使用了一个压降被调节了的电流感应电阻器,而非 通常用于设定输出电压的分压器。图 1 显示了该电路的 简化图。 图 1 一个开关调节器既可以被配置为一个电压源也可被配置为一个 电流源 LED 亮度调节 LED 亮度调节的方法主要有两种。第一种也是最为简单的一种方法 便是利用模拟控制直接控制流经 LED 的电流:通过降低流经 LED 的电流带来降低其亮度。然而不幸的是,这种方法存在两个严重的 缺点。首先,LED 的亮度并非严格地和电流成正比例关系, 其次, 当电流的变化超过 LED 额定值时发光的波长(以及由此带来的颜 色变化)可能会随着电流变化而发生变化。这两种现象通常 是我们 不希望看到的。 稍微复杂一点的控制方法是使用能够提供 LED 额定工作电流的恒 定电流源。这样,附加电路就可以利用给定脉冲间隔比 (mark - space ratio) 快速地将 LED 开启和关闭,从而平均发出更少的光, 感觉就像是光的强度降低了。通过脉冲间隔比,我们可以较轻松地 对 LED 的感知亮度进行调节。这种方法被称为脉宽调制(或 PWM) 。 利用 PWM 进行调光 作为一个示例,我们将会看到一些使用 TPS62260 实施 PWM 控 制的方法。TPS62260 是一款同步降压转换器,其具有集成的开关 元件,典型的时钟频率为 2.25MHz。在图 2 的电路中,我们以黑 色显示了将 PWM 信号直接连接至 EN(使能)引脚的可能性。整 个开 关调节器电路和 PWM 信号一起开启和关闭。在我们实验中 的试验表明,在这种配置中,我们可以使用一个高达 100Hz 的 PWM 频 率。这种排列的优点是其简易性:不需要额外的组件。另 外,它还是最为高效能的实施方法,因为该开关调节器在关闭时仅 产生非 常少的静态电流。其缺点是,LED 对使能引脚上高电平的 反应被延迟。这是因为开关调节器具有一种“软启动”功能:当器 件被开启时 ,输出电流逐渐上升,直到其达到额定的 LED 电流。 在一些应用中,这种上升斜坡可能会存在一些问题,因为 LED 发 光的波长随电 流从其最小值到正常工作电平的逐渐增强而变化。例 如,在一个 DLP 投影仪或 LCD 电视面板的 LED 背光灯中,这 种变化可能是我 们无法接受的。但是,就这个示范项目而言,肉眼 无法看到这种影响。 在第二个变量中(图 2 中红色所示部分) ,PWM 信号通过一个小 信号二极管被耦合至 TPS62260 的误差放大器输入端。在本电路 中,一个施加于控制输入端的超过 600mV 的正电压会使误差放大 器输入驱动过度,并由此关闭 LED。由于这个电路没有使用使能 输入,因此它不具有与调节器软启动功能相关的启动延迟,且 LED 被极为快速地开启和关闭。 因此,上述电流斜坡所带来的输出波长变化在本结构中小到可以被 忽略不计。另外,我们在实验室里发现,PWM 频率可以上升 到 5kHz。 图 2 中蓝色部分显示了第三种可能性。这里的 PWM 信号被用于 控制线连至 LED 的 MOSFET。MOSFET 使 LED 短路,并允许 其 被更加快速地开启和关闭。该调节器运行在恒定电流模式中,而 且电流将会流经 LED 或者 MOSFET。这种方法的一些缺点包括 MOSFET 带来的额外成本以及低效能:在 2 电流感应电阻器中 会有高达 180mW 的功率被不断耗散掉。其优点是较高的开关频率: 在一些实验中,我们看到 TPS62260 可以成功运行在 50kHz PWM 频率的状态下。 图 2 实施调光功能的三种方法 图 3 使用 JTAG 连接 (JP1)、eZ430 连接器 (JP2) 和旋转编码器 (R1) 基于 MSP430 微控制器的这种电路的控制部分 图 4 由三个配置为恒定电流源的开关调节器和一个使用分立组件构 建的 3.3V 稳定电源组成的电路部分 实际电路 该电路的核心(请参见图 3 和图 4)为一个 MSP430F2131 微控制 器。对它进行编程,以使其起到一个三重 PWM 生成器的作用,并 从旋转编码器 (R1) 读取数值。编码器值用于对一个包含所有红色、 绿色和蓝色 LED 脉冲间隔比值的查寻表编索引。然后,相应的 PWM 信号就会出现在接近 122Hz 频率时的输出引脚 TA0、TA1 和 TA2 上。该信号的强度足以确保 LED 不会出现闪烁,因为眼 睛将 单个光脉冲平滑成了一个平均可感知强度值。 就实际实施而言,我们选择了图 2 中红色部分所示的 PWM 控制 方法,其在电路复杂性和性能之间给出了一个较好的平衡值。 每一 个 LED、红色(D14) 、绿色(D24)和蓝色(D34)均由一个来自 单个 TPS62260 DC/DC 转换器的恒定电流供电。2 电阻器将流 经 LED 的额定电流设定在 300mA。使用 TPS62260 的“大哥” 级产品 TPS62290 可以获得更强的电流(高达 1A) ,其采用相同的 方式进行 封装。 使用小信号二极管(D13、D23 和 D33)耦合 PWM 信号。当 PWM 信号较高时,其会超过相应开关调节器的正常误差信号输入, 其 具有一个 600 mV 的极限电压电平。这就是说,PWM 信号的 高电平会迫使 LED 熄灭。当 PWM 信号最终降低时,该调节器再 次启动 ,同时 LED 亮起。整个电路均由一个经过调节的 5V 1 A DC 电源适配器供电。使用一个电阻和一个齐纳二极管构建的简单 稳压器将 5V 电平降低至 3.3V,以用于 MSP430 微控制器。 该电路可以构建在如图 5 所示的印刷电路板上。有三种版本的电路 板,它们之间的区别仅在于占地面积和 LED 连接排列的不同 。这 就允许使用不同类型的 LED,在部件列表中列举出了一些可供选择 的 LED。 散热图 在高功耗 LED 的性能中,工作温度是一个重要的参数,其会给工 作寿命、正向电压、输出波长甚至是设备的亮度带来很大影 响。 LED 的工作温度越高,其预期寿命就越短。考虑到这一因素,我们 选择的实验印刷电路板尺寸,要能够允许将 SK477100 型散热 片 (由 Fischer Elektronik 制造)安装到使用双面粘合热传输材料的 电路板背面。在满功率下运行时,这可以将 LED 的温度从 61 C(无 散热片)降低至 54 C(有散热片) 。该散热片还有助于加 速印刷电路板区域上的热量耗散。 为了制作一幅示例散热图,我们将电路板和 Cree 公司的 LED 组 装在一起。图 6 生动地显示了结果,从而描述出了无散热片(图 左侧)和有散热片(图右侧)时 LED 的温度情况。 软件 本应用中 MSP430 软件的源代码可以从 Elektor 网站上下载。该 代码以包括“MSP430F21x2.h”报头文件作为开始,该文件包含了 所 有控制寄存器名称以及 MSP430 中可用控制比特的定义。接下 来,颜色表的长度就被定义了出来。这里需要注意的是, “LED_TabLength”的值实际上被设定为四倍 表长度。然后,按照 颜色表本身,为每一个单独的 LED 使用一个单独的阵列。指示器 “LEDptr”被用于从单个颜色表阵列中读取所有三个输出的相应 PWM 脉冲间隔比设置:也可以参见文本框“颜色表” 。 微控制器在函数“main()”的开始便被初始化。看门狗定时器被关 闭,可调系统时钟的校准值被加载,定时器 A 模块得到配置,同 时多元输入和输出均被适当地初始化。主环路由两个“while”块组 成。在第一个“while”块中,颜色表指示器 LEDptr 增加,其将 导致 PWM 脉冲间隔不断变化,并由此生成不同的颜色。使用两个 嵌套的“for”环路来对这些颜色变化的总时间进行控制。第一个 “while”环 路运行到旋转编码报告其输出中出现变化为止。然后, 第二个被写成一个无限环路的“while”块接过控制权:它根据旋转 编码被转换 的方向来增强或衰减颜色表指示器。 光明的未来 印刷电路板允许实施更多的功能,例如:专门针对 TI eZ430- RF2500 射频模块的芯片 (socket)。eZ430-RF2500 套件由两个射频 模块 供电。 (通过在射频模块的微控制器上使用测试引脚) ,其中的 一个模块可以适用于旋转编码器,从而创建一个到 LED 电路板的 无 线链路。 这里所说的电路板主要用于实验和评估。由于可以获得 MSP430 源 代码,因此我们可以对其进行修改以用于其他项目。我们还 可以在 其他一些应用中运用开关调节器:希望您能乐在其中! 图 5 用于构建图 3 和图 4 中电路的印制电路板。有三个不同版本 供您下载,以支持不同类型的 LED。 图 6 和 Cree 公司的 LED 一起组装的电路板散热图。左侧:无散 热片;右侧:有散热片。 作者简介 Dirk Gehrke 出生于德国明斯特,毕业于德国多特蒙德应用科技大 学 (Dortmund University of Applied Sciences and Arts) 通信技术专 业。他于 1998 年开始在 TI 工作,并先后在英国、法国和美国担 任现场应 用工程师 (FAE)。自 2000 年以来,他一直在德国弗莱 辛担任电源管理产品现场应用工程师,2006 年 1 月他被提升为欧 洲、中东和非 洲 (EMEA) 地区模拟产品业务开发经理。 Christian Hernitscheck 毕业于德国兰茨胡特应用科学大学 (Landshut University of Applied Sciences) 电子工程专业,主修微电 子学。自 1998 年以来,他一直担任 TI 整 一:基础实验 功能:控制 IO 口实现流水灯的一次点亮并循环下去 #include“msp430x14x.h“ void delay(unsigned int a) unsigned int i,j; for(j=a;j0;j-) for(i=80;i0;i-); void main(void) WDTCTL=WDTPW+WDTHOLD; P2DIR|=0XF0; /1111-0000 1 表示输出,0 表示输入 P2OUT /0000-1111 输出寄存器 while(1) P2OUT|=BIT4; delay(800); P2OUT|=BIT5; delay(800); P2OUT|=BIT6; delay(800); P2OUT|=BIT7; delay(800); P2OUT delay(800); 二:IO 口控制(IO 口中断)实验 功能:利用 IO 口中断实现按键中断,当按键按下时对应 LED 等亮 #include #pragma vector=PORT2_VECTOR /声明中断源 是 IO 口 2 的中断 _interrupt void port2(void); void main(void) WDTCTL=WDTPW+WDTHOLD; _EINT(); P2DIR|=BIT4; P2DIR P2IE|=BIT0 ; P2IES|=BIT0 ; _BIS_SR(LPM3_bits + GIE); /开总中断 并使 CPU 进入低功耗 模式 while(1); _interrupt void port2(void) if(P2IN else P2OUT|=BIT4; 三:数码管实验 功能:编程实现 6 个数码管依次显示 1 到 6 /* * _ _ _ _ _ _ f| a |b | | | | | | | | | | |_| |_| |_| |_| |_| |_| e| g |c | | | | | | | | | | |_| |_| |_| |_| |_| |_| d LED6 | LED5 | LED4 | LED3 | LED2 | LED1 | | | | | | P5.7 P5.6 P5.5 P5.4 P5.3 P5.2 a-P4.0 b-P4.1 c-P4.2 d-P4.3 e-P4.4 f-P4.5 g-P4.6 .-P4.7 段码 1 选通 P5.2-P5.7 位码 0 导通 / 跳线 P14 P15 P5 P6 P7 P8 * */ #include“msp430x14x.h“ #define uchar unsigned char unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; unsigned char seg=0x7f,0xbf,0xdf,0xef,0xf7,0xfb; void display(uchar i,uchar j) P5OUT=segi; P4OUT=tablej; void main() WDTCTL=WDTPW+WDTHOLD; P5DIR|=(BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); P4DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); while(1) display(0,1); display(1,2); display(2,3); display(3,4); display(4,5); display(5,6); 四:独立按键综合实验 /* / 描述: / 有按键中断时,LED5,LED6,LED7,LED8 亮与灭; / / 跳线:P9 P10 P17 * #include #define led5_pout P2DIR|=BIT4 /通讯状态指示灯 设 置为输出口 #define led5_high P2OUT|=BIT4 /通讯状态指示灯 输 出高 点亮指示灯 #define led5_low P2OUT void delay(unsigned int i) while(i-); void IOinit(void) led5_pout; led6_pout; led7_pout; led8_pout; led5_low; led6_low; led7_low; led8_low; P2IE|=BIT0+BIT1+BIT2+BIT3; P2IES|=BIT0+BIT1+BIT2+BIT3; void main(void) WDTCTL=WDTPW+WDTHOLD; IOinit(); _EINT(); while(1) switch(flag) case 1: if(led5%2) led5_high; else led5_low; flag=0; break; case 2: if(led6%2)led6_high; else led6_low; flag=0; break; case 3: if(led7%2)led7_high; else led7_low; flag=0; break; case 4: if(led8%2)led8_high; else led8_low; flag=0; break; default: break; _BIS_SR(LPM3_bits+GIE); #pragma vector=PORT2_VECTOR _interrupt void port2 (void) delay(40000);/去抖; if(P2IFG flag=1; if(P2IFG flag=2; if(P2IFG flag=3; if(P2IFG flag=4; P2IFG=0; _BIC_SR_IRQ(LPM3_bits); 五:行列式键盘实验 /* / P6.7 P6.6 P6.5 +3V / | | | | / P6.1- /- /- /-R-| / | | | | / P6.2- /- /- /-R-| / | | | | / P6.3- /- /- /-R-| / | | | | / P6.4- /- /- /-R-| / 跳线 P2 P3 */ #include“msp430x14x.h“ #include“key.h“ void delay(unsigned int i) while(i-); unsigned char key(void) unsigned char x=0XFF; P6DIR=0XE0; P6OUT=0X7F;/ /扫描第一列 if(P6IN /x=0; else if(P6IN/x=1; else if(P6IN/x=2; else if(P6IN else P6OUT=0XBF;/ /扫描第二列 if(P6IN /x=0; else if(P6IN/x=1; else if(P6IN/x=2; else if(P6IN else P6OUT=0XDF; /扫描第三列 if(P6IN /x=0; else if(P6IN/x=1; else if(P6IN/x=2; else if(P6IN return(x); unsigned char get_key(void) unsigned char x,y; if(P6IN if(P6IN if(x!=0xFF) y=x; return y; 六:看门狗程序 /* / MSP430F149 / - / /| XIN|- / | | | / -|RST XOUT|- / | | / | P1.1|LED /* #include void main(void) WDTCTL = WDT_MDLY_0_064; / Set Watchdog Timer interval to 30ms IE1 |= WDTIE; / Enable WDT interrupt P1DIR |= 0x02; / Set P1.1 to output direction _BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt / Watchdog Timer interrupt service routine #pragma vector=WDT_VECTOR _interrupt void watchdog_timer(void) P1OUT = 0x02; / Toggle P1.1 using exclusive-OR 七:TimerA 定时/计数器 /* / MSP-FET430P140 Demo - Timer_A, Toggle P1.1/TA0, Up Mode, 32kHz ACLK / / Description: Toggle P1.1 using hardware TA0 output. Timer_A is configured / for up mode with CCR0 defining period, TA0 also output on P1.1. In this / example, CCR0 is loaded with 1000-1 and TA0 will toggle P1.1 at TACLK/1000. / Thus the output frequency on P1.1 will be the TACLK/2000. No CPU or software / resources required. Normal operating mode is LPM3. / As coded with TACLK = ACLK, P1.1 output frequency = 32768/2000 = 16.384Hz. / ACLK = TACLK = 32kHz, MCLK = default DCO 800kHz / /* External watch crystal installed on XIN XOUT is required for ACLK */ / / MSP430F149 / - / /| XIN|- / | | | 32kHz / -|RST XOUT|- / | | / | P1.1/TA0| ACLK/2000 / / 跳线:J10 Timer_A P0 /* #include void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDT P1DIR |= 0x02; / P1.1 output 选择 P1.1 为输出 P1SEL |= 0x02; / P1.1 option select 外围模块 CCTL0 = OUTMOD_4; / CCR0 toggle mode 输出为反转模式 CCR0 = 1000-1; TACTL = TASSEL_1 + MC_1; / ACLK, upmode _BIS_SR(LPM3_bits); / Enter LPM3 w/interrupt /#include /typedef unsigned char uchar; /typedef unsigned int uint; /uchar flag=0; /void main(void) / / WDTCTL=WDTPW+WDTHOLD; / BCSCTL1 / BCSCTL2 |=SELS+DIVS_3; / P3DIR |= BIT4; / TACTL=TASSEL_2+MC_2+TAIE; /_B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化肥厂电路改造制度
- 教育培训机构收费标准合同协议
- 3.1铁及其化合物-利用覆铜板制作图案 教学设计 2024-2025学年高一上学期化学人教版(2019)必修第一册
- 高中地理 第3单元 第2节 城乡规划与土地利用说课稿 鲁教版选修4
- 八年级语文下册 团结互助 第十二课 姐弟情深 第七课时 阅读理解与科普阅读说课稿 新教版(汉语)
- 九年级语文下册 第五单元 任务一 阅读与思考说课稿 新人教版
- 奎文区安全执法培训班课件
- 2025年钻孔灌注桩施工标准合同范本
- 中医试题及答案
- 中医考试题集及答案
- 2023年广东生物高考第18题光合作用说题课件
- 除锈剂MSDS参考资料
- 6社会体育导论
- 部编版七年级历史与社会下册《第三课中华文明探源》评课稿
- 中考英语作文预测(范文20篇)
- 选煤厂原煤分级筛技术操作规程
- 方物电子教室q2用户手册
- 消防管道支架工程量计算表
- GB/T 700-2006碳素结构钢
- 腹腔镜下肾癌根治术
- 如何学好初中数学-课件
评论
0/150
提交评论