已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用C语言编写程序实现通过按键使LED灯周期闪烁(2010-02-24 21:12:44) 标签:循环闪烁周期led灯按键杂谈 一、设计题目二、程序功能:开机复位后,LED0到LED7全部点亮,所有LEDPort持续2S后熄灭,然后等待按键,按0键LED7以0.8S周期闪烁,按1键LEDPort以1S周期闪烁。三、总体设计思想用中断方式实现定时器的定时,然后通过键盘中断程序实现通过对按键的操作来实现相应的周期闪烁。在我编写的实验程序中我用到了定时器中断和外部中断。程序共分为两个模块,一个为定时器模块,一个为键盘中断程序模块,在主函数中,首先实现所有LEDPort点亮,然后通过中断方式实现定时2S,在定时器num=20时,设定全局变量为标志位flag=1,然后再主函数中设定条件,通过标志位的变化实现所有LEDPort持续2S后熄灭。然后进入循环,等待按键,在按键中断服务程序中使用switch语句实现通过改变num1的值来实现LED7的闪烁周期。设定标志位b=0,在主函数中使用if语句通过判断b的值来改变LED7的亮灭情况,同时相应的b值会取反。四、程序具体实现实验要求开机复位后,LED0到LED7全部点亮2S后熄灭。在主函数中使用LEDPort=0x00;这条语句实现所有灯都亮,使用中断方式实现定时器定时2S,因为实验要求20ms溢出,所以设定num=100,在定时器中断服务程序中使用if语句判断条件,当num加到100,也就是说2S时间到时,执行flag=1;语句(先设定全局变量flag=0)。然后在主函数中使用while语句规定只有在flag=0时才执行所有LEDPort点亮的操作。2S时间到后,所有灯熄灭。然后进入while循环,等待用户按键。用户按键后,通过使用switch语句,实验按0键,num1=20,按1键,num1=50,。而在主函数中,当按下0键或者1键时,num1就有了固定的值,通过if语句判断是否到达所要求的时间后,执行相应操作。在本实验中,要求实现LED7的周期闪烁,我先设定一个标志位b=0;默认LED7灭,;然后在主函数中在定时时间到达后,通过判断和改变b的值来实现LED7的亮灭情况。然后使num=0;使定时器继续从新定时,不停循环实现LED7的周期闪烁。程序附录:#include#include#include7279.h#define uchar unsigned char#define uint unsigned intsbit ad_busy = P32; sbit key=P33;uchar num;uchar num1;bit b;uchar flag=0;uchar keynumber;#define LEDPort XBYTE0x9000 /端口地址void Init(void) IE|=0x04; TCON=0x01;void Time0_Init(void) TMOD|=0x01; TH0=0xB8; TL0=0x00; ET0=1; TR0=1;void Time0(void) interrupt 1 TH0=0xB8; TL0=0x00; num+; if(num=100) flag=1; void ISR_INT1(void) interrupt 2 keynumber=Read7279();while(!key); switch(keynumber) case 0:num1=20;break; case 1:num1=50;break; default:break; void main(void) b=0; Init(); Time0_Init(); EA=1; while(!flag) LEDPort=0x00; LEDPort=0xff; num=0; while(1) if(num=num1) if(b) LEDPort=0x7f;b=0; else LEDPort=0xff;b=1; num=0; LED和按键控制实验 在我刚买ARM开发板时,曾经一共做过4次实验,写过4个程序(距今似乎快要一年了),具体为: 1、LED控制实验:使开发板上的LED3和LED4交替着亮灭 2、按键控制实验:用按键控制开发板上LED的亮灭 3、串口UART通信实验:用ARM的串口与PC机进行通信,包括发送和接收 4、LCD显示实验:在240320的LCD上显示R,G,B三段color,以及在LCD上显示BMP格式的图片,后来又加了一段程序,使ARM能用UART0接收来自PC机的BMP图片,并在LCD上显示之。 以上这些程序都是用ADS1.2编译链接的,其实说穿了就是把ARM当成单片机在用! 现在公布其中一个实验:按键控制实验。 对于LED实验,就不再单独叙述了,因为实在太简单了,而且现在这个程序已经完全包含了LED实验所涉及到的一切东东! 实验说明:用按键S4控制LED3和LED4的亮灭:按下S4不动时,LED3和LED4同时闪烁点亮,放开S4后,LED3和LED4同时熄灭。 实验目的:熟悉ARM程序开发的一般流程,掌握编译器和链接器的选项设置,以及观察在编译链接后,程序中各种符号,子程序和段所在的ARM内存空间中的地址,最终使程序能够从起始的汇编代码跳到C程序的main()函数中去运行。 开发工具:ADS1.2 源代码:分两个文件,init.s和Main.c,具体在文后列出。 选项设置:在ARM Assembler和ARM C Complier中的Architecture or Processor选择ARM920T;在ARM Linker的Output选项卡,RO base设置成0x31000000,RW base可以为空(这个选项在仿真调试阶段可以空着,但若要烧入FLASH中运行,则必须设置);另外为了观察程序中各种符号,子程序和段所链接的地址,又在ARM Linker的Listings选项卡中,勾上了Image Map和Symbols 出现的问题和解决办法: 1、刚开始编译不通过,后来发现在汇编语句中,delay标号没有顶格书写。 2、程序下载进RAM后大多数情况下无法正常运行(偶尔也能成功),总是跳进SWI异常处理中去,而且在Debug Log窗口中提示“Cant set more breakpoint”,刚开始以为真的是断点设多了,虽然我自己并没有设置断点,但以为是AXD自动设置的,于是在AXD的Configure Processor选项卡中,去掉了所有的勾勾,可问题依然存在;后来又以为是没有定义ARM中断跳转和其他模式下的堆栈的缘故,但加进了相关语句后还是没有解决问题!为了这个问题我抓掉了好几根头发,终于在崩溃之前找到了原因所在,原来是在开发板上把ARM设置成了从NAND FLASH启动!其实这本来也没什么错,但问题是我的开发板上已经预装了Win CE系统,于是乎,冲突就这样发生了!解决办法有两个,一是擦除Win CE系统,二是拨动板子上的一个开关,使ARM从NOR FLASH启动。我当然选择后者。 实验总结:为了上面所说的第二个问题,花了我不少时间,但也正是因为这个问题的出现,使得我对ADS的很多“冷门”的选项设置,也彻底研究了一遍,另外还迫使我去看了ADS1.2自带的文档Build ToolsWarning and Errors,为以后快速地定位和解决程序中的错误打下了基础。 程序代码如下: init.s:AREA Init,CODE,READONLY ;该伪指令定义了一个代码段,段名为Init,属性只读ENTRY ;程序的入口点标识EXPORT _ENTRY_ENTRYResetEntry mov sp,#0x0c700000 ;定义堆栈指针 IMPORT Main ;声明主函数MainBL Main ;调用主函数;下面是延迟子程序EXPORT delaydelaysub r0,r0,#1 ;r0=r0-1 cmp r0,#0x0 ;将r0的值与0相比较bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句mov pc,lr ;返回 END ;程序结束符 * Main.c:/*C语言函数*/*PORT B寄存器预定义*/#define rGPBCON (*(volatile unsigned *)0x56000010)#define rGPBDAT (*(volatile unsigned *)0x56000014)#define rGPBUP (*(volatile unsigned *)0x56000018) /*PORT F寄存器预定义*/#define rGPFCON (*(volatile unsigned *)0x56000050)#define rGPFDAT (*(volatile unsigned *)0x56000054)#define rGPFUP (*(volatile unsigned *)0x56000058)extern int delay(int time); /*声明汇编函数*/void Main()rGPFCON=0x0; /*设置I/O口的GPF1为输入*/rGPFUP=0xffff; /*禁止GPF端口的上拉*/rGPBCON=0x0005; /*设置I/O口GPB0,GPB1为输出属性*/rGPBUP=0xffff;/*禁止GPB端口的上拉*/while(1) /*不断的循环*/ if(rGPFDAT&0x000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位医疗卫生岗2026面试易错题题库试卷及参考答案
- 2027年备考会计基础 【零基础学员必练】自测提分题库加答案
- 2027年备考会计基础 【零基础学员必练】题库附答案(基础题)
- 2026事业单位计算机岗面试高频考题及参考答案
- 2026年湖南铁道职业技术学院高职单招笔试物理历年参考题库含答案解析
- 2026年湖南环境生物职业技术学院高职单招笔试数学历年参考题库含答案解析
- 2026年湖北工程职业学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年淮安信息职业技术学院高职单招笔试物理历年参考题库含答案解析
- 2026年浙江警官职业学院高职单招笔试英语历年参考题库含答案解析
- 2026年浙江工商职业技术学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026广东河源市龙川县恩波药械有限公司招聘8人考试备考试题及答案解析
- 2026年党支部书记党务工作培训练习题及答案
- 2026年中石化笔试题库(含答案)
- 高中美术必修《中国书法和中国画的密切关系》教学设计
- 2026秋沪科版(五四学制)八年级物理上册全册每课知识点清单
- 2026中银数字服务(南宁)有限公司招聘笔试模拟试题及答案详解
- RoHS 3.0 指令 2024-1020-EU 中文版(完整译文 + 新旧对比 + 2027 年实施时间表)
- 交管12123学法减分题库500题(含标准答案+解析2026全国)
- 高中入团积极分子考试题库
- 思想政治教育方法论考题
- 免疫规划知识普及课件
评论
0/150
提交评论