用DS18B20和MAX7219完成温度实时测量与显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; //产生复位脉冲后,微处理器释放总线,让总线处于空闲状态,原因查