实验3按键轮询_第1页
实验3按键轮询_第2页
实验3按键轮询_第3页
实验3按键轮询_第4页
实验3按键轮询_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、无锡谷雨电子实验三按键实验(轮询),按键控制 LED 亮灭2014/1/27在此处键入文档的摘要。摘要通常是对文档内容的简短总结。在此处键入文档的摘要。摘要通常是对文档内容的简短总结。目录前言2必要条件2原理图2编程参考3源码分析46 编译调试67 使用 Flash Programmer程序71 前言人机交互最简单的方式是按键,只要程序写的足够好,几个按键就可以实现非常复杂的输入。SmartRF 开发板上有两种按键,一个是 Joystick 五向按键,另外一个是普通按键,本实验实现的是普通按键实验(轮询)2 必要条件A 硬件1、 SmartRF 系列开发板,CC2530 或者 CC25312、

2、 CC-Debugger 仿真器B1、 IAR for 8051 开发环境,版本:8.102、 Flash Programmer 固件烧写。3 原理图当 P1.0当 P1.1当 P1.4是 LED1 亮,低电平是 LED1 灭;是 LED2 亮,低电平是 LED2 灭;是 LED3 亮,低电平是 LED3 灭;S1 按键按下时,P0.1 为,S1 按键恢复时,P0.1 为低电平(常态)。4 编程参考和一般的单片机一样,控制 GPIO,需要配置 GPIO 相关的寄存器,完整册,请参:目录下的 CC253x4x User Guide. (Rev. C).pdf,对应的 CC2530 的中文手册。C

3、C254xEK宏定义函数 BV()。#define BV(x)1x;/将 1每个位。x 位,这样可以非常方便而且非常清晰的控制寄存器的/ P1.0 定义为输出P1DIR |= BV(0);P1SEL &= BV(0);/ P1.0 定义为一般 GPIO/设置 P0.1 为普通 IO 口P0SEL &= BV(1);/按键接在 P0.1 口上,设 P0.1 为输入模式/设置 P0.1 输入为上拉下拉模式/设置 P0.1 下拉,其实外部已经有下拉电路。P0DIR &= BV(1);P0INP &= BV(1); P2INP |= BV(5);注意上面的表格,每个寄存器中都有一个默认值,上面表格中

4、Reset 就是寄存器的默认值。TIPS:在协议栈中,用到了非常多的宏定义函数,宏定义不但能保持代码简介,而且代码更容易,建议大家在编码过程中多使用效率高的宏定义。5 源码分析打开实验 3 按键实验key 工程(双击 Key.eww 打开)#include /CC2531 也可以使用该头文件/Ghostyu SmartRF 开发板实验/按键实验(轮询)/技术支持:/无锡谷雨电子typedef unsigned char u8;typedef unsigned shortu16;/定义 P1.0 口为 LED1 控制端/定义 P0.1 为按键输入端口#define LED1 P1_0#defin

5、e KEY1 P0_1/*常用宏定义*/ #define BV(x) (1(x)/*名称: DelayMS()功能: 毫秒延时,系统时钟不配置时默认使用16M参数: msec 延时参数,注意,最大数值为 65536ms出口参数: 无*/ void DelayMS(u16 msec)u16 i,j;for (i=0; imsec; i+)for (j=0; j536; j+);/*名称: InitLed()功能:参数:出口参数:设置 LED 相应的 IO 口无无*/void InitLed(void)/ P1.0 定义为输出/ LED1 灯熄灭P1DIR |= BV(0);LED1 = 0;/*

6、名称: InitKey()功能:参数:出口参数:设置按键相应的 IO 口无无*/void InitKey(void)/设置 P0.1 为普通 IO 口/按键接在 P0.1 口上,设 P0.1 为输入模式/设置 P0.1 输入为上拉下拉模式/设置 P0.1 下拉,其实外部已经有下拉电路。P0SEL &= BV(1);P0DIR &= BV(1); P0INP &= BV(1); P2INP |= BV(5);/*名称: KeyPoll()功能:参数: 无按键状态出口参数: 0 为抬起1 为按键按下*/u8 KeyPoll(void)if (KEY1 = 1)DelayMS(10);/去抖动延时 if (KEY1 = 1)while(KEY1);/是否持续按下/有按键按下return 1;/无按键按下return 0;void main(void)InitLed(); InitKey();/设置 LED1 相应的 IO 口/设置 S1 相应的 IO 口while(1)if (KeyPoll()/按键按下则改变 LED 状态LED1 = LED1;6 编译调试根据实验 1 中的方法调试程序,若有语法错误,根据提示修改语句。按

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论