关于51单片机,动态数码管显示的问题

#使用自己定义的函数void delay (int n)与void display ( char m)时,数码管无法正常显示;
#而增加了例程里面的宏定义#define uint unsigned int 与#define uchar unsigned char时,更改两个函数为void delay (uint n)与void display ( uchar m)时.数码管可以正常显示。
#请问是什么原因?
代码如下:
#include<reg52.h>
#include<intrins.h>
//#define uint unsigned int
//#define uchar unsigned char
sbit du=P2^6;
sbit we=P2^7;
//void delay (uint n);
void delay (int n);
//void display (uchar m);
void display (char m);
//uchar code s[]={0X3F,0X06,0X5B};
char s[]={0X3F,0X06,0X5B};
void main()
{
while(1)
{
display(211);

}
}
//void delay (uint n)
void delay (int n)
{
int x,y;
for( x=0;x<n;x++)
for( y=0;y<114;y++);

}
//void display (uchar m)
void display (char m)
{
//uchar bai,shi,ge;
char bai,shi,ge;
bai=m/100;
shi=m%100/10;
ge=m%10;

P0=0XFF;//清除断码
we=1;//执行位选,打开U8上的锁存器,LE高电平
P0=0xfe;//当输入0x00时,8位数码管全部点亮
we=0;//将要进入段选U9,关闭U8的锁存器,LE低电平,锁存数据

du=1;//打开段选锁存器,打开U9上的锁存器,LE高电平
P0=s[bai];  //显示数字1
du=0;//锁存数据

delay(5);

P0=0XFF;//清除断码
we=1;//执行位选,打开U8上的锁存器,LE高电平
P0=0xfd;//选择第二位数码管
we=0;//将要进入段选U9,关闭U8的锁存器,LE低电平,锁存数据

du=1;//打开段选锁存器,打开U9上的锁存器,LE高电平
P0=s[shi];  //显示数字2
du=0;//锁存数据

delay(5);

P0=0XFF;//清除断码
we=1;//执行位选,打开U8上的锁存器,LE高电平
P0=0xfb;//选择第三位数码管
we=0;//将要进入段选U9,关闭U8的锁存器,LE低电平,锁存数据

du=1;//打开段选锁存器,打开U9上的锁存器,LE高电平
P0=s[ge];  //显示数字3
du=0;//锁存数据

delay(5);

}