打印

关于51单片机的一个延时问题

[复制链接]
1544|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoziwoye|  楼主 | 2011-8-13 12:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在写12864程序的时候发现了一个问题就是:
用这个延时函数的时候液晶正常显示

void delay50us(uint t)
{
uchar j;
for(;t>0;t--)
        for(j=19;j>0;j--);
}
void delay50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}






但是用这个延时函数的时候液晶不显示:
void delay50us(uchar time)
{
uchar i,j;
for(i=0;i<time;i++)
  for(j=0;j<19;j++);
}
void delay50ms(uchar time)
{
uchar i,j;
for(i=0;i<time;i++)
  for(j=0;j<6245;j++);



请问为什么会这样?   我觉得这2个没什么区别啊   
}*

相关帖子

沙发
NE5532| | 2011-8-13 13:04 | 只看该作者
你有测过两个函数延迟时间是否一样呢,遇到技术问题要去找依据,自己觉得没用。

使用特权

评论回复
板凳
xd54622| | 2011-8-13 13:10 | 只看该作者
我觉得有两个原因:第一是,unsigned char 只有八位,最大只能达到255,你下面的延时函数for(j=0;j<6245;j++);这里,j根本不能达到6245,最多只能达到255,所以这里会出现问题。同样uchar i,j;
for(i=0;i<time;i++),如果你给的time的值大于255的话也不能实现你想要的延时长度,主要就是char和int的长度的问题。还有一个原因,这倒是次要的,记得好像看过说++的时间长度大于--,呵呵,这个我也不确定,这个影响应该不大。主要还是char和int的原因

使用特权

评论回复
地板
xiaoziwoye|  楼主 | 2011-8-13 16:48 | 只看该作者
是我粗心造成的 ,谢谢NE5532的指点和谢谢xd54622

使用特权

评论回复
5
jimmychen| | 2011-8-13 21:00 | 只看该作者
看清楚定义数据的取值范围

使用特权

评论回复
6
fengjumeng| | 2011-8-14 11:29 | 只看该作者
数据类型和考虑延时一致性问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

75

帖子

1

粉丝