打印
[经验分享]

51单片机中断实验

[复制链接]
47|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
实验一
使用KETL5 建立工程文件,编写红绿灯控制程序,,在实验箱上搭建电路, 实现功能演示。具体功能为:开始两红灯亮,数码管从3秒递减,当显示0时,东西路口的绿灯亮时,南北路口的红灯亮,数码管开始从9秒递减,当显示0时,东西路口绿灯灭,南北路口红灯不变,数码管开始从3秒递减,每递减一次东西路口黄灯闪烁1次,当显示0时,然后东西路口红灯亮,南北路口红灯灭,绿灯亮,数码管开始从9秒递减,当显示0时,南北路口绿灯灭,东西路口红灯不变,数码管开始从3秒递减,每递减一次南北路口黄灯闪烁1次,当显示0时,然后东西路口的绿灯亮时, 南北路口的红灯亮, 数码管开始从9秒递减,然后重复上述操作。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint t)
{
uint i;
while(t--)for(i=0;i<80;i++);
}

void main()
{
uchar i;

while(1)
{
     for(i=4;i>0;i--)
  {

   P0=dis_code[i-1];
   P1=0x36;
   delay(1000);
  }

  for(i=10;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x2e;
   delay(1000);
  }
  for(i=4;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x1e;
  delay(500);
  P1=0x3e;
  delay(500);
  }
  for(i=10;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x35;
   delay(1000);

  }
  for(i=4;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x33;
   delay(500);
   P1=0x37;
   delay(500);
  }
for(i=10;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x2e;
   delay(1000);
  }
}
}

Proteus8仿真图如图所示:



实验二
加入外部中断0,修改程序实现,当有急救车到达时,按下应急按键,两个方向上的红灯同时亮,数码管开始从9秒递减,以便让急救车通过,当数码管显示0时,急教车通过后,交通灯和数码管恢复中断前的状态。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint t)
{
uint i;
while(t--)for(i=0;i<80;i++);
}

void int0() interrupt 0
{
uchar i;
for(i=10;i>0;i--)
{
  P0=dis_code[i-1];
  P1=0x36;
  delay(1000);
}
}

void main()
{
uchar i;
EA=1;//quanjv
EX0=1;//waibu
IT0=1;//bianyan
while(1)
{
     for(i=4;i>0;i--)
  {

   P0=dis_code[i-1];
   P1=0x36;
   delay(1000);
  }

  for(i=10;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x2e;
   delay(1000);
  }
  for(i=4;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x1e;
  delay(500);
  P1=0x3e;
  delay(500);
  }
  for(i=10;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x35;
   delay(1000);

  }
  for(i=4;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x33;
  delay(500);
   P1=0x37;
   delay(500);
  }
for(i=10;i>0;i--)
  {
   P0=dis_code[i-1];
   P1=0x2e;
   delay(1000);
  }
}
}

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/2301_77975422/article/details/143865443

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

4100

帖子

5

粉丝