时器0方式1,定时器1方式2(作波特率发生器用) Р?ET0 = 1; // 允许定时器0中断Р?TH0 = 0xEE;?// 晶振11.0592MHz,5mS Р?TL0 = 0; Р?PCON= 0;?// 波特率不倍增Р?SCON= 0x50;?// 串口工作方式1,REN=1(允许接收)Р TH1 = 0xFD;?// (11.0592MHz晶振,9600B/S)Р TL1 = 0xFD;Р?TR0 = 1;?// 开始计数Р?TR1 = 1; Р?ET1 = 0;?// 禁止定时器1中断Р?key_port = 0xf0;Р?while(1) Р?{ if(RI == 1)Р { rc = SBUF;RI = 0;Р if((rc <= '9') && (rc >= '0')) buf[3] = rc - '0';Р };Р if(key_port != 0xf0)Р {?send(key() % 10 + '0');Р while(key_port != 0xf0);Р delay_ms(20);Р while(key_port != 0xf0);Р }Р?}Р}Р Рvoid timeint(void) interrupt 1 // 定时器0中断服务程序Р{?unsigned char i,s;Р?TH0 = 0xEE; // 设置定时器时间常数Р?TL0 = 0; Р?i = cnt & 0x03; // 求应点亮的LED号(从左到右依次为 0,1,2,3)Р?P0 = tab[buf[i]];?// 笔划代码送P0口?Р?P2 = scn; // 控制扫描码送P2口Р?cnt++;Р?s = (scn & 0x10) << 3;?// 产生下一次显示的扫描控制码Р?s = s | 0x0F;Р?scn = scn >> 1;Р?scn = scn | s;