一、目标

P0端口作为输出口,外接LED。编写程序,当按键K未按下时,LED进行循环左移显示。
如果第一次按下按键K后,LED进行循环右移显示。
如果第二次按下按键K后,LED进行拉幕式闭幕式花样显示。
如果第三次按下按键K后,又恢复左移显示。

二、Proteus

三、代码实现

1、分析一下我们要完成的目标。
默认左流水,第一次按右流水,第二次按拉闭幕式,再按恢复默认。也就是说可以用一个counter记录按下次数,初始化counter=0,然后每次按下K就令counter++,然后进行counter=counter%3取余数。则:
余数为0时应该对应默认的左流水;
余数为1时对应右流水;
余数为2时对应拉闭幕式。

#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char//宏定义
#define uint  unsigned int //宏定义sbit K=P3^2;
uint counter=0;//用于记录按下按键的次数

2、然后逐个实现不同规律的流水灯
在实现流水灯的同时,通过counter来判断在亮灯过程中按键是否再次被按下,如果有被按下则返回(直接跳出当前执行的流水函数),重新判断要被执行的流水灯顺序。

void right_display()//右流水
{uint p0=0xfe;uint i=0;for(i=0;i<8;i++){if(counter!=1){return;}P0=p0;Delay(150);p0=_crol_(p0,1);}
}void left_display()//左流水
{uint p0=0x7f;uint i=0;for(i=0;i<8;i++){if(counter!=0){return;}P0=p0;Delay(150);p0=_cror_(p0,1);}
}void opnd_display()//拉闭幕式
{if(counter!=2){return;}P0=0xE7;Delay(150);if(counter!=2){return;}P0=0xDB;Delay(150);if(counter!=2){return;}P0=0xBD;Delay(150);if(counter!=2){return;}P0=0x7E;Delay(150);if(counter!=2){return;}P0=0xBD;Delay(150);if(counter!=2){return;}P0=0xDB;Delay(150);if(counter!=2){return;}P0=0xE7;Delay(150);if(counter!=2){return;}P0=0xFF;Delay(150);
}

如果这几个函数中没有“if(counter!=?){return;}”这条语句,那么按下按键后,直到跑完整个函数的程序后才会再次判断按键被按下次数,再做出相应的变化。这种结果是我们不愿意看到的。
3、花样流水LED
根据1中的思路,对三种顺序的流水灯的出场条件做出安排。

