采用外中断控制的LED彩灯设计
一、目标
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彩灯设计相关推荐
- 采用外中断控制的条形LED彩灯设计
一.目标 P0端口作为输出口,外接条形LED.编写程序,当按键K未按下时,LED进行循环左移显示. 如果第一次按下按键K后,LED进行循环右移显示. 如果第二次按下按键K后,LED进行拉幕式闭幕式花样 ...
- 单片机节日彩灯实训报告_基于单片机控制的节日彩灯设计.pdf
ELECTRONICS WORLD 技术 交流 ・ 基于单片机控制的节日彩灯设计 徐州生物工程职业技术学院 魏建玮 [摘要] 为了增添节日气氛,大部分城市都会有节日彩灯,而节日彩灯大部分是单一循环的, ...
- 彩灯控制单片c语言程序,基于51单片机的led彩灯设计。 9个灯(红绿蓝三色)。按键控制 c语言程序...
满意答案 yivdi2o28 2014.05.15 采纳率:46% 等级:11 已帮助:4795人 #include<reg52.h> #define uint unsigned i ...
- 10位LED彩灯设计(verilog实现)
本实验要实现的工程,旨在通过控制10位LED灯闪出不同的三种以上的花色.具体要求为:上电后,LED灯首先全灭,然后自动开始闪烁,完成设计的三种(或以上)花色后,又回到初始状态重新开始新一轮的闪烁.要求 ...
- 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED
STM32中对EXTI_PE5_Config()函数的理解(自定义)
- 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计
基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 这里写目录标题 1 开发环境 2 功能说明介绍 3 仿真图 4 ...
- verilog 8位流水灯_用单片机控制的LED流水灯设计
1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代.单片机具有体积小.功能强.成 ...
- 单片机彩灯c语言程序设计,(定稿)毕业论文基于AT89C51单片机的LED彩灯控制器设计(完整版)...
<[毕业论文]基于AT89C51单片机的LED彩灯控制器设计.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于AT89C51单片机的LED彩灯控制器设计(完整版) ...
- CC2530基础实验:(2)外部中断控制LED亮灭
目录 前言 一.实验相关电路图 二.实验相关理论与寄存器 1.中断相关的基础概念 2.CC2530 的中断系统 3.CC2530 的中断处理函数编写方法 4.CC2530 的外部中断 三.源码分析 前 ...
最新文章
- centos7.6基础
- Oracle database server 安装tips
- mysql sql优化_MySQL优化SQL语句的步骤
- 全国计算机民办二本学校排行,艺术类二本院校排名,2018最新民办和公办院校全国排名...
- PyTorch学习笔记(二):PyTorch简介与基础知识
- 局域网传输文件_WinXP系统电脑局域网传输文件的操作方法
- wx-jq:一套完全原创的微信小程序插件集合库
- 荷兰国旗问题+快速排序
- STM32F103如何使用串口下载程序
- 苹果id是什么格式的_长春苹果x主板维修推荐,苹果ipad12.9死机,商业资讯
- 流行前端几大UI框架排行榜
- 运营前线2:一线运营专家的运营方法、技巧与实践01 在腾讯两年,我学会了这15条内容运营干货...
- JDK1.8和JDK1.7的HashMap源码分析以及线程不安全问题
- autojs ui界面漂亮模板
- 浅谈用企业微信生态做私域流量运营的策略!
- 自定义域名:为自己的CSDN博客添加自定义域名吧!
- Python3时间戳转换为指定格式的日期
- 学生机房随堂测试软件,全智能考试系统——随堂评测考试系统
- Keil5: 如何创建一个工程模板
- [含文档+源码等]高校科研项目管理系统[包运行成功]
热门文章
- 博海拾贝--springcloud的组件及使用(4)Ribbon 负载均衡
- Element分析(工具篇)帮助我们定位元素 = Popper.js
- 关于用于棒球联赛成绩管理系统的技术
- python将双反斜杠“\\“替换成单反斜杠“\“
- 供应商管理软件有哪些特点和优势?
- ML(机器学习)神经网络,阶跃函数,sigmoid激活函数
- 是非人生 — 一个菜鸟程序员的5年职场路 第16节
- 初次玩耍lucene.net,一个小小的记录
- sas统计分析学习笔记(一)
- FPGA/IC领域术语表