代码改错#include <REGX52.H> #include <intrins.h> sbit K1=P3^2; sbit K2=P3^3; void delay(unsigned int xms) { while(xms--); } void LED_flash() { int i; for(i = 0; i<10; i++) { P2= 0x00; delay(500); P2= 0xff; delay(5000); } } void LED_flow() { int i; for(i=0; i<8; i++) { P2=~(0x01<<i); delay(5000); } } void k1init() { IT0 = 1; EX0 = 1; EA = 1; } void k2init() { IT1 = 1; EX1 = 1; EA = 1; PX1 = 1; } void main() { P2=0xff; while(1) { } } void int0() interrupt 0 { LED_flash(); } void int1() interrupt 2 { LED_flow(); }
时间: 2023-12-03 15:03:35 浏览: 227
单片机reg52.h
4星 · 用户满意度95%
这段代码本身没有明显的错误,但如果想要实现按下K1和K2时LED灯的不同闪烁方式,需要在main函数中调用k1init和k2init函数,来初始化中断INT0和INT1。同时,需要在int0和int1函数中添加清除中断标志位的语句,否则可能会出现无法触发下一次中断的问题。修改后的代码如下:
```
#include <REGX52.H>
#include <intrins.h>
sbit K1=P3^2;
sbit K2=P3^3;
void delay(unsigned int xms)
{
while(xms--);
}
void LED_flash()
{
int i;
for(i = 0; i<10; i++)
{
P2= 0x00;
delay(500);
P2= 0xff;
delay(5000);
}
}
void LED_flow()
{
int i;
for(i=0; i<8; i++)
{
P2=~(0x01<<i);
delay(5000);
}
}
void k1init()
{
IT0 = 1;
EX0 = 1;
EA = 1;
}
void k2init()
{
IT1 = 1;
EX1 = 1;
EA = 1;
PX1 = 1;
}
void main()
{
P2=0xff;
k1init(); // 初始化INT0中断
k2init(); // 初始化INT1中断
while(1)
{
// 主函数中不需要添加代码,等待中断触发即可
}
}
void int0() interrupt 0
{
LED_flash();
EX0 = 0; // 清除INT0中断标志位
}
void int1() interrupt 2
{
LED_flow();
EX1 = 0; // 清除INT1中断标志位
}
```
阅读全文