51单片机实验3-中断控制的LED灯(单一外部中断控制LED灯,两个外部中断控制LED灯,交通管制路口)

这篇具有很好参考价值的文章主要介绍了51单片机实验3-中断控制的LED灯(单一外部中断控制LED灯,两个外部中断控制LED灯,交通管制路口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实训目的:

1、编写程序通过单一外部中断控制LED灯,每按一次开关,中断服务程序中,低4位led和高4位led交替闪烁5次;

2、编写程序利用两个外部中断控制LED灯。上电后8个led以流水灯方式点亮间隔100ms,K1按下,流水灯反向显示1次间隔50ms;按下K2,8个led同时闪烁3次,间隔50ms。

实训步骤:

(一)单一外部中断控制LED灯

电路连接如下:

51单片机实验3-中断控制的LED灯(单一外部中断控制LED灯,两个外部中断控制LED灯,交通管制路口),51单片机实训,51单片机,单片机,嵌入式硬件

主要器件:AT89C51、RES、LED-GREEN、BUTTON

程序代码如下:

#include<reg51.h>
void delay(unsigned int x)   // 延时函数
{	
	unsigned int i,j;
	for(i=x;i>0;i--)
		for(j=333;j>0;j--);
}
void main()
{	
	EX0=1;     // 设置外部中断INT0允许
	EA=1;      // 开启总中断
	IT0=0;     // 设置INT0的触发方式为电平触发
	while(1)
	{
		P1=0;   // 将单片机P1口输出设为0,控制LED灯熄灭
	}
}
void int0() interrupt 0   // 中断服务程序,处理外部中断INT0
{	
	unsigned char m;       
	EX0=0;                  // 禁止INT0外部中断
	for(m=0;m<5;m++)        // 循环执行5次
	{	
		P1=0x0f;             // 将单片机P1口输出设置为0x0f,控制LED灯低四位点亮    0x0f =0000 1111
		delay(200);
		P1=0xf0;             // 将单片机P1口输出设置为0xf0,控制LED灯高四位点亮   0xf0=1111 0000
		delay(200);
	}
	EX0=1;               // 允许INT0外部中断
}
//1进入while循环中,将P1输出设置为0,此时LED灯处于关闭状态。
//2当外部中断INT0被触发,跳转到中断服务程序int0()中执行相应的操作。
//3在int0()服务程序中禁止INT0外部中断,并循环5次进行指定的操作。
//4操作每次点亮单片机P1口输出低四位或高四位,形成LED灯的闪烁效果。
//5在每次操作后使用延时函数delay延时一段时间。
//6循环结束后允许INT0外部中断,并返回到while循环中。
//不断重复2-6步骤,实现LED灯的闪烁效果。

(二)两个外部中断控制LED灯

电路连接如下:

51单片机实验3-中断控制的LED灯(单一外部中断控制LED灯,两个外部中断控制LED灯,交通管制路口),51单片机实训,51单片机,单片机,嵌入式硬件

 程序代码如下:

#include<reg51.h>
#include<intrins.h>
sbit K1=P3^2;       // 定义P3口第2个引脚为按键K1所对应的IO口
sbit K2=P3^3;       // 定义P3口第3个引脚为按键K2所对应的IO口
void delay(unsigned int m)  // 延时函数
{	unsigned int i;
	while(m--)
	{	for(i=0;i<333;i++);
	}
}
void main()
{	EX0=1;      // 打开外部中断0(INT0)
	IT0=1;      // 设置INT0为下降沿触发方式
	PX0=1;      // 设置INT0为优先级低的中断
	EX1=1;      // 打开外部中断1(INT1)
	IT1=0;       //设置INT1为低电平触发
	EA=1;        //  打开总中断允许 
	P1=0xfe;     //初始设置P1口LED灯亮,除最后一位外都亮  0xfe为11111110
	while(1)
	{	delay(100);      //延时100ms
		P1=_crol_(P1,1);   //将P1口LED灯向左移动一位(循环移位)
	}
}
void int0() interrupt 0  // 定义INT0中断服务函数     流水灯反向显示一次
{	unsigned char i,j;
	j=P1;                    // 保存当前P1口LED灯状态
	delay(10);               // 等待一段时间,避免按键抖动,消抖
	P1=0x7f;                 // P1口前七个灯亮     0x7f=0111 1111
	for(i=0;i<8;i++)
	{	delay(50);
		P1=_cror_(P1,1);       // 将P1口LED灯向左移动一位(循环移位)
	}
	P1=j;                    //把原来保存的p1值再传给p1
}
void int1() interrupt 2    // 定义INT1中断服务函数       8个led同时闪烁
{	unsigned char i,j;
	j=P1;                    //保存当前P1口LED灯状态
	for(i=0;i<3;i++)
	{	P1=0x00;               // 将P1口所有LED灯都熄灭
		delay(50);
		P1=0xff;               // 将P1口所有LED灯都点亮
		delay(50);
	}
	while(!K2)               // 等待按键K2释放
	P1=j;                    // 恢复P1口LED灯状态
}

(三)交通管制路口

有个十字路口,设有一组红绿灯,无人操作时自动通过红黄绿灯控制交通;设置按钮K0和K1,其中K1用于交通管制状态,按下后红绿灯不再轮换点亮,可以固定在南北方向或东西方向通行;K0按钮用于恢复正常交通状态。

电路连接如下:

51单片机实验3-中断控制的LED灯(单一外部中断控制LED灯,两个外部中断控制LED灯,交通管制路口),51单片机实训,51单片机,单片机,嵌入式硬件

 代码如下:文章来源地址https://www.toymoban.com/news/detail-718349.html

#include<reg51.h>
#include<intrins.h>
sbit K0=P3^2;
sbit K1=P3^3;
void delay(unsigned int m)
{	unsigned int i;
	while(m--)
	{	for(i=0;i<333;i++);
	}
}

void main()
{	
	EX0=1;
	IT0=1;
	PX0=1;
	EX1=1;
	IT1=1;
	EA=1;
	while(1)
	{	P1=0x7e;
		delay(40);
		P1=0xbe;
		delay(20);
		P1=0xdb;
		delay(40);
		P1=0xdd;
		delay(20);
	}
}
void ji_xu() interrupt 0
{	
	delay(1);
	}
void guan_zhi() interrupt 2
{	
	while(1);
	}

到了这里,关于51单片机实验3-中断控制的LED灯(单一外部中断控制LED灯,两个外部中断控制LED灯,交通管制路口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机 | 定时器中断实验

      这一节介绍51单片机的定时器中断。 STC89C5X 含有 3 个定时器:定时器 0、定时器 1、定时器 2(注意: 51 系列单片机一定有基本的 2 个定时器(定时器 0 和定时器 1),但不全有 3 个中断,需要查看芯片手册,通常我们使用的是基本的 2 个定时器:定时器 0/1)。本节要实现

    2024年02月06日
    浏览(88)
  • 51单片机-按键控制led灯

    1.开发环境介绍 使用C语言,环境为keil Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用. 什么是单片机 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具

    2024年02月09日
    浏览(30)
  • 51单片机按键控制LED亮灭

    通过单片机按键控制LED亮灭与传统电路的物理逻辑不同,在物理逻辑中开关控制电路的通断来控制LED的亮灭,而通过单片机完成该项目至于要不断地读取按键所连接IO口的电平来判断对LED连接的IO口输出的电平即可。 原理图如下:  根据原理图,我们可以发现按键按下时P2.1口

    2023年04月18日
    浏览(38)
  • 51单片机——中断系统之外部中断实验,小白讲解,相互学习

     中断介绍         中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。它也是单片机最重要的功能之一,是我们学些单片机必须要掌握的。         为了更容易的理解中断概

    2024年02月07日
    浏览(35)
  • 51单片机:独立按键控制LED灯

    1. 独立按键控制LED灯状态          亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开。所以就得需要程序消抖,也就是适当延时,程序如下 #include\\\"reg52.h\\\" //定义LED灯 sbit

    2023年04月09日
    浏览(29)
  • 51单片机(三)独立按键控制LED

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月08日
    浏览(27)
  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

    首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同 我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯   那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上, 那么只需要操作这几个接口的高低电频,

    2024年02月05日
    浏览(32)
  • 电脑通过串口控制51单片机的LED

    在电脑端的串口助手通过串口对51单片机发送一个字节的16进制数控制LED的亮灭 单片机通过串口将接收到的数据发送回电脑 51 单片机内部自带 UART ( Universal Asynchronous Receiver Transmitter ,通用异步收发器),可实现单片机的串口通信 STC89C52有 1 个 UART,有四种通信模式: 模式

    2024年02月09日
    浏览(32)
  • 51单片机——定时器中断实验,小白讲解,相互学习

    定时器介绍 1,CPU时序的有关知识 震荡周期:为单片机提供定时信号的震荡源的周期(晶振周期或外加震荡周期)。 状态周期:2个震荡周期为1个状态周期,用S表示。震荡周期又称S周期或时钟周期。 机器周期:1个机器周期含6个状态周期,12个震荡周期 指令周期:完成1条指

    2024年02月03日
    浏览(31)
  • 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计

    基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号:A0005 结合实际情况,基于51单片机设计一个LED彩灯控制器设计。该系统应满足的功能要

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包