导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[fengjian99]单片机编程----数码管温度测量prot



No.69727
作者:fengjian99
邮件:gj_92839@163.com
ID:109039
登陆:21次
文章数:33篇
最后登陆IP:113.97.226.101
最后登陆:2010/10/26 15:08:32
注册:2008/4/24 14:26:22
财富:296
发帖时间:2009/5/15 16:38:37
发贴者IP:219.133.75.253
标题:fengjian99:单片机编程----数码管温度测量proteus程序
摘要:No.69727单片机编程----数码管温度测量proteus程序 程序功能:利用单线制DS18B20温度传感器
          LED数码管显示当前的温度值
********************************************/
#include                  //DS18B20温度传感器程序 
code unsigned char seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
                               0x82,0xf8,0x80,0x90,0xff}; //不带小数点的共阳数码管段码
code unsigned char seg7codeB[]={0x40,0x79,0x24,0x30,0x19,0x12,
                               0x02,0x78,0x00,0x10,0xff}; //带小数点的共阳数码管段码


sbit DQ="P3"^6; //数据传输线接单片机的相应的引脚 
unsigned char tempL="0"; //设全局变量
unsigned char tempH="0"; 
unsigned int sdata;//测量到的温度的整数部分
unsigned char xiaoshu1;//小数第一位
unsigned char xiaoshu2;//小数第二位
unsigned char xiaoshu;//两位小数
bit  fg="1";        //温度正负标志

//******************延时子程序 *******************************

//这个延时程序的具体延时时间是time=i*8+10,适用于小于2ms的延时

//************************************************************
void delay(unsigned char i)
{
for(i;i>  0;i--);
}

//***********************************************************

//                     延时子程序

//************************************************************
void delay1ms()
{
unsigned char i;
for(i=124;i>  0;i--);  //延时124*8+10=1002us
}

//*****************************初始化程序 *********************************//

Init_DS18B20(void) 
{
unsigned char x="0";
DQ=1; //DQ先置高 
delay(8); //稍延时
DQ=0; //发送复位脉冲 
delay(80); //延时(>  480us) 
DQ=1; //拉高数据线 
delay(5); //等待(15~60us) 
x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 
delay(20); 

//**********读一个字节************//

ReadOneChar(void)  //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i="0"; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat="0"; 
for (i=8;i>  0;i--) //一个字节有8位 
{
DQ=1; 
delay(1); 
DQ=0;
dat>  >  =1; 
DQ=1; 
if(DQ) 
dat|=0x80; 
delay(4);

return(dat);

//*********************** **写一个字节**************************//

WriteOneChar(unsigned char dat) 

  unsigned char i="0"; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
  for(i=8;i>  0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。 
  {
   DQ="0"; //在开始另一个写周期前必须有1us以上的高电平恢复期。 
   DQ="dat"&0x01; 
   delay(5); 
   DQ="1"; 
   dat>  >  =1;
  } 
  delay(4);

//读温度值(低位放tempL;高位放tempH;)
ReadTemperature(void) 

Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
delay(125); //转换需要一点时间,延时 
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作 
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) 
t ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:7276毫秒 查询6次