单片机干货,利用DS18B20设计数字温度计
一、DS18B20简介传统的温度检测元件有热敏电阻和热电偶。这些检测元件将所测温度信号转换为模拟电信号输出,需再经A/D转换电路将模拟信号转换为数字信号后送至单片机电路处理。采用这种温度检测方法,系统硬件电路与软件编程都相对复杂。
本文设计采用数字温度传感器
DS18B20 作为温度检测元件,测温范围为-55~125OC。DS18B20可以直接读出被测温度值,而且采用3线制与单片机相连,硬件电路简单,节省系统成本并提高了系统可靠性。DS18B20主要具有以下特点:(1)采用单总线(1-wirebus)通信方式,仅需一条口线即可实现与单片机进行数据传输;
(2)具有3引脚小体积封装方式,全部传感元件及转换电路集成在形如一只三极管的集成电路内;
(3)测温范围为-550C~+1250C;
(4)电源供电范围为3.0~5.5V;
(5)可编程为9~12位数字量输出;
(6)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;
(7)在每个DS18B20器件都有独一无二的序列号。
二、DS18B20内部结构
1.引脚功能
DS18B20为三引脚元件,外形同普通三极管,引脚功能详见下表。
序号名称引脚功能描述1GND电源地2DQ为数据(数字信号)输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;3VDD为外接供电电源输入端(在寄生电源接线方式时此引脚必须接地)2.DS18B20内部结构
DS18B20主要由64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、及配置寄存器等组成。
三、DS18B20工作命令
工作时,DS18B20主机(单片机)可以使用各种命令对DS18B20进行操作。操作过程为:初始化DS18B20、发ROM功能命令、发存储器操作命令。
1.读ROM [33H]
这个命令允许总线控制器读到DS18B20的8位系列编码、唯一的序列号和8位CRC码。只有在总线上存在单只DS18B20的时候才能使用这个命令。如果总线上有不止一个从机,当所有从机试图同时传送信号时就会发生数据冲突。
2.匹配 ROM [55H]
这个是匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。所有和64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多个器件时都可以使用。
3.跳过 ROM [0CCH]
这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。如果总线上不止一个从机,在Skip ROM命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突。
4.搜索 ROM [0F0H]
当系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
5.报警搜索[0ECH]
这条命令的流程和Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。
6.写暂存存储器 [4EH]
这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。
7.写暂存存储器[0BEH]
这个命令读取暂存器的内容。读取将从第1个字节开始,一直进行下去,直到第9字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。
8.拷贝暂存存储器[48H]
这个命令把暂存器的内容拷贝到DS18B20的E2ROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E2PROM,DS18B20就会输出一个0,如果拷贝结束的话,DS18B20则输出1。如果使用寄生电源,总线控制器必须在这条命令发出后立即启动强上拉并最少保持10ms。
9.温度转换[44H]
这条命令启动一次温度转换而无需其它数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出时间隙,而DS18B20又忙于做温度转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1。如果使用寄生电源,总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。
10.重新调出[0B8H]
这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上电时自动执行,这样器件一上电暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读数据时间隙,器件会输出温度转换忙的标识:0为忙,1为完成。
11.读电源 [0B4H]
若把这条命令发给DS18B20后发出读时间隙,器件就会返回它的电源模式:0为寄生电源,1为外部电源。
四、DSl8B20工作时序
作为单总线器件,DSl8B20与单片机间采用串行数据传输方式,要求按照严格的时隙进行操作。主机使用时间隙来读写DSl8B20的数据位和写命令字的位(在此所有程序均采用12M晶振),单片机P3.7引脚接DSl8B20数据线。
1.初始化DS18B20
对DS18B20操作时首先要进行初始化:单片机发出复位脉冲,DS18B20以存在脉冲响应。当DS18B20发出存在脉冲对复位脉冲响应时,表明该器件已在总线上并作好操作准备。
初始化时序见图。主机总线to时刻发送一复位脉冲(最短为480us的低电平信号),接着在tl时刻释放总线并进入接收状态。DS18B20在检测到总线的上升沿之后等待15-60us接着DS18B20在t2时刻发出存在脉冲(低电平持续60-240 us)如图中虚线所示。
2.写DS18B20
DS18B20有两种类型的写时序:写0时序和写1时序。
当主机总线to时刻从高拉至低电平时就产生写时间隙。从to时刻开始15us之内应将所需写的位送到总线上,DS18B20在t0后15-60us间对总线采样,若为低电平,则写入的位是0,见图;若为高电平,则写入的位是1,见图。连续写2位间的间隙应大于1us。
3.读DS18B20
当单片机发出读时序时,DS18B20可发送数据到单片机。所有读时序必须持续60 us以上,每个时序之间发须有至少1us的恢复时间。
下图中,主机在to时刻将总线从高电平拉至低电平时,至少在1us后t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后到t2时刻前有效。T2距to为15us。也就是说t2时刻前主机必须完成读位,并在to后的60us一120us内释放总线。
五、设计任务描述
利用单片机89S51与DS18B20设计一数字温度计,测温范围-55~125 OC,显示精度为0.1OC。采用4位LED数码管显示温度,一位小数、三位整数。正温度时,最高位显示百位温度或不显示,负温度时最高位显示符号“-”。系统采用12M晶振。
1、硬件电路设计
DS18B20典型应用电路见图9-8所示。DS18B20数据端接至单片机P3.7引脚,采用四位数码管显示温度值(3位整数,一位小数)。
2、软件设计
系统程序主要包括主程序、温度转换子程序、温度BCD码转换子程序、显示缓冲区刷新子程序等。
主程序
主程序的主要功能是进行温度转换、温度BCD码转换、显示缓冲区刷新及温度显示等,见流程图。
温度转换子程序
该子程序的功能是启动DS18B20温度转换,并将DS18B20RAM中的前两个字节温度数据读入单片机指定存储单元中。
温度BCD码转换子程序
该子程序的功能是判别所测温度的正负值,并将其小数及整数部分分别转换成BCD码,再存入单片机指定的温度存储单元中。
从DS18B20读取出的二进制值必须先换成十进制值,才能用于字符的显示。因为DS18B20的转换精度为9~12位可选,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。通过观察表9-5可以发现一个十进制值和二进制值之间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一个字节,这个字节的二进制值化为十进制值后,就是温度值的百、十、个位值,而剩下的低字节的低半字节化成十进制后,就是温度值的小数部分。小数部分因为是半个字节,所以二进制值范围是0~F,转换成十进制小数值就是0.0625的倍数(0~15倍)。
六、源程序清单
;工作内存定义
TEMPL EQU 26H ;存放二进制温度低字节
TEMPH EQU 27H ;存放二进制温度高字节
TEMPHC EQU 28H ;存放温度个位及小数位
TEMPLC EQU 29H ;存放温度百位(或符号位)及十位数
ORG 0000H
MOV SP, #60H
START: LCALL READTEMP ;调温度转换子程序
LCALL CONVTEMP ;调温度BCD码转换子程序
LCALL DISPNEW ;调显示缓冲区刷新子程序
LCALL DISP ;调显示子程序 ;
LJMP START
;复位ds18B20子程序
initds1820: SETB P3.7 ;置位
NOP ;空操作
CLR P3.7 ;清零
MOV R2,#250 ;主机发出延时500微秒的复位低脉冲
DJNZ R2,$ ;自减(-1)循环
SETB P3.7 ;然后拉高数据线
MOV R2,#30
DJNZ R2,$ ;延时60us等待DS18B20回应
JNB P3.7,INIT1
JMP initds1820 ;超时而没有响应,重新初始化
INIT1: MOV R2,#120
DJNZ R2,$ ;延时240us
JB P3.7,INIT2 ;数据变高,初始化成功
JMP initds1820
INIT2: MOV R2,#240
DJNZ R2,$
RET
;从DS18B20中读出一个字节数据子程序
READDS1820: MOV R7, #08H
SETB P3.7
NOP
NOP
RDLOOP: CLR P3.7
NOP
NOP
NOP
SETB P3.7
MOV R6, #07H ;延时 15us
DJNZ R6, $
MOV C, P3.7
MOV R6, #3CH ; 延时120us
DJNZ R6, $
RRC A
SETB P3.7
DJNZ R7, RDLOOP
MOV R6, #3CH ; 延时120 us
DJNZ R6, $
RET
;向DS18B20中写一个字节数据子程序
WRITEDS1820: MOV R7, #08H
SETB P3.7
NOP
NOP
WRLOP: CLR P3.7
MOV R6, #07H ; 延时15 us
DJNZ R6, $
RRC A
MOV P3.7, C
MOV R6, #34H ; 延时104 us
DJNZ R6, $
SETB P3.7
DJNZ R7, WRLOP
RET
;温度转换子程序
READTEMP: LCALL INITDS1820
MOV A, #0CCH
LCALL WRITEDS1820 ; 跳过ROM匹配
MOV A, #44H
LCALL WRITEDS1820 ;写入转换命令
MOV R6,#34H
DJNZ R6,$
READTEMP1: LCALL INITDS1820 ; 读出两字节温度子程序
MOV A, #0CCH
LCALL WRITEDS1820 ; 跳过ROM匹配
MOV A, #0BEH
LCALL WRITEDS1820 ;读暂存器
MOV R5, #02H
MOV R0, #TEMPL
READTEMP2: LCALL READDS1820 ;读一个字节
MOV @R0, A
INC R0
DJNZ R5, READTEMP2 ;未读完继续
RET
;处理温度数据并转换为BCD码子程序
CONVTEMP: MOV A, TEMPH ;取高位字节符号位
ANL A, #80H
JZ TEMPC1 ;温度为正转移
CLR C
MOV A,TEMPL ;温度为负求补码
CPL A
ADD A, #01H
MOV TEMPL, A
MOV A, TEMPH
CPL A
ADDC A, #00H
MOV TEMPH, A
MOV TEMPHC, #0BH ;TEMPHC HI=符号位(-)
SJMP TEMPC11
TEMPC1: MOV TEMPHC,#0AH ; 温度为正,符号位不显示,置码为0AH
TEMPC11: MOV A,TEMPHC
SWAP A
MOV TEMPHC, A
MOV A,TEMPL ;小数位乘 0.0625转为BCD码(采用查表法)
ANL A, #0FH
MOV DPTR,#TEMPDOTTAB
MOVC A,@A+DPTR
MOV TEMPLC,A ;TEMPLC LOW=小数部分BCD
MOV A, TEMPL ;将两字节温度组合为一字节整数温度
ANL A, #0F0H
SWAP A
MOV TEMPL, A
MOV A, TEMPH
ANL A, #0FH
SWAP A
ORL A, TEMPL
LCALL HEX2BCD1 ;将整数温度转换为BCD码
MOV TEMPL, A
ANL A, #0F0H
SWAP A
ORL A, TEMPHC ;TEMPHC LOW= 十位数BCD
MOV TEMPHC, A
MOV A, TEMPL
ANL A, #0FH
SWAP A ;TEMPLC HI=个位数BCD
ORL A, TEMPLC
MOV TEMPLC, A
MOV A, R7
JZ TEMPC12
ANL A, #0FH
SWAP A
MOV R7, A
MOV A,TEMPHC ;TEMPHC HI=百位数BCD
ANL A, #0FH
ORL A, R7
MOV TEMPHC, A
TEMPC12: RET
;小数部分代码表
TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB 06H,07H,08H,08H,09H,09H
;显示区缓冲区刷新子程序
DISPNEW: MOV A, TEMPLC ;小数位置70H中
ANL A, # 0FH
MOV 70H, A
MOV A, TEMPLC ;个位置71H中
SWAP A
ANL A, #0FH
MOV 71H, A
MOV A, TEMPHC ;十位置72H中
ANL A, #0FH
MOV 72H, A
MOV A, TEMPHC ;百位或“-”符号位置73H中
SWAP A
ANL A, #0FH
MOV 73H, A
RET
;显示子程序
DISP: MOV R1, #70H ;指向显示数据首址
MOV R5, #0FEH ;扫描控制字初值
PLAY: MOV P0, #0FFH
MOV A, R5 ;位控码放入A
MOV P2, A ;从P2口输出
MOV A, @R1 ; 取显示数据到A
MOV DPTR, #TAB ;取段码表地址
MOVC A, @A+DPTR ;查显示数据对应段码
MOV P0, A ; P0输出段码
MOV A, R5
JB ACC.1 , LOOP5 ;小数点处理
CLR P0.7
LOOP5: LCALL DL1MS ;显示1ms
INC R1 ;指向下一地址
MOV A, R5 ;扫描控制字放入A
JNB ACC.3, ENDOUT ;ACC.3=0时一次显示结束
RL A ;A中数据循环左移
MOV R5, A ;放回R5内
AJMP PLAY ; 跳回PLAY循环
ENDOUT: MOV P0, #0FFH ;一次显示结束,P0口复位
MOV P2, #0FFH ;P2口复位
RET ;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;共阳段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"
DL1MS: MOV R6, #14H ;1ms延时子程序
DL1: MOV R7, #19H
DL2: DJNZ R7, DL2
DJNZ R6, DL1
RET
;单字节十六进制转BCD
HEX2BCD1: MOV B, #064H
DIV AB ; B=A%100
MOV R7, A ; R7=百位数
MOV A, #0AH
XCH A, B
DIV AB ;B=A%B
SWAP A
ORL A, B
RET
END
DS18B20数字温度计C语言源程序
DS18B20数字温度计使用1.DS18B20基本知识
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
1、DS18B20产品的特点
(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55。C到+125。C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
2、DS18B20的引脚介绍
TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
图1(底视图)
表1 DS18B20详细引脚功能描述
DS18B20的使用方法由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
DS18B20的复位时序
DS18B20的读时序
对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
DS18B20的写时序
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
实验任务用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。
电路原理图 系统板上硬件连线把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。把“四路单总线”区域中的对应的DQ端子连接到“单片机系统”区域中的P3.7/RD端子上。C语言源程序#include <AT89X52.H>
#include <INTRINS.h>
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00,0x40};
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
25,28,31,34,38,41,44,48,
50,53,56,59,63,66,69,72,
75,78,81,84,88,91,94,97};
unsigned char displaycount;
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
unsigned char timecount;
unsigned char readdata[8];
sbit DQ=P3^7;
bit sflag;
bit resetpulse(void)
{
unsigned char i;
DQ=0;
for(i=255;i>0;i--);
DQ=1;
for(i=60;i>0;i--);
return(DQ);
for(i=200;i>0;i--);
}
void writecommandtods18b20(unsigned char command)
{
unsigned char i;
unsigned char j;
for(i=0;i<8;i++)
{
if((command & 0x01)==0)
{
DQ=0;
for(j=35;j>0;j--);
DQ=1;
}
else
{
DQ=0;
for(j=2;j>0;j--);
DQ=1;
for(j=33;j>0;j--);
}
command=_cror_(command,1);
}
}
unsigned char readdatafromds18b20(void)
{
unsigned char i;
unsigned char j;
unsigned char temp;
temp=0;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1);
DQ=0;
_nop_();
_nop_();
DQ=1;
for(j=10;j>0;j--);
if(DQ==1)
{
temp=temp | 0x80;
}
else
{
temp=temp | 0x00;
}
for(j=200;j>0;j--);
}
return(temp);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
ET0=1;
EA=1;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
TR0=1;
while(1)
{
;
}
}
void t0(void) interrupt 1 using 0
{
unsigned char x;
unsigned int result;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
if(displaycount==2)
{
P0=displaycode[displaybuf[displaycount]] | 0x80;
}
else
{
P0=displaycode[displaybuf[displaycount]];
}
P2=displaybit[displaycount];
displaycount++;
if(displaycount==8)
{
displaycount=0;
}
timecount++;
if(timecount==150)
{
timecount=0;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0xbe);
readdata[0]=readdatafromds18b20();
readdata[1]=readdatafromds18b20();
for(x=0;x<8;x++)
{
displaybuf[x]=16;
}
sflag=0;
if((readdata[1] & 0xf8)!=0x00)
{
sflag=1;
readdata[1]=~readdata[1];
readdata[0]=~readdata[0];
result=readdata[0]+1;
readdata[0]=result;
if(result>255)
{
readdata[1]++;
}
}
readdata[1]=readdata[1]<<4;
readdata[1]=readdata[1] & 0x70;
x=readdata[0];
x=x>>4;
x=x & 0x0f;
readdata[1]=readdata[1] | x;
x=2;
result=readdata[1];
while(result/10)
{
displaybuf[x]=result%10;
result=result/10;
x++;
}
displaybuf[x]=result;
if(sflag==1)
{
displaybuf[x+1]=17;
}
x=readdata[0] & 0x0f;
x=x<<1;
displaybuf[0]=(dotcode[x])%10;
displaybuf[1]=(dotcode[x])/10;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
}
}
相关问答
英语翻译随着社会科技的不断发展, 单片机 控制无疑是人们追求...[最佳回答]Withthecontinuousdevelopmentofsocialscienceandtechnology,SCMisoneofthegoalsthatpeoplep...
用 单片机 检测室外温度,用哪个型号温度传感器好?说句实话,18B20精度只有±0.5℃,根本不能用来做体温计。而AD590非线性误差是±0.3℃,LM35DZ误差是±0.4~0.8℃。也不能用体温计。你想啊,人体差那么零点几度...
【基于AT89S52 单片机 的电子万年历的设计与制作,的目的和意义...基于AT89S52单片机的电子万年历的设计与制作,的目的和意义,急求!技术指标:1、用液晶显示年月、日、星期、时、分、秒,阴历、运行时间、温度.2、具有年、月...
想用温度传感器制作一个最简单能显示是周围温度的装置,具体...首先,选择一种合适的温度传感器,比如DS18B20等。然后,根据需要设计相应的电路...最后就是控制了,性价比最好的就是单片机了。这种简单功能,51核的单片机就足够...
怎么样不用 温度计 也可以知道温度的多少_作业帮[最佳回答]这个一个是靠常识,比如冰水混合物0度,标准大气压下物体的沸点,比如水、氧气、氮气、二氧化碳、铁、铝、铜等等,这些固定值.在就是借助除温度计以外...
前辈们!求答案 北京真诚相待风管共板法兰机,风管共板法兰...[回答]对于开发版的选择不要选择多花哨的,实用就行了。吴鉴鹰单片机开发板资源介绍1、一个CH340的USB转UART芯片,实现USB下载程序,为无串口的笔记本电脑提...
单片机 主要应用于哪些领域? - 潘耶耶- 的回答 - 懂得1.单片在一个系统中只使用一片机,这是目前应用最多的一种方式。主品单片机与传统的机械产品相结合,使传统的机械产品结构简单化、控制智能化,构成了...
单片机 主要应用于哪些领域? - 134****2754 的回答 - 懂得单片机广泛应用于仪表、家用电器、医用理及过程控制等领域。1、智能仪器单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点...
单片机 原理及应用主要学什么?单片机原理:单片机由运算器、控制器、存储器、输入输出设备构成。单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程...
麻烦大神们有没有谁给我推荐一下 服务好的风管共板法兰机一...[回答]这个的选择没有必要多么花哨,实用即可,不要选择那种销量很大的那种,没有技术指导的,可以看看吴鉴鹰单片机开发板,或者亚伯科技的。资源介绍1、一个C...