如7楼所说的,delay里的数据类型不能改
先看楼主的代码
- void delay() //延时1ms
- {
- unit i,j;
- i=2;
- j=239;
- do
- {
- while(--j);
- }while(--i);
- }
复制代码
看看代码是在干什么
j = 239 -> while(--j)
先把j减一,再看看是否不等于零(不等于零为真,等于零为假)
当减了239下,while(--j)会跳出进入do...while(--i)
i会被减一再进入while(--j)
重点来了,此是j已经是0,再减就会变回65535 (uint = unsigned int 范围是0~65535)
所以楼主的delay会轮回239 + 65536= 65775 次
如改为七楼的unsigned char(0~255)的delay则会轮回239 + 256 = 495 次
是楼主的132分之一
12T 8051在12Mhz 的运行速度大概是 2us一行
七楼的delay约等于1ms
而楼主的delay就要132ms
对于1602来说太久了
|