




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验四 gpio 输入实验一、实验目的1、能够使用gpio的输入模式读取开关信号。2、掌握gpio相关寄存器的用法和设置。3、掌握用c语言编写程序控制gpio。二、实验环境 pc机 一台 ads 1.2集成开发环境 一套easyarm2131教学实验平台 一套 三、实验内容1.实验通过跳线 jp8 连接key1与p0.16,程序检测按键key1 的状态,控制蜂鸣器beep 的鸣叫。按下key1,蜂鸣器鸣叫,松开后停止蜂鸣。(调通实验后,改为key3键进行输入)。 2.当检测到key1有按键输入时点亮发光二极管led4并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键没
2、有输入。(键输入改为键key4,发光管改为led6)。3.结合实验三,当按下按键key1时,启动跑马灯程序并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键再次按下。四、实验原理当p0 口用于gpio输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路图参见图 4.2。进行 gpio 输入实验时,先要设置iodir 使接口线成为输入方式,然后读取iopin 的值即可。图 4.2按键电路原理图实验通过跳线 jp8 连接key1_p0.16,程序检测按键key1 的状态,控制蜂鸣器beep 的鸣叫。按下key1,蜂鸣器鸣叫,松开后停止蜂鸣。在这个实验中,需要将按键k
3、ey1 输入口p0.16 设为输入口而蜂鸣器控制口p0.7 设置为输出口。蜂鸣器电路如图 4.3 所示,当跳线jp6 连接蜂鸣器时,p0.7 控制蜂鸣器,低电平时蜂鸣器鸣叫。led灯电路如图4.4所示,低电平时灯亮。图 4.3 蜂鸣器控制电路图 4.4 led 控制电路程序首先设置管脚连接寄存器pinsel0 和pinsel1,设置p0.16 为输入,设置p0.7,p1.21 为输出。然后检测端口p0.16 的电平,对p0.7, p1.21进行相应的控制,流程图如图 4.5 所示,实现程序见程序清单 4.1。图 4.5 按键输入实验流程图5、 实验步骤、源代码及调试结果内容1实验步骤 启动ad
4、s1.2ide集成开发环境,选择arm executable image for lpc2131工程模板建立一个工程beep_key。 在user组里编写主程序代码main.c。 选用debuginflash生成目标,然后编译链接工程。 将easyarm教学实验开发平台上的相应管脚跳线短接gde台ngtheng 444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444。 选择project-debug,启动axd进行jlink仿真调试。 全速运行程
5、序,程序将会在main.c的主函数中停止。如下图所示: 单击context variable图标按钮(或者选择processor views-variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择system views-debugger internals 即可打开lpc2000系列arm7微控制器的片内外寄存器窗口。通过变量窗口可以观察变量beep、key1等的值和arm7微控制器的片内外寄存器窗口。如下图所示: 可以单步运行程序,先按下key1,观察io0pin寄存器的值,然后断开key1,观察io0pin寄存器的值。可以设置/取消断点;或者全速运行程序,停止程
6、序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示: 图4.6 未按下key1时io0pin的值 图4.7 按下key1时io0pin的值 由上两图可知,当按下key1时,io0pin寄存器的第16位由1变为0(f变为e),key1与p0.16相连,按下key1时,p0.16管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,说明控制是正确的。现象描述:按下key1,蜂鸣器鸣叫,松开后停止蜂鸣。源代码:#include config.hconst uint32 beep = 1 7; / p0.7 控制蜂鸣器const uint32 key1 = 1 16; / p0.16 连接key1 (
7、改为key3时,只需“const uint32 key1 = 1 16”改为“const uint32 key3 = 1 debug,启动axd进行jlink仿真调试。 全速运行程序,程序将会在main.c的主函数中停止。如下图所示: 单击context variable图标按钮(或者选择processor views-variables)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择system views-debugger internals 即可打开lpc2000系列arm7微控制器的片内外寄存器窗口。通过变量窗口可以观察变量beep、key1等全局变量、i等本地变量和ar
8、m7微控制器的片内外寄存器窗口。如下图所示: 左图所示为arm7微控制器的片内寄存器窗口。 图4.9 本地变量 图4.8 全局变量 可以单步运行程序,先按下key1,观察io0pin寄存器的值,然后断开key1,观察io0pin寄存器的值。可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示:.图4.10 未按下key1时io0pin的值 图4.11 按下key1后io0pin的值对比图4.10和4.11,发现按下key1后,io0pin寄存器的第16位由1变为0;而key1对应管脚p0.16,当按下时输入低电平,这说明key1的控制是正确的。
9、上图所示为运行 “io0clr = beep”后io0pin寄存器的值,与图4.10对比,发现第8位由1变为0,beep对应p0.7管脚,这说明beep的控制是对的。现象描述:当按下key1时,蜂鸣器鸣响,led4亮;当松开key1后,蜂鸣器静音,led4灭。源代码如下:#include config.hconst uint32 beep = 1 7; / p0.7 控制蜂鸣器const uint32 key1 = 1 16; / p0.16 连接key1 (改为key4按键时,只需把上句代码改为“const uint32 key4=119”,其余不变)const uint32 leds4=
10、1 21; / p121控制led4,低电平点亮(改为led6时,只需把上句代码改为“const uint32 led6=123”,其余不变。)/* 函数名称:main()* 函数功能:gpio 输入实验测试。* 检测按键key1。key1 按下,蜂鸣器蜂鸣,松开后停止蜂鸣。* 跳线说明:把 jp8 的key1 跳线短接,jp11 连接蜂鸣器。*/int main (void) uint32 i; pinsel0 = 0x00000000; / 所有管脚连接gpiopinsel1 = 0x00000000;io0dir = beep; / 蜂鸣器控制口输出0io1dir = leds4; /
11、设置led4 灯亮while (1) if (io0pin & key1) = 0)for(i=0; i1000; i+); / 软件延时io0clr = beep; / 如果key1 按下,蜂鸣器鸣叫io1dclr = leds4; / 设置led4 灯亮else io0set = beep; / 松开则停止蜂鸣io1set= leds4; / 设置led4 灯灭for(i=0; idebug,启动axd进行jlink仿真调试。 全速运行程序,程序将会在main.c的主函数中停止。如下图所示: 单击context variable图标按钮(或者选择processor views-variab
12、les)打开变量观察窗口,通过此窗口可以观察局部变量和全局变量。选择system views-debugger internals 即可打开lpc2000系列arm7微控制器的片内外寄存器窗口。通过变量窗口可以观察变量beep、key1等的值和arm7微控制器的片内外寄存器窗口。如下图所示: 可以单步运行程序,先按下key1,观察io0pin寄存器的值,然后断开key1,观察io0pin寄存器的值。可以设置/取消断点;或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制是否正确。如下图所示: 图4.12未按下key1时io0pin的值 图4.13按下key1时io0pin的值 由上两图
13、可知,当按下key1时,io0pin寄存器的第16位由1变为0(f变为e),key1与p0.16相连,按下key1时,p0.16管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,流水灯亮,说明控制是正确的。现象描述:当按下按键key1时,蜂鸣器鸣响,流水灯亮;松开后,蜂鸣器静音,流水灯灭。源代码如下:#include config.hconst uint32 beep = 1 7; / p0.7 控制蜂鸣器const uint32 key = 1 16; / p0.16 连接key1const uint32 leds8 = 0xff 0; dly-) for(i=0; i50000; i+);
14、/* 函数名称:liushuideng()* 函数功能:流水灯显示实验。* 调试说明:连接跳线 jp12 至led8led1。*/* 流水灯花样,低电平点亮,注意调用时候用了取反操作 */const uint32 led_tbl = 0x00, 0xff, / 全部熄灭后,再全部点亮0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, / 依次逐个点亮0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, / 依次逐个叠加0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01
15、, / 依次逐个递减0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, / 两个靠拢后分开0x81, 0xc3, 0xe7, 0xff, 0xff, 0xe7, 0xc3, 0x81 / 从两边叠加后递减;int liushuideng(void) uint8 i;pinsel1 = 0x00000000; / 设置管脚连接gpioio1dir = leds8; / 设置led 控制口为输出while (1) for (i=0; i42; i+) /* 流水灯花样显示 */io1set = (led_tbli) 18);delayns(20);io1clr = (led_tbli) 18);delayns(20);return 0;/主函数int main(void) uint32 i; pinsel0 = 0x00000000; / 所有管脚连接gpiopinsel1 = 0x00000000;io0dir = beep; / 蜂鸣器控制口输出0while (1) if (io0pin & key) = 0)for(i=0; i1000; i+); / 软件延时io0clr = beep; / 如果key 按下,蜂鸣器鸣叫liushuideng();else io0set = beep; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能会议室设计考核试卷
- 联合研发创新考核试卷
- 数字化平台在非遗教育中的作用考核试卷
- 幼儿园风车试题及答案
- 公共空间设计试题及答案
- 财政税收考试题及答案
- 合同公证在娱乐合同中的法律风险控制考核试卷
- 智能化升降机超载保护系统用户体验提升策略考核试卷
- 浙江学历提升考试试题及答案
- 燃气安全知识考试试题及答案
- 2025年宁波市奉化区红果文体产业运营管理有限公司招聘笔试参考题库含答案解析
- 创新人才小升初试题及答案
- 委托加工稻米协议书
- 国际压力性损伤溃疡预防和治疗临床指南(2025年版)解读
- 行政管理过程中道德与法律的关系试题及答案
- 2024-2025学年广东省深圳市高一数学下学期7月期末考试(附答案)
- 2025-2030年中国核子及核辐射测量仪器行业竞争格局及发展趋势分析报告
- 2025物业社区文化建设方案物业社区文化活动方案2
- 高端写字楼安全管理
- 大学英语四六级词汇表
- 2025年中考历史开卷考查范围重大考点全突破(完整版)
评论
0/150
提交评论