#include <REGX51.H>
sbit K1 = P3 ^ 2;
sbit K2 = P3 ^ 3;
sbit K3 = P3 ^ 4;
sbit K4 = P3 ^ 5;
unsigned char led_switch = 0;
volatile unsigned int number = 200;
volatile unsigned char temp;
void Delay(unsigned int xms);
void interrupt_init();
void timer_init();
void main()
{
unsigned char i;
interrupt_init();
timer_init();
while (1)
{
if (led_switch == 1)
{
temp = 0x80;
for (i = 0; i < 8; i++)
{
P1 = ~(temp >> i);
Delay(number);
}
if (led_switch == 0)
{
continue;
}
temp = 0x01;
for (i = 0; i < 8; i++)
{
P1 = ~(temp << i);
Delay(number);
}
}
}
}
void interrupt_init()
{
IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 1;
EA = 1;
}
void timer_init()
{
TMOD = 0X11; // 0001 0101 T1定时方式,模式1(16位),T0定时方式,模式1(16位)
TH0 = (65536 - 5000) / 256; // 初始值为64536,定时5000微秒相当于5毫秒;
TL0 = (65536 - 5000) % 256; //
ET0 = 1;
TR0 = 1; // 启动定时器T0
}
void Delay(unsigned int ms)
{
unsigned char i, j;
while (ms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void exint0_ISR() interrupt 0
{
led_switch = 1;
}
void exint1_ISR() interrupt 2
{
temp = 0x00;
P1 = 0xFF;
led_switch = 0;
}
void timer0_ISR() interrupt 1
{
TH0 = (65536 - 5000) / 256;
TL0 = (65536 - 5000) % 256;
if ((P3 & 0x30) != 0x30)
{
TR0 = 0;
P1 = 0xFF;
Delay(50);
if ((P3 & 0x30) != 0x30)
{
if (K3 == 0)
{
number -= 50;
if (number <= 50)
{
number = 50;
}
}
if (K4 == 0)
{
number += 50;
if (number >= 500)
{
number = 500;
}
}
}
TR0 = 1;
}
}
|