温度传感器以下绿色文字都是18b20的驱动程序的驱动程序,学习时不必每句都看懂,只需要知道每个函数的作用已利于以后调用!调用的方法在最后黑体字那里加以体会即可!条码扫描器,又称为条码阅读器、条码扫描枪、条形码扫描器、条形码扫描枪及条形码阅读器。它是用于读取条码所包含信息的阅读设备。
学习方法:
越是看似高级、复杂的器件,都会有自己的驱动程序往往由生产厂家提供!所以在后期提高阶段要联系如何使用这些驱动函数!就像是以后学习高一级的arm系统时,那都是有自己的库函数的,使用时改变参数而已(当然从表面来讲)!后期价已熟练即可
;
t;
_[9]; 存储读取的字节, 为9字节,id为8字节
_[8];
*,tim;
_;
ct [256]={
0,94, 188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133, 103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59, 217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166, 68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210, 48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241, 19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148, 118,40,171,245,23,73,8,86,180,234,105,55,213, 139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53
};
td ( )
{
(--);
}
i1820 ()
{
d18b20=1;
__();
d18b20=0;
td(80); 530 s80
__();
d18b20=1;
td(14); 100 s14
__();
__();
__();
(d18b20==0)
= 1; 1820 !
= 0; 1820 !
td(20);20
__();
__();
d18b20 = 1;
}
wb ( )单字节写入
{
;
(=0;8;++)
{
d18b20 = 0;
__();
d18b20=001;
td(3); 45 s 5
__();
__();
d18b20=1;
= 1;
}
}
rb ()读取单字节
{
,=0;
(=0;8;++)
{
d18b20 = 0;
= 1;
d18b20 = 1;
(d18b20==1)
|= 080;
td (2);
__();
}
();
}
_ ( )
{
;
(=0;;++)
{
* = rb();
++;
}
}
crc ()
{
,_=0;
(=0;;++)查表校验
_ = ct[_^_[]];
(_);
}
gt ()
{
_ (9);
(crc(9)==0) 校验正确
{
t = _[1]*0100 + _[0];
t *= 0625;
t = 16;
td(1);
}
}
c1820 ()重新配置报警限定值和分辨率
{
i1820();
wb(0);
wb(04);
wb(019);上限
wb(01);下限
wb(07); 11(0125)
i1820();
wb(0);
wb(048);保存设定值
i1820();
wb(0);
wb(08);回调设定值
}
rid ()读取器件
{
i1820();
wb(033);
_(8);
}
tr()
{
= _;
rid();
c1820();
i1820 ();
wb(0);
wb(044);t
i1820 ();
wb(0);
wb(0); t
= _;
gt();
}
gt()
{
(tim==100) 每隔 1000 读取温度
{tim=0;
tr();
}
}
t1()3
{
th1 = 0d8;10
tl1 = 0f0;
tim++;
}
# 52h
# h
gt();声明引用外部函数
t; 声明引用外部变量
();
io
ls138a=p2^2;管脚定义
ls138b=p2^3;
ls138c=p2^4;
此表为 led 的字模, 共阴数码管 0-9-
d_t[] = {03,006,05,04,066,06,07,007,07,06,040};
lo[5],lnv;
_i()
{
tmod|= 011;
th1 = 0d8;10
tl1 = 0f0;
ie = 08a;
tr1= 1;
}
()
{ ;
_i();
(1)
{
gt();
lnv=t;把实际温度送到lnv变量中
lo[0]=d_t[lnv0001000];
lo[1]=d_t[lnv00100];
lo[2]=d_t[lnv010];十位
lo[3]=d_t[lnv];个位
(=0; 4; ++)
{
p0 = lo[] ;
()
{138译码
0s138a=0; ls138b=0; ls138c=0; ;
1s138a=1; ls138b=0; ls138c=0; ;
2s138a=0; ls138b=1; ls138c=0; ;
3s138a=1; ls138b=1; ls138c=0; ;
}
(100);
}
p0 = 0;
}
}
延时程序
()
{
;
(; 0; --)
( = 200; 0; --);
}