用DS18B20和MAX7219完成温度实时测量与显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*DS18B20、MAX7219驱动数码管、温度测量与显示程序*/

#include

#include

//#include"7219display.h"

#define uchar unsigned char

#define uint unsigned int

sbit ds=P2^0;

sbit beep=P3^6;

sbit L1=P3^0;

uchar flag ;

uchar tempH,tempL;

uint num;

uchar setValue_low=15;

uchar setValue_high=30;

#include

char bright=0x04; /*亮度设置*/

/********************************* 定义MAX7219内部寄存器***************/ #define reg_decode 0x09 /*译码控制寄存器*/

#define reg_intensity 0x0a /*亮度寄存器*/

#define reg_scan_limit 0x0b /*扫描寄存器,控制显示亮度*/

#define reg_shutdown 0x0c /*掉电模式*/

#define reg_display_test 0x0f /*显示检测寄存器*/

/*******************定义7219端口信号************/

sbit dataa=P1^0; /*串行数据输入端口*/

sbit load=P1^1; /*载入数据*/

sbit clk=P1^2; /*片选端*/

/*************定义显示常数表格************/

uchar code dispcode[]={ 0x7e,0x30,0x6d,0x79, // 共阴极显示代码。0~3

0x33,0x5b,0x5f,0x70, //4~7

0x7f,0x7b,0x4e,0x63,0x00//8,9, c,o, bank

}; //不带小数点编码

uchar code table[]=

{

0xfe,//0.

0xb0,//1.

0xed,//2.

0xf9,//3.

0xb3,//4.

0xdb,//5.

0xdf,//6.

0xf0,//7.

0xff,//8.

0xfb,//9

}; //带小数点编码

/*****************发送一字节串行数据******************/ static void Sendbyte(uchar dataout)

{char i;

load=0;

for(i=8;i>0;i--)

{

uchar mask=1<<(i-1);

clk=0;

if(dataout&mask)

dataa=1;

else

dataa=0;

clk=1;

}

}

/*********写入数据**********/

static void Write(uchar reg_number,uchar dataout)

{

load=0;

Sendbyte(reg_number);

Sendbyte(dataout);

load=1;

}

/**********初始化************/

void init(void)

{char i;

dataa=1;

load=1;

clk=1;

Write(reg_scan_limit,3);

Write(reg_decode,0x00);

Write(reg_shutdown,1); //结束停机测试,正常工作

Write(reg_display_test,0); //结束显示测试,正常工作

for(i=1;i<=8;i++)

{Write(i,0x00);

} //关闭全部显示器

}

/*delay*/

/*void delay(int j)

{uchar i;

for(i=0;i

{}} */

/******************** DS18B20 延时函数***********************************/

/*延时函数*/

void TempDelay (uchar us)

{

while(us--);

}

void delay(uint count) //延时子函数

{

uint i;

while(count)

{

i=200;

while(i>0)

i--;

count--;

}

}

void Init_DS18B20() //DS18B20的复位

{

ds=1;

_nop_(); //1us

ds=0;

TempDelay(80); //当总线停留在低电平超过480us,总线上所以器件都将被复位,这里//延时约530us总线停留在低电平超过480μs,总线上的所有器件都

//将被复位。

_nop_();

ds=1; //产生复位脉冲后,微处理器释放总线,让总线处于空闲状态,原因查

相关文档
最新文档