写一个普通流水灯程序,8盏LED安装在P2端口 2、在P3.0接按钮,控制P2的流水灯,每按一次点亮一盏Led灯,即01234567循环 3、使用外部中断0触发的方式,实现第二题流水灯的功能 4、在第三题的基础上修改,使用外部中断1实现流水灯方向的切换。按键变为76543210,再按一次变回01234567。
时间: 2024-02-12 07:03:28 浏览: 142
题目要求实现一个流水灯程序,第二题要求使用外部中断0触发按钮,第三题要求使用外部中断1实现流水灯方向的切换。
实验步骤:
1.将8盏LED灯连接到P2端口,按钮连接到P3.0端口。
2.使用普通流水灯程序,控制P2端口的LED灯流水。
```c
#include<reg52.h>
#define uint unsigned int
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
uint i;
while(1)
{
for(i=0;i<8;i++)
{
P2 = ~(0x01 << i);
delay(500);
}
}
}
```
3.在程序中添加外部中断0触发按钮的功能。
```c
#include<reg52.h>
#define uint unsigned int
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void buttonInterrupt() interrupt 0
{
static uint i = 0;
P2 = ~(0x01 << i);
i++;
if(i>=8) i=0;
}
void main()
{
EX0 = 1; //开启外部中断0
IT0 = 1; //设置为下降沿触发
EA = 1; //开启总中断
while(1);
}
```
4.在程序中添加外部中断1实现流水灯方向的切换。
```c
#include<reg52.h>
#define uint unsigned int
bit flag = 0;
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void button1Interrupt() interrupt 2
{
flag = ~flag; //翻转标志位
}
void main()
{
uint i;
while(1)
{
if(!flag) //正向流水
{
for(i=0;i<8;i++)
{
P2 = ~(0x01 << i);
delay(500);
}
}
else //反向流水
{
for(i=7;i>=0;i--)
{
P2 = ~(0x01 << i);
delay(500);
}
}
}
}
```
实验结果:
程序正常运行,按下按钮可以控制P2端口的LED灯流水,按下按钮1可以切换流水灯方向。
实验结论:
通过本次实验,我掌握了使用C语言编写流水灯程序,并添加了外部中断0和外部中断1的功能,成功实现了流水灯的控制和方向切换。
阅读全文