⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_18b20.c

📁 dsb18b20单总线温度传感器的测试
💻 C
字号:
/**************************************************************************
DS18B20数字温度模块演示程序

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

#include <config.h>

void d_convert(Uchar  dd);
data Uchar displaybuff[]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a}; 
data Uchar hdata=0xfe;                                      
data Uchar ldata=0x05;

Uchar databuff[9];

void main(void)           {  
Uchar j;
Delayms(500);   
Init_18b20();
Skip();
Write_18b20(0x4e);    //写缓存命令
Write_18b20(hdata);
Write_18b20(ldata);
Write_18b20(0x7f);    //12位分辨率
Init_18b20();
Skip();
Write_18b20(0x48);
Init_18b20();
Skip();
while(1)   {
Init_18b20();
Skip();
Convert();
Display(displaybuff);   //调用显示程序实现延时功能,以完成温度转换,并且使显示不出现闪烁
Display(displaybuff);
Display(displaybuff);
Display(displaybuff); 
Display(displaybuff);  
Init_18b20();
Skip();
Read_scrat();       //读18b20 scratchpad   
for(j=0;j<9;j++)
 {
  databuff[j]=Read_18b20();
  Display(displaybuff);
 }
databuff[0]=databuff[0]>>4;
databuff[1]=databuff[1]<<4;
databuff[0]=(databuff[0]|databuff[1])&0x7f;
d_convert(databuff[0]);

             }
							 }
  
/*************************************************************************************************
10进制数据送入缓冲区
**************************************************************************************************/
void d_convert(Uchar  dd) {
Uchar bw,sw,gw;
bw=dd/100;
sw=(dd%100)/10;
gw=dd%10;
displaybuff[0]=gw;
displaybuff[1]=sw;
displaybuff[2]=bw;         }



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

74HC164串行移位输出数码管的段数据

*******************************************************/
#include <config.h>


#define SDA164    P2_5     //74HC164的接口定义  
#define SCK164    P2_4 

/*************************************************************************************************/
/*8位数据从74HC164的串行输入端输入,从输出端并行输出
/*************************************************************************************************/
void Dsenddata(Uchar dd) {        
Uchar j;
for (j=0;j<8;j++) {
                   SDA164=(bit)(dd&0x01);
				   SCK164=1;  SCK164=0;
				   dd=dd>>1;
				   }
				         }




/****************************************************************
74HC164和HC138驱动的6位数码管动态显示的KEIL C语言演示程序(函数模块)

****************************************************************/
#include <config.h>
   
/***************************************************************
74HC164用于输出段数据,参见Dsenddata(Uchar *p)模块
74HC138用于输出位数据
*****************************************************************/
//74HC138接口定义
#define A138      P2_3    //A138 B138 C138 分别对应74HC138的译码输入端A B C
#define B138      P2_2
#define C138      P2_1
code Uchar SZDM[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff,0x00}; //共阳数码管数字0--9和全灭、全亮的对应值


/****************************************************************************************************/
/*动态扫描显示程序*/
/****************************************************************************************************/
void Display(Uchar *p)           {
     Dsenddata(SZDM[*p]);
     C138=1;B138=0;A138=1;
	 Delayms(3);
     C138=1;B138=1;A138=1;

     Dsenddata(SZDM[*++p]);
     C138=1;B138=0;A138=0;
	 Delayms(3);
     C138=1;B138=1;A138=1;

     Dsenddata(SZDM[*++p]);
     C138=0;B138=1;A138=1;
	 Delayms(3);
     C138=1;B138=1;A138=1;

     Dsenddata(SZDM[*++p]);
     C138=0;B138=1;A138=0;
	 Delayms(3);
     C138=1;B138=1;A138=1;

     Dsenddata(SZDM[*++p]);
     C138=0;B138=0;A138=1;
	 Delayms(3);
     C138=1;B138=1;A138=1;

     Dsenddata(SZDM[*++p]);
     C138=0;B138=0;A138=0;
	 Delayms(3);
     C138=1;B138=1;A138=1;
                          }
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -