#include <reg51.h>
#include<intrins.h>
void delay_ms(unsigned int x) //误差 0us
{
unsigned char a,b,c;
for(c=x;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main(void)
{
ET0=1;//外部中断0、1下降沿中断
ET1=1;
EX0=1;
EX1=1;
EA=1;
while(1)
P0=0x00; // P1的8个LED,高电平亮
}
void int0_int() interrupt 0
{
unsigned char i ,j, tmp=0x01;
for(i=3; i>0; i--)
for(j=8; j>0; j--)
{
P0=tmp;
delay_ms(500); //500ms闪烁
tmp = _crol_(tmp,1);
}
}
void int1_int() interrupt 2
{
unsigned char i ,j, tmp=0x80;
for(i=3; i>0; i--)
for(j=8; j>0; j--)
{
P0=tmp;
delay_ms(500); //500ms闪烁
tmp = _cror_(tmp,1);
}
}
请大家帮忙指导,我想点击中断0时,流水灯不断的工作,如果点击中断2,流水能马上转换,也要不断的工作。如果用一个中断控制多个流水灯状态,需要怎么修改程序,谢谢大家指点。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- #include <reg51.h>
- unsigned char temp;
- unsigned char Tmod=0,i = 0;
- void delay_1ms(void)
- {
- unsigned int i;
- for (i=1;i<(unsigned int)(1144-2);i++);
- }
- void delay_ms(unsigned int n)
- {
- unsigned int i=0;
- while(i<n)
- {
- delay_1ms();
- i++;
- }
- }
- void martix(unsigned int n)
- {
- switch(n)
- {
- case 0:
- temp= 0x80;
- for(i = 0; i < 8; i++)
- {
- P0=~temp;
- delay_ms(50);
- temp >>= 1;
- }
- break;
- case 1:
- temp= 0x08;
- for(i = 0; i < 8; i++)
- {
- P0=~temp;
- delay_ms(50);
- temp <<= 1;
- }
- break;
- }
- }
- void init()
- {
- temp= 0x01;
- for(i = 0; i < 8; i++)
- {
- P0=~temp;
- delay_ms(50);
- temp<<= 1;
- }
- }
- void main(void)
- {
- IT0=1;
- EX0=1;
- EA=1;
- P0 = 0xff;
- while(1)
- {
- init();
- }
- }
- void int0(void) interrupt 0
- {
- EA=0;
- delay_ms(10);
- while(1)
- {
- martix(Tmod);
- if (!INT0)
- {
- delay_ms(50);
- Tmod+=1;
- if(Tmod==2)Tmod=0;
- }
- }
- }
复制代码一周热门 更多>