📄 m_18b20.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 + -