LPC2000系列——LPC2124(定时器、外部中断)实现流水灯(跑马灯)

LPC2000系列——LPC2124(定时器、外部中断)实现流水灯(跑马灯)


江南大学18级物联网嵌入式课设,本次课设参考了 这篇博文(也是江大的一个学长写的),我在这个基础上进行了完善和改进,修复了一些bug。

【注】,不要完全照搬了事,大家都是成熟的人了,抄100次,东西都不是你的,但是你认认真真做一次,就算是完全复现,你也可以收获颇丰!我写了非常详尽、整齐的注释,希望学弟学妹们参考时,可以认真学习一下,本人才疏学浅,希望能对你们的学习起到一点点帮助!

以下是本次课设布置的任务:

A选项

流水灯的设计:
基础部分:
(1)利用GPIO的四个引脚控制四个发光二极管,第一个灯亮过2秒之后,延时2秒,第二个亮,以此类推,当第四个亮过之后就让四个二极管全亮,保持2秒,然后不断循环。
(2)利用Keil uVision4软件作为交叉编译环境。
(3)利用Proteus 8 Professional 软件作为程序的仿真测试。

提高部分:
(1)利用GPIO口的一个管脚作为一个按键信号输入,其作用是启动流水灯的开始和停止。(第一次按启动,第二次停止,第三次启动,以此类推)
(2)利用GPIO口的一个管脚作为一个按键信号输入,其作用是设置灯亮的时间,分三档1秒,2秒,3秒(第一次按1,第二次2秒,第三次3秒,第四次1秒,以此类推)
(3)基于uc/os-II操作系统,完成以上程序设计。

整个任务分为四个工作阶段(基本控制在10个工作日)最终可以落实到最后考试周前后:
1.安装开发环境,熟悉开发环境的基本操作。(2个工作日----开发环境的功能掌握)
2.查阅相关资料,编制程序代码。(4个工作日----程序的流程图)
3.调试相关程序,在调试过程中,修改相关程序。(2个工作日----调试过程中的问题)
4.对整个设计过程分析总结,提交设计报告。(2个工作日-----总的设计报告)

报告格式:学号 姓名 班级
总的设计报告要求:
题目(加粗四号居中宋体)
班级 姓名 学号(加粗四号居中宋体)
1、流水灯的设计原理。(小四宋体)
2、程序流程图及代码分析。(小四宋体)
3、设计结果分析及改进之处。(小四宋体)
4、设计体会。(小四宋体)

报告+源程序+仿真源文件+拍摄视频(本人简单讲解演示)+作业内容简介——请在个人文件夹中建立TXT简单说明(STM32/lpc2000+有/无UCOS系统+定时器/延时+中断按键/普通按键)

另外还需要考虑一个是否与状态保存功能。

开发环境

操作系统:Windows10

开发软件:Keil uVision5

仿真软件:Proteus 8 Professional

开发板选择:LPC2124(使用Proteus 8 Professional仿真)

配置环境

都多大的人儿了,不会还想着学长教你们配环境吧???软件全部自己安装嗷!

如果使用的是keil4,使用流程请参考更老学长的这篇博文

如果使用的是keil5,使用流程基本与keil4一致,不过keil5要自行安装软件包,安装好keil5以后,可以参考这篇博文即可。

proteus就不必我多说了吧,选单片机这门课必须用,而且硬件课设大概率也要用这个软件。自己搞嗷铁汁们~ O(∩_∩)O ~

引脚连接及结果展示

在这里插入图片描述

源码

//江南大学物联网18级——MHH版权所有!
#include <LPC21xx.H>
#define LED1 0x00000001					//LED1 = P0.0端口  0x1 = 0001B
#define LED2 0x00000002					//LED1 = P0.0端口  0x1 = 0001B
#define LED3 0x00000004					//LED3 = P0.2端口  0x4 = 0100B
#define LED4 0x00000008					//LED4 = P0.3端口  0x8 = 1000B

#define LED5 0X000010                   //测试定时器0,LED5 = P0.4端口  0x10 = 10000B
#define LEDT1 0x000020                  //测试按键1(暂停按键),LEDT1 = P0.5端口  0x20 = 100000B

#define BIT0 0x00000100					//数码管用,P0.8  bit1
#define BIT1 0x00000200					//数码管用,P0.9  bit0

#define BUT1 0x00004000                 //BUT1 = P0.14端口 0x40000 = 0100 0000 0000 0000B
#define BUT2 0x00008000                 //BUT1 = P0.15端口 0x80000 = 1000 0000 0000 0000B
typedef unsigned int uint32;

uint32 timer0Times = 0;                 //用来记录 发生定时器0中断的次数,设置定时器0频率后,也就是时间。
uint32 index = 0;						//用来记录“LED循环”中,匹配相应状态的次数。
uint32 timesBUT1 = 0;                   //用来记录,BUT1点击次数
uint32 timesBUT2 = 0;                   //用来记录,BUT2点击的次数
uint32 delaytime = 2;                   //设置延迟时间

uint32 status_now[9] = {
   LED1, 0xF, LED2, 0xF, LED3, 0xF, LED4, 0xF, 0xF};	//存储流水灯状态,偶数亮灯,奇数全灭

//定时器中断处理函数
__irq void timer0_ISR (void)
{
   
	IO0CLR = LED5;
	timer0Times++;
	for (<
  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值