• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: 其他
  • 标签: PIC单片机  

资源简介

PIC单片机 18B20温度传感器和六位数码管显示温度结果,其中整数部分2位,小数部分4位

资源截图

代码片段和文件信息

//目的:熟悉DS18B20的使用
//六位数码管显示温度结果,其中整数部分2位,小数部分4位
//每次按下RB0键后进行一次温度转换。
//硬件要求:把DS18B20插在18B20插座上
//          拨码开关S10第1位置ON,其他位置OFF
//          拨码开关S5、S6全部置ON,其他拨码开关全部置OFF

#include
__CONFIG(0x1832);        
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
 
#define  uch unsigned char                     //给unsigned char起别名 uch
# define DQ RA0                                //定义18B20数据端口 
# define DQ_DIR TRISA0                         //定义18B20D口方向寄存器 
# define DQ_HIGH() DQ_DIR =1                   //设置数据口为输入
# define DQ_LOW() DQ = 0; DQ_DIR = 0           //设置数据口为输出
 unsigned char  TLV=0 ;                        //采集到的温度高8位
 unsigned char  THV=0;                         //采集到的温度低8位
 unsigned char TZ=0;                           //转换后的温度值整数部分
 unsigned char TX=0;                           //转换后的温度值小数部分
 unsigned int wd;                              //转换后的温度值BCD码形式

unsigned char shi;                             //整数十位
unsigned char ge;                              //整数个位
unsigned char shifen;                          //十分位
unsigned char baifen;                          //百分位
unsigned char qianfen;                         //千分位
unsigned char wanfen;                          //万分位
unsigned char table[]={0xc00xf90xa40xb00x990x920x820xf80x800x90}; 
//0-9的显示代码

//------------------------------------------------
//延时函数
void delay(char xchar y) 
{
  char z;
  do{
      z=y;
      do{;}while(--z);
     }while(--x);
 }
//其指令时间为:7+(3*(Y-1)+7)*(X-1)如果再加上函数调用的call 指令、页面设定、传递参数花掉的7 个指令。
//则是:14+(3*(Y-1)+7)*(X-1)。

//--------------------------------------------------
//结果显示函数
void display()
{
 TRISA=0X00;                            //设置A口全为输出
 PORTD=table[shi];                      //显示整数十位
 PORTA=0x3e;
 delay(1070);
 PORTD=table[ge]&0X7F;                  //显示整数个位,并点亮小数点
 PORTA=0x3d;
 delay(1070);
 PORTD=table[shifen];                   //显示小数十分位
 PORTA=0x3b;
 delay(1070);
 PORTD=table[baifen];                   //显示小数百分位
 PORTA=0x37;
 delay(1070);
 PORTD=table[qianfen];                  //显示小数千分位
 PORTA=0x2f;
 delay(1070);
 PORTD=table[wanfen];                   //显示小数万分位
 PORTA=0x1f;
 delay(1070);
}

//------------------------------------------------
//系统初始化函数
void init()
{
  ADCON1=0X07;                                //设置A口为普通数字口
  TRISA=0X00;                                 //设置A口方向为输出
  TRISD=0X00;                                 //设置D口方向为输出
}

//-----------------------------------------------
//复位DS18B20函数
reset(void)
{
  char presence=1;
  while(presence)
  { 
    DQ_LOW() ;                                //主机拉至低电平
    delay(270);                              //延时503us
    DQ_HIGH();                                //释放总线等电阻拉高总线并保持15~60us
    delay(28);                               //延时70us
    if(DQ==1) presence=1;                     //没有接收到应答信号,继续复位
    else presence=0;                          //接收到应答信号
    delay(260);                       

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6416  2008-11-03 20:58  ds18b20\ds18b20.c

     文件       3205  2007-03-15 22:26  ds18b20\ds18b20.hex

    ..AD...         0  2008-10-25 22:40  ds18b20

----------- ---------  ---------- -----  ----

                 9839                    4


评论

共有 条评论