#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit KEY0 = P3^2;
sbit KEY1 = P3^3;
sbit KEY2 = P3^4;
sbit KEY3 = P3^5;
void delay_ms(u16 ms)
{
u16 x,y;
for(x=ms;x>0;x--)
for(y=114;y>0;y--);
}
void SelectHC138(unsigned char channel)
{
switch(channel)
{
case 0:
P1 = (P1 & 0x1f)|0x00;break;
}
}
void Up_Bottom()
{
u8 i,j;
for(j=0;j<3;j++)
{
for(i=0,P0 = 0xff;i<8;i++)
{
P0 = P0>>1;
delay_ms(100);
}
}
P0 = 0xff;
}
void Bottom_Up()
{
u8 i,j;
for(j=0;j<3;j++)
{
for(i=0,P0 = 0xff;i<8;i++)
{
P0 = P0<<1;
delay_ms(200);
}
}
P0 = 0xff;
}
void LED_3()
{
u8 i;
for(i=0;i<3;i++)
{
P0=0x00;
delay_ms(500);
P0=0xff;
delay_ms(500);
}
P0 = 0xff;
}
void LED_3s()
{
P0=0x00;
delay_ms(3000);
P0=0xff;
}
P0=0xff;
void main()
{
SelectHC138(0);
while(1)
{
if(KEY0==0)
{
delay_ms(10);
if(KEY0==0)
{
Bottom_Up();
}
}
if(KEY1==0)
{
delay_ms(10);
if(KEY1==0)
{
Up_Bottom();
}
}
if(KEY2==0)
{
delay_ms(10);
if(KEY2==0)
{
LED_3();
}
}
if(KEY3==0)
{
delay_ms(10);
if(KEY3==0)
{
LED_3s();
}
}
}
}
本次设计使用4个按键,当KEY0按下时,P0口所接的发光二极管(LED3~LED10)以100ms的时间间隔自上至下循环点亮3圈,当KEY1按下时,以200ms的时间间隔自下至上循环点亮3圈;当KEY2按下时,8个LED闪烁3次,时间间隔为500ms;当KEY3按下时,LED全部点亮3秒后熄灭。平时LED的状态为全部熄灭。