#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit p21=P2^1;//按键端口
uint j,f;
uchar dat[]={0xff,0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,0x00};//发送控制LED的十六进制的数

void delay(uint x)//软件延时
{
    uint k;
    while(x--)
	 {
        for(k=120;k>0;k--);
    }
}

void serial_init() //using 0 中断初始化
{
    P1=0x00;
	p21=1;
    SCON=0x50;//工作在方式1下，REN设置为允许接收
	PCON=0x00;//不加倍
	TMOD=0x20;//自动重装初值，波特率：9600
	TH1=0xfd;
	TL1=0xfd;
	TR1=1;//开启定时器
	EA=1;//开启总中断
	ES=1;//开启串口中断
}

void serial_inte() interrupt 4 //中断函数
{
    ES=0;
  	 if(TI==0)//只让接收中断执行以下类容
	 {
	     RI=0;
		 P1=SBUF;
	 }
	 ES=1;
}

void main()
{
    uint i,t;
	P1=0xff;
	serial_init();//串口初始化
    while(1)
	{
	    for(i=0;i<9;)
		{
		    t=p21;
		    delay(1);//延时去抖动
		    if(p21==t&&p21==0)//再次判断是否按下
            {
				while(!p21);//判断是否弹起
                delay(1);//延时去抖动
                SBUF=dat[i];
	            while(!TI);//判断是否发送完成
	            TI=0;
                i++;
				delay(100);//使LED灯能点亮让人看见
		      }
	     }
	 }
}

