Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830342
  • 博文数量: 85
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 952
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-19 22:52
文章分类

全部博文(85)

文章存档

2011年(1)

2008年(1)

2007年(60)

2006年(23)

我的朋友

分类:

2007-01-30 03:24:00

    呵呵,搞得我似专门研究数码管的一样了。不过,还是有必要再罗嗦几句的。
 
    前面谈到实时显示TLC549的A/D转换的程序中,将TLC549的转换动作和四位数码管动态扫描放在一个while循环中实现,由于TLC549的转换速度比较快,因此对数码管的动态显示的影响还不算大。
 
    而系统中还存在DS18B20(串行式数字温度传感器)时,由于其转换时间比较长,当使用12位精度时,转换一次需要750ms,这样,再加上对其初始化、启动转换、读转换结果等操作时间,差不多需要800ms来更新一次温度数据。如果还是使用上面的办法来实现温度测量的实时显示,将DS18B20的温度转换子函数和数码管动态扫描放到一个循环中,显然每片数码管的轮流选中周期只有1Hz多,不可能实现动态扫描显示。
 
    怎么办呢?其实脑筋转一转,我们在等待750ms来等DS18B20完成一次温度转换时,是使用delay()函数来作的,这样,单片机什么也不做,就在等(如果是软件延时的话,当然使用定时器可以解放CPU,不过没有必要);事实上,delay()750ms是为了等DS18B20,完了再对其进行操作,而不是等CPU,所以,只要在这段时间内不访问DS18B20就可以了,而CPU是可以做其他事情的,过了750ms之后再回头来读温度值便是。如果我们让CPU在这段时间内不停地用动态扫描数码管的办法来显示前次温度值,这样750ms后读入新的温度值时,再送新的值显示,就实现了温度的实时显示功能(约1s更新一次)。
   
阅读(1891) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~