采用外中断控制的LED彩灯设计

本文介绍了采用单片机控制LED彩灯的设计,通过外中断实现模式切换,包括循环左移、右移和拉幕式闭幕式显示。文中详细讲解了Proteus仿真、代码实现及中断函数中的防抖处理,提供了优化建议。
摘要由CSDN通过智能技术生成

一、目标

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(
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值