void Multi_Display()
{switch(counter){case 1:{right_display();//右流水break;}case 2:{opnd_display();//拉闭幕式break;}case 0:{left_display();/左流水break;}default:;}
}

4、main()函数
打开中断允许外部中断0。在下习惯上让主函数保持尽量的简洁,所以将细节全写在相关函数里了。

int main()
{EX0=1;EA=1;while(1){Multi_Display();}return 0;
}

5、中断函数
一定一定要防抖!!!!我就在这儿摔倒了。就是因为没有防抖,导致再按下一次按键同时可能产生多个中断信号,最后导致按下按键后的三种流水灯效果随机出现,非常混乱!

void INT0_K() interrupt 0
{Delay(10);if(K==0)//这个地方一定要防抖!!!{counter++;counter=counter%3;}
}

四、 结语

好啦!以上就是这次的全部内容啦!老规矩延时函数自己写哈哈哈哈哈

有一点在下不是很满意地方就是opnd_display()函数写的不够简练,这里其实是可以用循环语句来编写的,大家可以改进一下。

祝大家学习愉快咯!(^_^)y!

采用外中断控制的LED彩灯设计相关推荐

  1. 采用外中断控制的条形LED彩灯设计

    一.目标 P0端口作为输出口,外接条形LED.编写程序,当按键K未按下时,LED进行循环左移显示. 如果第一次按下按键K后,LED进行循环右移显示. 如果第二次按下按键K后,LED进行拉幕式闭幕式花样 ...

  2. 单片机节日彩灯实训报告_基于单片机控制的节日彩灯设计.pdf

    ELECTRONICS WORLD 技术 交流 ・ 基于单片机控制的节日彩灯设计 徐州生物工程职业技术学院 魏建玮 [摘要] 为了增添节日气氛,大部分城市都会有节日彩灯,而节日彩灯大部分是单一循环的, ...

  3. 彩灯控制单片c语言程序,基于51单片机的led彩灯设计。 9个灯(红绿蓝三色)。按键控制 c语言程序...

    满意答案 yivdi2o28 2014.05.15 采纳率:46%    等级:11 已帮助:4795人 #include<reg52.h> #define uint unsigned i ...

  4. 10位LED彩灯设计(verilog实现)

    本实验要实现的工程,旨在通过控制10位LED灯闪出不同的三种以上的花色.具体要求为:上电后,LED灯首先全灭,然后自动开始闪烁,完成设计的三种(或以上)花色后,又回到初始状态重新开始新一轮的闪烁.要求 ...

  5. 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED

    STM32中对EXTI_PE5_Config()函数的理解(自定义)

  6. 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计

    基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 这里写目录标题 1 开发环境 2 功能说明介绍 3 仿真图 4 ...

  7. verilog 8位流水灯_用单片机控制的LED流水灯设计

    1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代.单片机具有体积小.功能强.成 ...

  8. 单片机彩灯c语言程序设计,(定稿)毕业论文基于AT89C51单片机的LED彩灯控制器设计(完整版)...

    <[毕业论文]基于AT89C51单片机的LED彩灯控制器设计.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于AT89C51单片机的LED彩灯控制器设计(完整版) ...

  9. CC2530基础实验:(2)外部中断控制LED亮灭

    目录 前言 一.实验相关电路图 二.实验相关理论与寄存器 1.中断相关的基础概念 2.CC2530 的中断系统 3.CC2530 的中断处理函数编写方法 4.CC2530 的外部中断 三.源码分析 前 ...

最新文章

  1. centos7.6基础
  2. Oracle database server 安装tips
  3. mysql sql优化_MySQL优化SQL语句的步骤
  4. 全国计算机民办二本学校排行,艺术类二本院校排名,2018最新民办和公办院校全国排名...
  5. PyTorch学习笔记(二):PyTorch简介与基础知识
  6. 局域网传输文件_WinXP系统电脑局域网传输文件的操作方法
  7. wx-jq:一套完全原创的微信小程序插件集合库
  8. 荷兰国旗问题+快速排序
  9. STM32F103如何使用串口下载程序
  10. 苹果id是什么格式的_长春苹果x主板维修推荐,苹果ipad12.9死机,商业资讯
  11. 流行前端几大UI框架排行榜
  12. 运营前线2:一线运营专家的运营方法、技巧与实践01 在腾讯两年,我学会了这15条内容运营干货...
  13. JDK1.8和JDK1.7的HashMap源码分析以及线程不安全问题
  14. autojs ui界面漂亮模板
  15. 浅谈用企业微信生态做私域流量运营的策略!
  16. 自定义域名:为自己的CSDN博客添加自定义域名吧!
  17. Python3时间戳转换为指定格式的日期
  18. 学生机房随堂测试软件,全智能考试系统——随堂评测考试系统
  19. Keil5: 如何创建一个工程模板
  20. [含文档+源码等]高校科研项目管理系统[包运行成功]

热门文章

  1. 博海拾贝--springcloud的组件及使用(4)Ribbon 负载均衡
  2. Element分析(工具篇)帮助我们定位元素 = Popper.js
  3. 关于用于棒球联赛成绩管理系统的技术
  4. python将双反斜杠“\\“替换成单反斜杠“\“
  5. 供应商管理软件有哪些特点和优势?
  6. ML(机器学习)神经网络,阶跃函数,sigmoid激活函数
  7. 是非人生 — 一个菜鸟程序员的5年职场路 第16节
  8. 初次玩耍lucene.net,一个小小的记录
  9. sas统计分析学习笔记(一)
  10. FPGA/IC领域术语表