#include<reg51.h> #include<intrins.h> unsigned char temp; void exint0() interrupt 0 { temp=P2; P2=P2==0x01?0x03:P2<<1; } void exint1() interrupt 2 { temp=P2; P2=P2==0x80?0xC0:P2>>1; } void delay() { unsigned int time=30000; while(time--); } unsigned n; void blink1(n) { while(n--) {P2=0xf0; delay(); P2=0x00; delay();} P2=0x18; temp=P2; } void blink2(n) { while(n--) {P2=0x0f; delay(); P2=0x00; delay();} P2=0x18; temp=P2; } void main() { P2=0x18; temp=P2; IT0=1; IT1=1; IP=0x01; IE=0x85; while(1) { if(P2==0x00) { switch(temp) { case 0x80:{EA=0;blink1(5);EA=1;} break; case 0x01:{EA=0;blink2(5);EA=1;} break; } } } }
时间: 2023-10-16 09:09:55 浏览: 87
LED-shanshuo.rar_LED 闪烁_delay
这是一段基于 8051 单片机的程序,实现了通过外部中断改变 P2 口的输出状态。具体来说,当外部中断0(INT0)触发时,将 P2 口的值左移一位,如果已经移位到最高位则将其置为 0x03;当外部中断1(INT1)触发时,将 P2 口的值右移一位,如果已经移位到最低位则将其置为 0xC0。在主程序中,不断检测 P2 口的值,如果为 0x00 则根据之前保存的 temp 变量的值进行不同的闪烁操作。其中 blink1 函数实现了 P2 口高 4 位的闪烁,blink2 函数实现了 P2 口低 4 位的闪烁。闪烁的次数由参数 n 指定。
阅读全文