帮我用c语言写一个51单片机程序,要求如下,51单片机d1到d8灯依次亮,外部中断0来中断d1-d4和d5-d8交替闪烁四次,返回主程序
时间: 2024-03-12 22:50:10 浏览: 62
好的,以下是使用C语言编写的51单片机程序,满足您的要求:
```c
#include<reg51.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
void delay(unsigned int t) // 延时函数
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void main()
{
unsigned char i;
EA = 1; // 开启总中断
EX0 = 1; // 开启外部中断0
IT0 = 1; // 边沿触发方式
while(1)
{
for(i=0;i<8;i++)
{
switch(i)
{
case 0: LED1 = 0; break;
case 1: LED2 = 0; break;
case 2: LED3 = 0; break;
case 3: LED4 = 0; break;
case 4: LED5 = 0; break;
case 5: LED6 = 0; break;
case 6: LED7 = 0; break;
case 7: LED8 = 0; break;
}
delay(500); // 灯亮时间
switch(i)
{
case 0: LED1 = 1; break;
case 1: LED2 = 1; break;
case 2: LED3 = 1; break;
case 3: LED4 = 1; break;
case 4: LED5 = 1; break;
case 5: LED6 = 1; break;
case 6: LED7 = 1; break;
case 7: LED8 = 1; break;
}
delay(500); // 灯灭时间
}
}
}
void Interrupt0() interrupt 0 // 外部中断0的中断服务函数
{
unsigned char i,j;
for(j=0;j<4;j++) // 闪烁四次
{
for(i=0;i<4;i++)
{
switch(i)
{
case 0: LED1 = ~LED1; LED2 = ~LED2; LED3 = ~LED3; LED4 = ~LED4; break;
case 1: LED5 = ~LED5; LED6 = ~LED6; LED7 = ~LED7; LED8 = ~LED8; break;
case 2: LED1 = ~LED1; LED2 = ~LED2; LED3 = ~LED3; LED4 = ~LED4; break;
case 3: LED5 = ~LED5; LED6 = ~LED6; LED7 = ~LED7; LED8 = ~LED8; break;
}
delay(500); // 闪烁时间
}
}
}
```
程序实现的功能为:51单片机的d1到d8灯依次亮,外部中断0来中断d1-d4和d5-d8交替闪烁四次,然后返回主程序。
程序中使用了一个延时函数 delay(),可以通过调整延时时间来控制灯的亮灭时间和闪烁时间。在主程序中,使用 switch...case 语句来控制灯的亮灭顺序。在中断服务函数 Interrupt0() 中,同样使用 switch...case 语句来控制闪烁顺序。
程序中还需要配置外部中断0的触发方式为边沿触发,并开启总中断和外部中断0中断。
希望这个程序能够帮助到您!
阅读全文